Facebook 图形 API JSON 电子邮件

Posted

技术标签:

【中文标题】Facebook 图形 API JSON 电子邮件【英文标题】:Facebook Graph API JSON email 【发布时间】:2015-09-19 12:50:08 【问题描述】:

我正在使用 Web Graph API 从 facebook 获取数据。 我需要获取用户的电子邮件。

我有一个函数来获取和解析 JSON 数据。我将它与访问令牌一起使用来获得我想要的东西,但我只能获得名称和 ID。

这是我的 Facebook 权限

fbButton.readPermissions = ["public_profile", "email", "user_friends"]

但是,当我从 json 打印我的数组时,我只有


  "name" : "**********",
  "id" : "************"

如果我使用 Facebook Graph API Explorer 并创建一个 Token,我可以访问关于我的所有数据。但是当我在 swift 中创建我的令牌时是不可能的。

我还验证了我的 facebook 应用程序并激活了电子邮件数据。

有人有什么想法可以帮助我吗?

====

编辑 1

这就是我调用图形 API 的方式

// Facebook Delegate Methods
func loginButton(connection: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) 

    if (error != nil)
    
        println("Error")
    
    else 
        // If you ask for multiple permissions at once, you
        // should check if specific permissions missing
        if result.grantedPermissions.contains("email")
        
            // Do work
        
        println("User logged in")
        performSegueWithIdentifier("Login", sender: self)
    

当我实例化 fb 登录按钮时在这里

if (FBSDKAccessToken.currentAccessToken() == nil)
    
        // User is not already logged
        println("No Logged")
        loading.hidden = true
        fbButton.readPermissions = ["public_profile", "email", "user_friends"]
        fbButton.delegate = self
    
    else
    
        fbButton.hidden = true
        println("Already Logged")
        performSegueWithIdentifier("Login", sender: self)
        println(FBSDKAccessToken.currentAccessToken().permissions)
        parseJSON(getJSON("https://graph.facebook.com/me/?access_token=" + FBSDKAccessToken.currentAccessToken().tokenString))
    

【问题讨论】:

【参考方案1】:

您必须明确说明您希望从查询中获得哪些结果。在您的情况下,它应该类似于以下内容:

me?fields=id,name,email

===

EXTRA:我建议您使用 Facebook SDK 中的内置类 FBSDKGraphRequest。您可以执行以下操作:

if FBSDKAccessToken.currentAccessToken() != nil 
    FBSDKGraphRequest(graphpath: "me?fields=id,name,email,gender,first_name,last_name,middle_name,birthday", parameters: nil).startWithCompletionHandler( (connection, result, error) in

        // Something went wrong
        if (error != nil) 
            errorHandler()
            return
        

        // Parses the returned result
        if let userData = result as? NSDictionary 

            // Extracts the  data points
            let fbId = userData[FacebookGraphConstants.Id] as? String ?? ""
            let gender = userData[FacebookGraphConstants.Gender] as? String ?? ""
            let birthdayString = userData[FacebookGraphConstants.Birthday] as? String ?? ""
            let email = userData[FacebookGraphConstants.Email] as? String ?? ""
            let firstName = userData[FacebookGraphConstants.FirstName] as? String ?? ""
            let middleName = userData[FacebookGraphConstants.MiddleName] as? String ?? ""
            let lastName = userData[FacebookGraphConstants.LastName] as? String ?? ""
            let displayName = userData[FacebookGraphConstants.DisplayName] as? String ?? ""
        
    )

【讨论】:

谢谢,但您没有回答问题:S 我有一个这样的链接:graph.facebook.com/me?access_token=myToken 并且它与来自 Graph Explorer 的令牌配合得很好而且我使用了 FBSDKGraphRequest 但我有很多异步功能的问题.... 您能否提供更多关于您如何在应用程序中调用图形 API 的代码?【参考方案2】:

我只是通过在我的 URL 中添加这个来解决我的问题:

/me?fields=email&access_token=....

我把 Kumluzz 的答案有用了,谢谢 :)

【讨论】:

以上是关于Facebook 图形 API JSON 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Android SDK 图形 API 版本

Facebook Graph Request 正在返回名称但不是电子邮件

Facebook:用于订阅用户到 Facebook(webhook)以进行实时更改的图形 api 是啥

Facebook 图形 API 事件

使用图形 API 进行 Facebook 聊天

使用图形 api 集成 facebook 聊天