首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问权限后的Facebook登录允许Safari打开空白页面,而不是重定向到iOS 10和iOS 11中的应用程序

访问权限后的Facebook登录允许Safari打开空白页面,而不是重定向到iOS 10和iOS 11中的应用程序
EN

Stack Overflow用户
提问于 2017-10-11 11:21:54
回答 1查看 291关注 0票数 0

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

除了Facebook获得许可后重定向到我的应用程序外,所有这些都是工作属性。

打开一个Safari空白页面,而不是重定向到我的应用程序。我在大豆论坛和其他堆栈溢出问题中看到了关于iOS 9中一个类似问题的文章,这个问题是用AppDelegate中的代码修复的:

代码语言:javascript
运行
复制
- (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代码

代码语言:javascript
运行
复制
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情况下总是下降。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 09:38:46

我已经解决了错误,删除了FBLoginButton并将其替换为一个与调用FBLoginManager函数的IBAction相关联的UIButton。

答案是基于这个问题Facebook login page showing blank page in IOS 9和它的答案由@MuraliMohan

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46686973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档