2

我目前正在为我的应用程序实现 Facebook 登录,并且我正在尝试从个人资料中获取以下信息:

名字、姓氏、性别和国家。

但是,我似乎只能获取除用户国家以外的所有内容。我试图将我的参数设置为我的 FBSDKGraphRequest,如下所示:

let parameters = ["fields": "email, gender, user_location, id, first_name, last_name,  picture.type(large)"]

以及我的 readPermissions 到:

loginButton.readPermissions = ["public_profile", "email", "user_location", "user_friends", "user_education_history", "user_birthday"]

我在这里做错了什么?如何获取用户所在的国家/地区?

非常感谢您的帮助!

4

2 回答 2

3

您的 readPermissionsuser_location是正确的,但 country/location 的参数名称不是user_location
它是location

let parameters = ["fields": "id,location,name,first_name,last_name,picture.type(large),email,birthday,gender,bio,relationship_status"]

确保您已在您的 Facebook 帐户中添加了一个位置并公开了您登录的位置,这样您就完成了。尝试使用您创建 facebook 应用程序的同一 facebook 帐户。

出于测试目的,您可以通过警告消息(如下面的屏幕截图所示)获取您的位置。但在将您的应用程序提交到应用商店之前,您需要通过 facebook 的登录审核,因为user_location这不是预先批准的权限。

有关更多详细信息,请转到 Graph API Explorer

您可以转到Graph API Explorer并尝试使用您的应用程序。通过单击Get TokenGet User Access Token生成一个令牌。单击它将打开权限复选框。保持user_location检查。

图形 API 浏览器页面

在此处输入图像描述

接下来只需单击带有以下获取参数的提交。确保位置参数在那里,您可以看到如下所示的 JSON。
有一个带有名称键的位置字典,其中包含您的国家和城市名称。

{
  "id": "338058996547981",
  "name": "Rajan Maheshwari",
  "birthday": "04/29/1990",
  "location": {
    "id": "106517799384578",
    "name": "New Delhi, India"
  }
}

在此处输入图像描述

注意: - 您还必须确保您在 Facebook 个人资料中输入了一个位置并将其公开。

在此处输入图像描述

当您使用权限运行应用程序时,您将获得 Facebook 身份验证,并显示类似这样的警告屏幕。

在此处输入图像描述

它将要求登录审核,因为此处需要审核某些权限。facebook免费提供的不需要任何审查的基本权限是:-

在此处输入图像描述

但出于测试目的,您无需任何审查即可获得该位置。但在您将 iOS 应用程序提交到应用商店之前,您需要通过 Facebook 的登录审核以避免该警告消息并获取用户的位置。

于 2016-10-11T15:05:44.253 回答
0

如果您需要单独的国家/地区,您可以随时使用 location{location}

    FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "location{location}"]).start(completionHandler: { (connection, result, error) -> Void in
        if let error = error {
            self.alertTheUser(title: "Error", message: error.localizedDescription)
            print(error)
        }else{
            let fbDetails = result as! NSDictionary
            let location : NSDictionary! = fbDetails.value(forKey: "location") as! NSDictionary
            let locationContents : NSDictionary! = location.value(forKey: "location") as! NSDictionary
            self.registerCityField.text = locationContents.value(forKey: "city") as? String
            self.registerStateField.text = locationContents.value(forKey: "state") as? String
            self.registerCountryField.text = locationContents.value(forKey: "country") as? String
        }
    })
于 2017-05-27T15:13:36.393 回答