2

我最近完成了将最新的 FB iOS SDK (3.0) 集成到我的应用程序 (iOS 5) 中。我已经逐步完成了教程,根据 FB 提供的文档,一切似乎都已到位。我遇到的问题是,每当我检查是否需要通过以下方式进行身份验证时:

if(![self openSessionWithAllowLoginUI:NO]) { [self openSessionWithAllowLoginUI:YES]; }

...经常(并且几乎总是在 [FBSession.activeSession close] 之​​后)openSessionWithAllowLoginUI 返回 NO,我必须转换到身份验证对话框才能获得有效的会话。据我了解,[FBSession.activeSession close] 不应破坏 SDK 重用旧令牌的能力,并允许我重新创建会话而无需显示登录对话框。

请注意,在我的应用程序中,我不需要在应用程序生命周期内进行 Facebook 身份验证。因此,我倾向于按需建立会话,并在我完成时使用 [FBSession.activeSession close] 将它们关闭,而不是在 applicationWillTerminate 中仅使用 [FBSession.activeSession close]。

有人对我可能做错的事情或尝试的事情有任何建议吗?

谢谢。

4

2 回答 2

1

我有同样的问题,我不知道......选择器 openSessionWithAllowLoginUI: 无法为用户检索保存的会话,我总是必须向用户显示登录 UI。

希望尽快解决!

更新 - - - - - - -

我理解的事情:当用户登录 Facebook 时,FB SDK 对 sessionStateChanged 进行了 2 次调用:

第一个用于 FBSessionStateOpen,第二个用于 FBSessionStateClosed。因此,如果您检查 AppDelegate.m 文件,您会发现如下代码:

case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
     [FBSession.activeSession closeAndClearTokenInformation];
     break;

调用 closeAndClearTokenInformation: 清除所有令牌信息,因此每次运行应用程序时,都会向用户询问登录 UI。

现在的问题是:为什么 Facebook 首先发送 FBSessionStateOpen 并立即发送 FBSessionStateClosed ?

于 2012-09-03T19:32:33.963 回答
1

我永远无法让 openSessionWithAllowLoginUI 正常工作。相反,使用这个:

[FBSession openActiveSessionWithPermissions:[NSArray arrayWithObject:@"user_relationships"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
    switch (status) {
        case FBSessionStateOpen:
            [self start];
            break;
        case FBSessionStateClosed:
            break;
        case FBSessionStateCreated:
            break;
        case FBSessionStateCreatedOpening:
            break;
        case FBSessionStateClosedLoginFailed:
            break;
        case FBSessionStateOpenTokenExtended:
            break;
        case FBSessionStateCreatedTokenLoaded:
            break;
    }

}];

添加一个 [self start] 方法并修改权限数组以满足您的需要。这始终有效。

于 2012-09-03T20:00:17.580 回答