2012-09-13 54 views
6

我正在使用iOS的Facebook的SDK 3.0。我如何检查用户是否已经登录?检查是否登录ios Facebook的SDK 3.0

我试过下面一行,但它不能正常工作。它有时返回没有,虽然我登录。有什么建议吗?

if (FBSession.activeSession.isOpen == YES) 
{ 
    // post to wall else login 
} 

- 编辑 -

这就是我打开我的Facebook会话:

NSArray *permissions = [[NSArray alloc] initWithObjects: 
         @"user_likes", 
         @"read_stream", 
         @"publish_actions", 
         nil]; 
return [FBSession openActiveSessionWithPermissions:permissions 
             allowLoginUI:allowLoginUI 
           completionHandler:^(FBSession *session, 
                FBSessionState state, 
                NSError *error) { 
            [self sessionStateChanged:session 
                 state:state 
                 error:error]; 
           }]; 

需要登录,因此它的作品第一次。如果我尝试这个,而我已经登录在FBSession.activeSession.isOpen返回NO。

回答

13

您可以尝试在不使 登录界面打开一个新的会话检查是否有一个有效的令牌

if (FBSession.activeSession.isOpen) 
{ 
    // post to wall 
} else { 
    // try to open session with existing valid token 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"user_likes", 
          @"read_stream", 
          @"publish_actions", 
          nil]; 
    FBSession *session = [[FBSession alloc] initWithPermissions:permissions]; 
    [FBSession setActiveSession:session]; 
    if([FBSession openActiveSessionWithAllowLoginUI:NO]) { 
     // post to wall 
    } else { 
     // you need to log the user 
    } 
} 
+0

只是将我每一次来验证。你如何强制SDK保留认证令牌?权限匹配应用程序,但FBSessionStateCreatedTokenLoaded是状态。 –

+0

这个答案不起作用,并与系统帐户与通过Facebook应用程序或UIWebView获取令牌的问题 – jjxtra

+0

@PsychoDad问题是针对Facebook SDK 3。0 – Moxy

1

你如何打开你的FBSession?

如果您要创建实例,请务必设置FBSession.activeSession。这是我一段时间的问题。

+0

我编辑我的问题 –

9

我做到了在Facebook的例子

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) 
{ 

} 
+1

我不太确定这一点。 session.state现在似乎是一个位掩码。你也可以有FBSessionStateOpenTokenExtended状态。有一个关于会话状态开放位的注释:打开会话状态表示用户已经登录或缓存的令牌可用。我认为==比较在所有情况下都不起作用。 – John

2

会议如果状态为FBSessionStateOpenFBSessionStateOpenTokenExtended,则处于活动状态。您可以使用以下的功能检查,如果用户登录:

- (BOOL)isSessionOpen 
{ 
    return FBSession.activeSession.state == FBSessionStateOpen || FBSession.activeSession.state == FBSessionStateOpenTokenExtended; 
} 
13

如果您正在使用FBSDK大于4.x的话就没有FBSession的概念。您必须仅通过使用[FBSDKAccessToken currentAccessToken]来查找活动会话,只需检查它是否具有nil值,否则不会有活动会话。

相反,你应该在 viewDidLoad或类似的检查[FBSDKAccessToken currentAccessToken]。如果有current token可用,请在登录后执行 工作。您也可以使用currentAccessToken检索缓存的令牌 。

你可以找到更多在这里https://developers.facebook.com/docs/ios/upgrading-4.x

FBSession.activeSession已被替换[FBSDKAccessToken currentAccessToken]FBSDKLoginManager。没有概念 session state。相反,请使用经理登录,并设置 currentAccessToken参考。

0
if ([FBSDKAccessToken currentAccessToken]) 
{ 
    NSLog(@"Already login"); 
    //[FBSession openActiveSessionWithAllowLoginUI: YES]; 
} 
+0

一般来说,如果他们解释为什么/他们如何工作而不是仅仅抛出一些代码,他们会收到更好的答案。 –