Ios Facebook SDK:不正确的登录行为。“在会话状态下推送safari登录窗口”;开放式;

Ios Facebook SDK:不正确的登录行为。“在会话状态下推送safari登录窗口”;开放式;,ios,facebook,facebook-graph-api,facebook-ios-sdk,Ios,Facebook,Facebook Graph Api,Facebook Ios Sdk,情境: 个人登录FBApp,但未登录系统FB帐户 我所做的: 我询问readPermissions和publishPermissions。之后,我发送个人身份(id、姓名、用户名、个人资料、图片和url)请求 行为: 一切正常,facebook ios sdk进入fb应用程序两次(每次请求-读取和发布),然后奇迹出现。 我请求提供个人身份,并查看facebook窗口,建议下载iPhone的fb应用程序(fb应用程序已经在上面了!),然后让我登录网站。我认为这是一个safari登录出现 代码: /

情境:
个人登录FBApp,但未登录系统FB帐户

我所做的:
我询问
readPermissions
publishPermissions
。之后,我发送个人身份(id、姓名、用户名、个人资料、图片和url)请求

行为:
一切正常,facebook ios sdk进入fb应用程序两次(每次请求-读取和发布),然后奇迹出现。 我请求提供个人身份,并查看facebook窗口,建议下载iPhone的fb应用程序(fb应用程序已经在上面了!),然后让我登录网站。我认为这是一个safari登录出现

代码:

/*login here*/
            if([_facebookSession state] == FBSessionStateCreated){
                [FBSession openActiveSessionWithReadPermissions:readPermissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                    if (error || status == FBSessionStateClosedLoginFailed){
                        [_facebookSession openWithBehavior:FBSessionLoginBehaviorWithNoFallbackToWebView completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                            if (error || status == FBSessionStateClosedLoginFailed){
                                LoginFailedBlock(YES);
                            }
                            else
                            if (error == nil && status == FBSessionStateOpen){
                                _facebookSession = session;
                                LoginSucessBlock(YES);
                            }
                        }];
                    }else{
                        dispatch_async(dispatch_get_current_queue(), ^{
                            [FBSession openActiveSessionWithPublishPermissions:publishPermissions defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                if (error == nil && status == FBSessionStateOpen){
                                    _facebookSession = session;
                                    LoginSucessBlock(YES);
                                }
                            }];
                        });
                    }
                }];



/*request for person identity*/
/*SOMEWHERE HERE A SAFARI LOGIN WINDOW APPEARS*/
     [FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id<FBGraphUser> result, NSError *error) {
            if (error){
                ErrorBlock(error);
            }
            else{
                if ([result id] && [result name]){
                    NSDictionary* resultDictionary = @{@"id":result.id,
                                                       @"name":result.name,
                                                       @"username":result.username,
                                                       @"picture":result.link,
                                                       };
                    AfterLoadUserInfoBlock(YES,resultDictionary);
                }
                else{
                    AfterLoadUserInfoBlock(NO,nil);
                }
            }
        }];
/*在此处登录*/
如果([\u facebookSession state]==FBSessionStateCreated){
[FBSession openActiveSessionWithReadPermissions:readPermissions allowLoginUI:YES completionHandler:^(FBSession*会话,FBSessionState状态,NSError*错误){
如果(错误| |状态==FBSessionStateClosedLoginFailed){
[\u facebookSession openWithBehavior:FBSessionLoginBehavior WithNoFallbackTowView completionHandler:^(FBSession*会话,FBSessionState状态,N错误*错误){
如果(错误| |状态==FBSessionStateClosedLoginFailed){
LoginFailedBlock(是);
}
其他的
如果(错误==nil&&status==FBSessionStateOpen){
_facebookSession=会话;
登录访问块(是);
}
}];
}否则{
dispatch\u async(dispatch\u get\u current\u queue()^{
[FBSession openActiveSessionWithPublishPermissions:publishPermissions默认受众:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:^(FBSession*会话,FBSessionState状态,N错误*错误){
如果(错误==nil&&status==FBSessionStateOpen){
_facebookSession=会话;
登录访问块(是);
}
}];
});
}
}];
/*申请个人身份*/
/*这里的某个地方会出现一个SAFARI登录窗口*/
[FBRequestConnection StartFormwithCompletionHandler:^(FBRequestConnection*连接,id结果,NSError*错误){
如果(错误){
错误块(error);
}
否则{
如果([结果id]&&[结果名称]){
NSDictionary*resultDictionary=@{@“id”:result.id,
@“name”:result.name,
@“用户名”:result.username,
@“图片”:result.link,
};
AfterLoadUserInfoBlock(是,resultDictionary);
}
否则{
AfterLoadUserInfoBlock(否,无);
}
}
}];
视图控制器:

self.loginview = [[FBLoginView alloc] init];
self.loginview.frame = CGRectMake(-500, -500, 0, 0);
[self.view addSubview:self.loginview];
self.loginview.delegate = self;
[loginview setReadPermissions:@[@"basic_info",@"email"]];
[loginview setDelegate:self];

 -(IBAction)loginWithFB:(id)sender{
    for(id object in self.loginview.subviews){
        if([[object class] isSubclassOfClass:[UIButton class]]){
            UIButton* button = (UIButton*)object;
            [button sendActionsForControlEvents:UIControlEventTouchUpInside];
        }
    }
}
在appdelegate中:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    // Call FBAppCall's handleOpenURL:sourceApplication to handle Facebook app responses
    BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];

    // You can add your app-specific url handling code here if needed

    return wasHandled;
}
然后,请在developer.facebook.com中注册您的应用程序,并使用您的bundle id。最后,您将获得一个id,并在plist文件中进行配置