Swift FBSDK获取用户国家

时间:2016-10-10 22:32:33

标签: swift facebook-graph-api swift3 fbsdk fbsdkloginkit

我目前正在为我的应用实施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"]

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

非常感谢帮助!

2 个答案:

答案 0 :(得分:3)

您的readPermissions user_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帐户。

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

  

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

您可以转到Graph API Explorer并尝试使用您的应用。点击获取令牌获取用户访问令牌生成令牌。单击它将打开权限复选框。保持 user_location

Graph Api Explorer Page

enter image description here

接下来,只需点击提交,即可使用以下获取参数。确保位置参数存在,您可以看到如下所示的JSON。
有一个位置字典名称包含您所在国家/地区和城市名称的密钥。

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

答案 1 :(得分:0)

如果您需要单独使用国家/地区,则可以始终使用位置{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
        }
    })