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文件中进行配置