swift - IOS Facebook SDK : login doesn't return email despite permissions granted

标签 swift facebook-graph-api facebook-ios-sdk

我正在尝试通过 facebook sdk 获取信息,但到目前为止我只获得了用户的 ID 和名称,尽管我确定有可用的电子邮件,因为这是我的帐户。我一直在看这里的几个答案,但到目前为止都没有解决我的问题。 我做错了什么,为什么在我请求多个权限时它没有返回更多数据?

这是我的代码:

fbLoginManager.logInWithReadPermissions(["public_profile", "email", "user_friends", "user_about_me", "user_birthday"], handler: { (result, error) -> Void in
        if ((error) != nil)
        {
            // Process error
            println("There were an error: \(error)")
        }
        else if result.isCancelled {
            // Handle cancellations
            fbLoginManager.logOut()
        }
        else {
            var fbloginresult : FBSDKLoginManagerLoginResult = result
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                println(fbloginresult)
                self.returnUserData()
            }
        }
    })

获取用户数据的函数:

func returnUserData()
{
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            println("Error: \(error)")
        }
        else
        {
            println("fetched user: \(result)")

            if let userName : NSString = result.valueForKey("name") as? NSString {
                println("User Name is: \(userName)")
            }
            if let userEmail : NSString = result.valueForKey("email") as? NSString {
                println("User Email is: \(userEmail)")
            }
        }
    })
}

哪个返回:

fetched user: {
id = 55555555;
name = "Kali Aney";
}
User Name is: Kali Aney

最佳答案

Facebook Graph API 从 Graph-API 版本 2.4(Pod 版本 4.4.0)开始打破了它的向后兼容性(当以默认方式使用时)。

FB Graph-API 2.4 不会返回用户的所有默认字段

要解决此问题,您可以显式使用图形版本 2.3:

[[FBSDKGraphRequest alloc] initWithGraphPath:@"me"parameters:nil tokenString:[FBSDKAccessToken currentAccessToken].tokenString version:@"v2.3"HTTPMethod:nil]

在这种情况下,FB 保证 v2.3 至少在 2 年后可用。 https://developers.facebook.com/docs/graph-api/overview :

The Graph API has multiple versions available to access at any one time. Each version contains a set ofcore fields and edge operations. We make a guarantee that those core APIs will be available and un-modified in that version for at least 2 years from release. The platform changelog can tell you which versions are currently available.

您可以通过询问您感兴趣的特定字段来使用新的 Graph-API (v2.4):

[[FBSDKGraphRequest alloc] initWithGraphPath:@"me"parameters:@{@"fields": @"email,name"}]

关于swift - IOS Facebook SDK : login doesn't return email despite permissions granted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31410793/

相关文章:

python - 使用 python 请求模块的 Facebook 图形 GET 请求-证书验证失败

node.js - Node 模块 fbgraph : will this deal well with lots of users?

ios - 从 iPhone 应用程序在 Facebook 'feed' 上发布图片

ios - 冗余图像加载到 tableview 单元格 swift

ios - 从另一个类访问 IBOutlet

facebook - 使用 checkin 数据填充测试用户

ios - Facebook iOS SDK 3.2在没有FBWebDialogResult的情况下发布

iphone - iOS Facebook登录快速应用程序切换保持在Facebook App上

swift - 收到有关 API 'set value for key on a NSObject' 折旧的错误

unit-testing - 如何为 Swift 设置单元测试?