openSessionWithAllowLoginUI几乎总是返回NO

我最近完成了将最新的FB iOS SDK(3.0)集成到我的应用程序(iOS 5)中。 我已经浏览了教程,根据FB提供的文档,所有内容似乎都已经到位。 我遇到的问题是,每当我检查是否需要通过身份validation:

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

…经常(并且在[FBSession.activeSessionclosures]之后几乎总是)openSessionWithAllowLoginUI返回NO,我必须转换到身份validation对话框才能获得有效的会话。 根据我的理解,[FBSession.activeSessionclosures]不应该破坏SDK重新使用旧标记的能力,并且允许我重新创build一个会话而不必显示login对话框。

请注意,在我的应用程序中,我不需要在应用程序生命周期的Facebook身份validation。 因此,我倾向于根据需要build立会话,并在完成时将[FBSession.activeSession close]closures,而不是在applicationWillTerminate中仅closures[FBSession.activeSession]。

有没有人有什么build议我可能做错了什么或尝试?

谢谢。

我有同样的问题,我无法弄清楚…select器openSessionWithAllowLoginUI:无法检索用户保存的会话,总是我必须显示login用户界面。

我希望尽快解决!

更新————-

我理解的一点是:当用户loginFacebook时,FB SDK会对sessionStateChanged进行2次调用:

第一个是FBSessionStateOpen,第二个是FBSessionStateClosed。 所以,如果你检查你的AppDelegate.m文件,你会发现这样的代码:

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

调用closeAndClearTokenInformation:清除所有的令牌信息,所以每次运行App时,都会向用户请求loginUI。

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

我永远不能让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]方法并修改权限数组以适合您的需要。 这一贯工作。