我正在我的应用程序中实现Facebook登录。
除了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或Done按钮,在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情况下总是下降。
发布于 2017-10-16 09:38:46
我已经解决了错误,删除了FBLoginButton并将其替换为一个与调用FBLoginManager函数的IBAction相关联的UIButton。
答案是基于这个问题Facebook login page showing blank page in IOS 9和它的答案由@MuraliMohan
https://stackoverflow.com/questions/46686973
复制相似问题