【问题标题】:Facebook iOS SDK list of permissions returning nilFacebook iOS SDK 权限列表返回 nil
【发布时间】:2015-03-25 05:30:27
【问题描述】:

我的登录控制器中有代码,用于检查用户是否已授予某些权限。该代码在几周内运行良好,但直到最近它才停止工作,因为 FBSession.activeSession().permissions 返回 nil 而不是权限列表

其他人有类似的问题或知道可能是什么原因吗? 我正在使用 Parse + Facebook 这是我的代码(在 Swift 中)

if FBSession.activeSession().state != FBSessionState.Open {

    PFFacebookUtils.logInWithPermissions(permissions, block: { (user: PFUser?, error: NSError?) -> Void in
        if user == nil {
            if error != nil {
                println("User cancelled fb login")
            } else {
                println("Error with login: \(error)")
            }
        } else {
            if user!.isNew {
                println("Brand new user signed up!")
            } else {
                println("Returning user logged in!")
            }
            self.voiceMeAPI.requestDataForUserMe { (finished) -> () in

                //This is printing nil
                println(FBSession.activeSession().permissions)

                if contains(FBSession.activeSession().permissions as [String], "user_friends") {
                    self.updateFriendsThenPushToHomeViewController(isNewUser: user!.isNew)
                } else {
                    dispatchOnMainQueueAfterDelay(0, { () -> () in
                        self.presentViewController(self.noFriendsListAlertController, animated: true, completion: nil)
                    })
                }
            }

        }
    })

【问题讨论】:

  • 运气好吗?我有同样的问题
  • Nothing :/ 无法获得权限列表

标签: ios xcode swift parse-platform facebook-ios-sdk


【解决方案1】:

Facebook SDK 页面中的一些docs 可能有你想要的。特别是标题为“使用自定义登录 UI”的部分。

这是来自 Facebook SDK 文档的 Obj-C:

    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
    }
  }
}];

它在 Swift 中(未经测试!):

var login: FBSDKLoginManager = FBSDKLoginManager()
login.logInWithReadPermissions(["email"], handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
    if (error != nil){
        //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.contains("email"){
            //Do work
        }
    }
    })

【讨论】:

  • 如果 result.grantedPermissions.contains("email"){ //Do work } 收不到邮件怎么办
【解决方案2】:

确保将您的权限设置为您希望的权限。 在您的班级下方添加:

let permissions = ["public_profile", "email", "user_friends"]

【讨论】:

  • 是的,但用户在通过 FB OAuth 时仍然可以编辑其中一些权限。因此我需要检查是否授予了正确的权限
猜你喜欢
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多