Swift FBSDK获取用户国家

Swift FBSDK Get user country

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

名字, 姓, 性别, 和国家。

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

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

以及我的阅读权限:

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

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

非常感谢帮助!

您的 readPermissions user_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 帐户中添加了一个 place 并使您正在登录的 public你会完成的。尝试使用您创建 Facebook 应用程序时使用的同一 Facebook 帐户。

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

For More Details go to Graph API Explorer

您可以前往 Graph API Explorer 并试用您的应用程序。单击 获取令牌获取用户访问令牌 生成令牌。单击它将打开权限复选框。选中 user_location

接下来只需单击提交,并提供以下 Get 参数。确保 location 参数在那里,你可以看到如图所示的 JSON。
有一个 location 带有 name 关键字的字典,其中包含您的国家和城市名称。

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

注意:- 此外,您还必须确保在您的 Facebook 个人资料中输入了一个位置,并将其设置为 public。

当您 运行 具有权限的应用程序时,您将获得带有警告屏幕的 Facebook 身份验证。

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

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

如果您需要单独的国家/地区,您可以随时使用 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
        }
    })