Ios allowLoginUI为“时,openActiveSessionWithReadPermissions不会回调”;否";

Ios allowLoginUI为“时,openActiveSessionWithReadPermissions不会回调”;否";,ios,objective-c,xcode,facebook,facebook-ios-sdk,Ios,Objective C,Xcode,Facebook,Facebook Ios Sdk,我正在更新最新的facebook sdk(3.10),我在登录时遇到问题。 当我传递allowLoginUI=YES时,它会很好地登录并调用回调块。但是当我传递allowLoginUI=NO时,回调函数不会被调用。。。我不知道为什么。 当用户已经有会话时,我希望传递allowLoginUI=NO。 这是代码 - (void)openFBSession:(NSNumber*)active{ BOOL boolValue = [active boolValue]; NSArray *

我正在更新最新的facebook sdk(3.10),我在登录时遇到问题。 当我传递allowLoginUI=YES时,它会很好地登录并调用回调块。但是当我传递allowLoginUI=NO时,回调函数不会被调用。。。我不知道为什么。 当用户已经有会话时,我希望传递allowLoginUI=NO。 这是代码

- (void)openFBSession:(NSNumber*)active{
    BOOL boolValue = [active boolValue];
    NSArray *permissions = [[NSArray alloc] initWithObjects:@"basic_info, email", nil];
    [FBSession openActiveSessionWithReadPermissions:permissions
                                       allowLoginUI:boolValue
                                  completionHandler:
     ^(FBSession *session,
       FBSessionState state, NSError *error) {
         if (error) {
             // Handle errors
             [self handleAuthError:error];
         } else {
             // No error
             [self sessionStateChanged:session state:state error:error];
         }
     }];
}
这里是我调用函数的时候。(enableScreen是一个显示facebookLogin按钮的功能)


谢谢

您需要检查openActiveSessionWithReadPermissions方法的返回值。 如果会话是同步打开的,而没有向用户显示UI,则返回YES


传递allowLoginUI:NO时,不会调用回调,因为此方法是同步执行的

您需要检查openActiveSessionWithReadPermissions方法的返回值。 如果会话是同步打开的,而没有向用户显示UI,则返回YES


传递allowLoginUI:NO时,不会调用回调,因为此方法是同步执行的

搜索和挖掘后的真实情况是,如果您使用allowLoginUI=NO调用openActiveSessionWithReadPermissions,则只有在加载了令牌的情况下才会起作用。如果不是,则应使用allowLoginUI=YES调用,搜索并挖掘其内容后,真正的结果是,如果使用allowLoginUI=NO调用openActiveSessionWithReadPermissions,则仅当加载了令牌时才有效。如果不是,则应使用allowLoginUI=YES调用,尝试设置nil而不是权限数组。它适合我。

尝试设置nil而不是权限数组。它对我有用

if (FBSession.activeSession.state == FBSessionStateCreated) {
            // Yes, so just open the session (this won't display any UX).
            [self.window.rootViewController performSelector:@selector(enableScreen)];
        } else {
            if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded){
                [self openFBSession:[NSNumber numberWithBool:NO]];
            }else{
                [self.window.rootViewController performSelector:@selector(enableScreen)];
            }

        }