6

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

我尝试了下面的行,但它不能正常工作。尽管我已登录,但有时它会返回 NO。有什么建议吗?

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。

4

6 回答 6

13

您可以通过尝试在不允许登录 UI 的情况下打开新会话来检查您是否拥有有效的令牌

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
    }
}
于 2012-09-13T22:52:28.750 回答
10

如果您使用的 FBSDK 大于 4.x,则没有 FBSession 的概念。您必须仅通过[FBSDKAccessToken currentAccessToken]简单地检查它是否具有nil价值来找到活动会话,否则没有活动会话。

相反,您应该检查[FBSDKAccessToken currentAccessToken]viewDidLoad类似。如果 acurrent token可用,请执行登录后工作。您还可以使用它currentAccessToken来检索缓存的令牌。

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

FBSession.activeSession已替换为[FBSDKAccessToken currentAccessToken]FBSDKLoginManager。没有的概念 session state。相反,使用管理器登录,这会设置 currentAccessToken参考。

于 2015-08-26T12:29:07.400 回答
9

我按照 Facebook 示例中的方式进行操作

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

}
于 2012-10-28T07:26:54.610 回答
2

如果状态为 inFBSessionStateOpen或 in ,则会话处于活动状态FBSessionStateOpenTokenExtended。您可以使用下面的函数来检查用户是否已登录:

- (BOOL)isSessionOpen
{
    return FBSession.activeSession.state == FBSessionStateOpen || FBSession.activeSession.state == FBSessionStateOpenTokenExtended;
}
于 2014-04-28T07:38:49.320 回答
1

你是如何打开你的 FBSession 的?

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

于 2012-09-13T18:07:06.833 回答
0
    if ([FBSDKAccessToken currentAccessToken]) 
{
   NSLog(@"Already login");
    //[FBSession openActiveSessionWithAllowLoginUI: YES];
}
于 2016-03-16T11:34:34.907 回答