我正在开发一个使用Facebook登录和共享的iOS应用程序。这需要检查各个位置的活动会话状态。
Facebook提供的代码检查当前状态并决定是否打开新会话。然而,记录会话状态表明它可能是打开的,即使与FBSessionState常量的比较可能表明它是关闭的。
例如,使用以下代码(facebook的),即使我的会话状态记录为
1
,也不等于
FBSessionStateOpen
或
FBSessionStateOpenTokenExtended
,并打开了一个新会话。
NSLog(@"facebook session state: %lu", FBSession.activeSession.state);
// log shows 1
if (FBSession.activeSession.state == FBSessionStateOpen
|| FBSession.activeSession.state == FBSessionStateOpenTokenExtended) {
NSLog(@"facebook session already open");
// do stuff...
} else {
// new session opened anyway
NSLog(@"open new facebook session");
/* code to open a session omitted here
...
*/
}
尽管恒定的定义显示
1 = FBSessionStateOpen
.
FBSession.h:
typedef NS_ENUM(NSUInteger, FBSessionState) {
/*! One of two initial states indicating that no valid cached token was found */
FBSessionStateCreated = 0,
/*! One of two initial session states indicating that a cached token was loaded;
when a session is in this state, a call to open* will result in an open session,
without UX or app-switching*/
FBSessionStateCreatedTokenLoaded = 1,
/*! One of three pre-open session states indicating that an attempt to open the session
is underway*/
FBSessionStateCreatedOpening = 2,
/*! Open session state indicating user has logged in or a cached token is available */
FBSessionStateOpen = 1 | FB_SESSIONSTATEOPENBIT,
/*! Open session state indicating token has been extended, or the user has granted additional permissions */
FBSessionStateOpenTokenExtended = 2 | FB_SESSIONSTATEOPENBIT,
/*! Closed session state indicating that a login attempt failed */
FBSessionStateClosedLoginFailed = 1 | FB_SESSIONSTATETERMINALBIT, // NSError obj w/more info
/*! Closed session state indicating that the session was closed, but the users token
remains cached on the device for later use */
FBSessionStateClosed = 2 | FB_SESSIONSTATETERMINALBIT, // "
};
这是一个bug还是facebook的代码真的应该打开一个新的会话?我应该与
int
状态值而不是常量?为什么记录的值与常量不一致?
…此外,记录状态
之后
状态被重新打开,它记录为513或514,这与任何常数都不一致。