如何从 iOS 上的 Facebook SDK 获取用户数据

Posted

技术标签:

【中文标题】如何从 iOS 上的 Facebook SDK 获取用户数据【英文标题】:how to get user data from Facebook SDK on iOS 【发布时间】:2016-06-02 10:41:26 【问题描述】:

下午好!我需要从 Facebook 获取用户数据。我成功获取了用户名、id、照片等数据。但是当您尝试查询婚姻状况等时,我会得到一个空字典的响应。我试图提出不同的要求,但总是得到这样的结果。我还阅读了这些主题official Facebook site、this、this,比如我该如何解决这个问题?

我的示例代码

   static func getUserRelationship() 
    if (FBSDKAccessToken.currentAccessToken() != nil) 
        guard let currentUser = getCurrentFacebookUser() else  return 
        FBSDKGraphRequest(graphpath: "/\(currentUser.id)/family", parameters: nil, HTTPMethod: "GET").startWithCompletionHandler( (requestConnection, result, error) in
            if error == nil 
                let dictionary = result as! [String : AnyObject]
                let array = dictionary["data"]
                print("facebook", result, dictionary, array?.count)
             else 
                print(error.localizedDescription)
            
        )
     else 
        getDataLogin(
            getUserBirthday()
            , fails:  (error) in

        )
    

我在控制台中看到了结果

    facebook 
    data =     (
    );

【问题讨论】:

您是否请求了适当的权限?用户关系developers.facebook.com/docs/facebook-login/… 【参考方案1】:

您的 GraphRequest 不正确。如果要获取用户数据,graphPathe 应该是“我”,并且您应该请求参数以获取关系状态和其他信息。而且您还需要在 LogInWithReadPermissons 中请求公开个人资料,所以在阅读许可中:-

    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
    fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web
    fbLoginManager.logInWithReadPermissions(["public_profile","email"], fromViewController: self)  (result, error) -> Void in
        if error != nil 
            print(error.localizedDescription)
            self.dismissViewControllerAnimated(true, completion: nil)
         else if result.isCancelled 
            print("Cancelled")
            self.dismissViewControllerAnimated(true, completion: nil)
         else 

        
    

当检索信息时:-

   FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, relationship_status"]).startWithCompletionHandler( (connection, result, error) -> Void in
            if (error == nil)
                let fbDetails = result as! NSDictionary
                print(fbDetails)
            
        )

顺便说一句,如果你想要婚姻状况,你应该使用 graphPath 作为“我”而不是“/user-id/family”。您可以使用它来获取此人的家庭关系。

【讨论】:

非常感谢。你帮了我!【参考方案2】:

使用 swift 3 获取 facebook 用户信息更新

  FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"]).start(completionHandler:  (connection, result, error) -> Void in
        if (error == nil)
            let fbDetails = result as! NSDictionary
            print(fbDetails)
        else
            print(error?.localizedDescription ?? "Not found")
        
    )

【讨论】:

以上是关于如何从 iOS 上的 Facebook SDK 获取用户数据的主要内容,如果未能解决你的问题,请参考以下文章

我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别

如何从 Facebook iOS sdk 获取好友列表

如何从 iOS 中的 Facebook SDK 获取用户信息?

如何在 ios 的新 facebook sdk 中实现深度链接?

使用 Facebook SDK Login (iOs/Android) 登录 Facebook @ Web?

IOS 应用程序上的 Facebook SDK 错误