获得权限后 Facebook 登录让 Safari 空白页面打开而不是重定向到 iOS 10 和 iOS 11 中的我的应用程序

Facebook login after get permissions let Safari blank page open instead of redirect to my app in iOS 10 and iOS 11

我正在我的应用程序中实施 Facebook 登录。

除 Facebook 获得权限后重定向到我的应用程序外,一切正常属性。

处理打开 Safari 空白页面而不是重定向到我的应用程序。我在许多论坛和其他 Stack Overflow 问题中阅读了关于 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 空白页面,我唯一的选择是按 OKDone 按钮在 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 并将其替换为与调用 FBLoginManager 函数的 IBAction 关联的 UIButton 的错误。

答案是基于这个问题 以及 @MuraliMohan

的回答