Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios openSessionWithAllowLoginUI几乎总是返回NO_Ios_Facebook - Fatal编程技术网

Ios openSessionWithAllowLoginUI几乎总是返回NO

Ios openSessionWithAllowLoginUI几乎总是返回NO,ios,facebook,Ios,Facebook,我最近完成了将最新的FB iOS SDK(3.0)集成到我的应用程序(iOS 5)中的工作。我已经完成了教程,根据FB提供的文档,一切似乎都准备就绪。我遇到的问题是,每当我检查是否需要通过以下方式进行身份验证时: 如果(![self-openSessionWithAllowLoginUI:NO]) { [self-openSessionWithAllowLoginUI:是]; } 。。。openSessionWithAllowLoginUI通常(并且几乎总是在[FBSession.activeS

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

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

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

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

有没有人对我可能做错什么或尝试什么有什么建议


谢谢

我也有同样的问题,我想不出。。。 选择器openSessionWithAllowLoginUI:无法为用户检索保存的会话,并且我必须始终向用户显示登录UI

我希望尽快解决它

更新-------------

我理解:当用户登录Facebook时,FB SDK会对sessionStateChanged进行两次调用:

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

case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
     [FBSession.activeSession closeAndClearTokenInformation];
     break;
调用closeAndClearTokenInformation:清除所有令牌信息,这样每次运行应用程序时,它都会向用户询问登录UI


现在的问题是:为什么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]方法并修改权限数组以满足您的需要。这是一致的。

我在3.1.1中也看到了这种行为-我删除了:[FBSession.activeSession closeAndClearTokenInformation];从案例FBSessionStateClosed:因为这将始终使我的令牌无效-(void)start做什么?