Using Facebook-iOS-SDK (4.0.1) result.isCancelled 设置为使用浏览器时

Using Facebook-iOS-SDK (4.0.1) result.isCancelled is set when using a browser

我正在使用 Facebook-iOS-SDK (4.0.1) 通过自定义按钮登录。我正在执行以下代码

- (IBAction)fbButtonClicked:(UIButton *)sender {
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    if (error) {
        // Process error
    } else if (result.isCancelled) {
        // Handle cancellations
    } else {
        // If you ask for multiple permissions at once, you
        // should check if specific permissions missing
        if ([result.grantedPermissions containsObject:@"email"]) {
            // Do work
            if ([FBSDKAccessToken currentAccessToken]) {


                [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/friends" parameters:nil]
                 startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result2, NSError *error) {

                     if (!error) {
                         NSLog(@"fetched user:%@", result2);
                     }
                 }];
            }
        }
    }
}];

}

如果我在设备上安装了 Facebook 应用程序,那么代码可以正常工作。当我没有安装 facebook 应用程序时,将在浏览器中打开 facebook。在这里,'result.isCancelled' 设置为 'YES',我没有得到所需的结果。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
  return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                        openURL:url
                                              sourceApplication:sourceApplication
                                                     annotation:annotation];
}
在 appDelegate.m

中需要

对我来说原因不同

以下行导致 result.isCancelled 始终为真...我知道为什么

[login logInWithReadPermissions:@[@"public_profile", @"email", @"gender"] 

改成这个之后……成功了

[login logInWithReadPermissions:@[@"public_profile"] 

⚫ SceneDelegate.swift

需要这个函数
 func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let url = URLContexts.first?.url else {
            return
        }
        let _ = ApplicationDelegate.shared.application(
            UIApplication.shared,
            open: url,
            sourceApplication: nil,
            annotation: [UIApplication.OpenURLOptionsKey.annotation])
    }