我正在我的應用程序中實施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
情況下
其答案canyou打印錯誤'的NSLog(@「Facebook登錄錯誤%@」,錯誤);' –
在這種情況下切勿掉落,只能重定向到Safari瀏覽器頁面,然後我唯一的選擇是按OK按鈕即取消結果。 @ Anbu.Karthik – origds
查看此代碼https://drive.google.com/file/d/0B7lSqbQq9-WuYU9qNlhOdWczU2M/view?usp=sharing與您的代碼相同。 –