我正在关注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申请对话框:
 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也处于 Activity 状态,但是当我调用apprequest对话框时,它要求登录。

appDelegate.facebook = [[Facebook alloc]有问题吗,或者我的 session 已过期?

有什么建议吗?

最佳答案

尝试将您的Facebook对象 session 设置代码放入完成处理程序中。每当 session 更改时,都应调用完成处理程序,例如,稍后在扩展 token 时,应再次调用它。这样,您可以保持Facebook对象 session 的刷新。您不必自己扩展访问 token ,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
];

10-08 03:10