获取权限后的Facebook登录让Safari空白页打开,而不是重定向到我的应用程序在iOS 10和iOS 11
问题描述:
我正在我的应用程序中实施Facebook登录。获取权限后的Facebook登录让Safari空白页打开,而不是重定向到我的应用程序在iOS 10和iOS 11
所有的工作属性,除了Facebook获取权限后重定向到我的应用程序。
Safari空白页是打开的句柄,而不是重定向到我的应用程序。我在酱油许多论坛和了解iOS 9类似问题的其他堆栈溢出问题阅读,使用此代码在AppDelegate的固定:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id>
*)options {
return [[FBSDKApplicationDelegate sharedInstance]
application:application
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
return YES;
}
我已经检查的时候,我给Facebook的权限,此代码工作正常,但仍然不重定向到我的应用程序,只重定向到一个新的Safari浏览器的空白页面,在这里,我唯一的选择是按OK或完成按钮送我的loginManager方法将用户取消的请求情况下
还有就是我FBLoginManger代码
self.manager =[[FBSDKLoginManager alloc] init];
NSArray *facebookPermissions = @[@"email", @"public_profile", @"user_friends"];
if ([FBSDKAccessToken currentAccessToken] != nil) {
[self.manager logOut];
//return
}
[self.manager logInWithReadPermissions: facebookPermissions fromViewController: self handler: ^(FBSDKLoginManagerLoginResult* result, NSError* error) {
if (error != nil) {
//According to Facebook:
//Errors will rarely occur in the typical login flow because the login dialog
//presented by Facebook via single sign on will guide the users to resolve any errors.
NSLog(@"FACEBOOK LOGIN ERROR %@", error);
// Process error
[self.manager logOut];
} else if (result.isCancelled) {
// Handle cancellations
[self.manager logOut];
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
BOOL allPermsGranted = true;
NSArray *grantedPermissions = [[result grantedPermissions] allObjects];
NSString *lastObject = [grantedPermissions lastObject];
for (NSString *permission in facebookPermissions) {
for (NSString* grantedPerm in grantedPermissions) {
NSRange range = [permission rangeOfString:grantedPerm];
if ((range.length == 0) && (grantedPerm == lastObject)) {
allPermsGranted = false;
} else {
break;
}
}
}
if (allPermsGranted) {
// Do work
//NSString * fbToken = [[result token] tokenString];
NSString * fbUserID = [[result token] userID];
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"/me"
parameters:@{@"fields": @"id,name,email"}
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (error == nil) {
NSDictionary *dict = @{
@"email" : [result objectForKey:@"email"] ,
@"providerID" : fbUserID,
@"username" : [result objectForKey:@"name"],
@"provider" : @"facebook"
};
NSLog(@"DICT %@", dict);
[self.delegate loginWithCredentials:dict];
[self logUserLoggedInWithFacebookEvent];
} else {
NSLog(@"ERROR FACEBOOK %@", error);
}
}];
} else {
//The user did not grant all permissions requested
//Discover which permissions are granted
//and if you can live without the declined ones
NSLog(@"FACEBOOK LOGIN ERROR");
[self.manager logOut];
}
}
}];
的方法调用,但总是在result.isCancelled
情况下
答
我已经解决了错误删除FBLoginButton和一个UIButton替换它丢弃哪些与我的调用FBLoginManager函数的IBAction相关联。
答案是基于对这个问题Facebook login page showing blank page in IOS 9 和@MuraliMohan
其答案canyou打印错误'的NSLog(@“Facebook登录错误%@”,错误);' –
在这种情况下切勿掉落,只能重定向到Safari浏览器页面,然后我唯一的选择是按OK按钮即取消结果。 @ Anbu.Karthik – origds
查看此代码https://drive.google.com/file/d/0B7lSqbQq9-WuYU9qNlhOdWczU2M/view?usp=sharing与您的代码相同。 –