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
}
})
我目前正在为我的应用程序实现 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
}
})