无法从 Swift 中的 Facebook iOS SDK 捕获城市和国家/地区值
Posted
技术标签:
【中文标题】无法从 Swift 中的 Facebook iOS SDK 捕获城市和国家/地区值【英文标题】:Unable to capture city, and country values from Facebook iOS SDK in Swift 【发布时间】:2017-07-09 01:13:04 【问题描述】:我目前正在使用 Facebook ios SDK 在我的应用程序中成功捕获电子邮件、名字和姓氏。但是,由于某种原因,我很难为用户捕获位置信息,例如城市和国家。
这是我的相关代码:
override func viewDidLoad()
super.viewDidLoad()
fbLoginButton.delegate = self
fbLoginButton.readPermissions = ["email", "public_profile", "user_location"]
extension RegisterViewController: FBSDKLoginButtonDelegate
func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!)
print("Did log out of facebook")
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!)
if error != nil
print(error)
return
print("Successfully logged in with facebook...")
FBSDKGraphRequest(graphpath: "/me", parameters: ["fields": "id, name, first_name, last_name, email, locationlocation"]).start (connection, result, err) in
if err != nil
print("Failed to start graph request:", err)
return
print(result)
let fbDetails = result as! NSDictionary
let location : NSDictionary! = fbDetails.value(forKey: "location") as! NSDictionary //code crashes here
let locationContents : NSDictionary! = location.value(forKey: "location") as! NSDictionary
let city: String! = locationContents.value(forKey: "city") as? String
let state: String! = locationContents.value(forKey: "state") as? String
let country: String! = locationContents.value(forKey: "country") as? String
print(fbDetails)
print("city:", city)
print("state:", state)
print("country:", country)
当我在控制台中运行代码时,我看到了 email、first_name、last_name、id、name 的输出,但没有看到 location 的输出,并且我的应用程序崩溃了:
fatal error: unexpectedly found nil while unwrapping an Optional value
当它到达线路时:
let location : NSDictionary! = fbDetails.value(forKey: "location") as! NSDictionary
谁能看出我做错了什么?
【问题讨论】:
直接导致崩溃的是你强制解包一个可选值。至于为什么你不能得到这些值;隐私权限? 我应该如何解开可选值,如何检查我的隐私权限是否设置正确? 你应该说类似if let city = locationContents.value(forKey: "city") as? String //Do something with city
。有关权限,请参阅下面的答案
【参考方案1】:
您需要将“user_location”添加到您的 read_permission。
fbLoginButton.readPermissions = ["email", "public_profile", "user_location"]
记得在你的 fb 应用程序中验证此权限。(user_location 不是默认允许的权限)
【讨论】:
非常感谢您的回答,对于延迟回复您,我深表歉意。我已经对我的代码进行了适当的更改,不幸的是,我仍然没有在响应中获得位置详细信息。每次我对代码进行更改以重新完成“握手”过程时,我都尝试从我的 Facebook 个人资料中删除该应用程序,但不幸的是,我仍然没有收到这些值。我想知道是否需要在我的个人 fb 页面中更改我的隐私设置,但不确定我需要做什么。 “位置”数据来自您的 fb 个人资料“关于”->“您住过的地方”->“当前城市”。确保您的个人资料包含此信息。我测试更改此信息并再次登录,然后我得到了不同的位置数据。确保您的“位置”权限已通过验证,或者您使用 Facebook 应用程序的管理员帐户登录。 要获得 user_location 的权限,请在您的 fb 应用程序中开始提交“user_location”。 'developers.facebook.com'->'App Review'->'提交项目以供批准'以上是关于无法从 Swift 中的 Facebook iOS SDK 捕获城市和国家/地区值的主要内容,如果未能解决你的问题,请参考以下文章
iOS 8 中的 Facebook SDK 与 Swift/Xcode beta 5 返回 accessToken 但更新后没有用户 ID
无法使用 Facebook SDK IOS Swift 登录 [重复]
我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别