1

我正在关注 facebook 身份验证的示例

https://developers.facebook.com/docs/tutorials/ios-sdk-games/authenticate/

对于登录,我使用过:

 [FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES 
                                  completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                      if (session.isOpen) 
                                      {
                                          appDelegate.session=session; 

                                      }
                                  }//end completionHandler
         ];

对于 facebook apprequest 对话框:

 if (nil == appDelegate.facebook) 
{
    appDelegate.facebook = [[Facebook alloc]
                            initWithAppId:FBSession.activeSession.appID
                            andDelegate:nil];

    // Store the Facebook session information
    appDelegate.facebook.accessToken = FBSession.activeSession.accessToken;
    appDelegate.facebook.expirationDate = FBSession.activeSession.expirationDate;
}

[self.facebook dialog:APPREQUEST
       andParams:params
     andDelegate:self];

一段时间后,当我再次尝试运行应用程序时,应用程序已连接到 facebook,并且 FBSession 也处于活动状态,但是当我调用 apprequest 对话框时,它会要求登录。

appDelegate.facebook = [[Facebook alloc] 是否有任何问题或我的会话已过期?

请问有什么建议吗?

4

1 回答 1

2

尝试将您的 Facebook 对象会话设置代码放在完成处理程序中。每当会话更改时,都应调用完成处理程序,例如,稍后扩展令牌时,应再次调用它。这样您就可以保持 Facebook 对象会话的刷新。您不必自己扩展访问令牌,SDK 现在会自动为您完成。

[FBSession openActiveSessionWithPermissions:permissions 
                               allowLoginUI:YES 
                          completionHandler:
    ^(FBSession *session, FBSessionState status, NSError *error) {
        if (session.isOpen) 
        {
            appDelegate.session=session; 

            if (nil == appDelegate.facebook) 
            {
                appDelegate.facebook = [[Facebook alloc]
                        initWithAppId:FBSession.activeSession.appID
                        andDelegate:nil];
            }

            // Store the Facebook session information
            appDelegate.facebook.accessToken = FBSession.activeSession.accessToken;
            appDelegate.facebook.expirationDate = FBSession.activeSession.expirationDate;
        } // if session open
        else 
        {
            appDelegate.facebook = nil;
        } // session not open
    } //end completionHandler
];
于 2012-11-09T18:10:32.590 回答