我目前正在为我的应用实施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"]
我在这里做错了什么?我如何获得用户所在的国家/地区?
非常感谢帮助!
答案 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 。
接下来,只需点击提交,即可使用以下获取参数。确保位置参数存在,您可以看到如下所示的JSON。
有一个位置字典名称包含您所在国家/地区和城市名称的密钥。
{
"id": "338058996547981",
"name": "Rajan Maheshwari",
"birthday": "04/29/1990",
"location": {
"id": "106517799384578",
"name": "New Delhi, India"
}
}
注意: - 您还必须确保在Facebook个人资料中输入了一个位置并将其公之于众。
当您使用权限运行应用程序时,您将获得一个带有警告屏幕的Facebook身份验证。
它会要求登录审核,因为这里需要查看一些权限。 Facebook免费提供的基本权限不需要任何审核: -
但出于测试目的,您可以在不进行任何审核的情况下获取该位置。但在您将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
}
})