【发布时间】:2014-09-01 17:00:13
【问题描述】:
我正在开发一个使用 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, // "
};
这是一个错误还是出于某种原因,facebook 的代码应该真正打开一个新会话?我应该与状态的int 值而不是常量进行比较吗?为什么记录的值会与常数不一致?
...此外,记录状态在状态重新打开后,它记录为 513 或 514,这与任何常量不符。
【问题讨论】: