Facebook Graph Request 正在返回名称但不是电子邮件
Posted
技术标签:
【中文标题】Facebook Graph Request 正在返回名称但不是电子邮件【英文标题】:Facebook Graph Request is returning name but not email 【发布时间】:2017-03-04 02:31:03 【问题描述】:我正在使用图形 API 从 Facebook 登录返回我的姓名和电子邮件。这是我使用的代码 - 名称恢复正常,但电子邮件为零:
func getUserInfo()
let params = ["fields" : "email, name"]
let graphRequest = GraphRequest(graphpath: "me", parameters: params)
graphRequest.start
(urlResponse, requestResult) in
switch requestResult
case .failed(let error):
print("error in graph request:", error)
break
case .success(let graphResponse):
if let responseDictionary = graphResponse.dictionaryValue
print(responseDictionary)
if let name = responseDictionary["name"]
self.nameLabel.text = "Logged in as: \n\(name)"
if let email = responseDictionary["email"]
self.emailLabel.text = "Your email is: \n\(email)"
else
self.emailLabel.text = "Your email is: "
print(responseDictionary["name"])
print(responseDictionary["email"])
这是打印到我的控制台的内容:
["id": 1653899307960705, "name": *my name removed for privacy*]
Optional(*my name removed for privacy*)
nil
我不确定我的代码是错误的还是只是一个错误 - 我将电子邮件和姓名都指定为我的参数,但您可以看到只有姓名返回。有人知道为什么会这样吗?
【问题讨论】:
您是否向用户请求了电子邮件权限? 【参考方案1】:您的代码绝对正确,facebook graph API 不提供电子邮件的可能性很小:
-
注册用户已提交其电子邮件但未通过验证
用户已将电子邮件(可见性)设置为私人/仅限朋友访问(不公开)
检查一个/您的帐户的帐户设置(电子邮件有效且经过验证并且是公开的)
【讨论】:
你知道,这两个实际上都是真的.. 有问题的用户是我,我很确定我的电子邮件只是朋友而不是公开的(有人的吗?)。并且不记得任何时候验证我的电子邮件也是最近的过去。如果是这样,很高兴知道这不是我的代码,因为这让我发疯了。【参考方案2】:我知道你忘记获取电子邮件许可了,所以我在这里分享你获取许可的代码。
func fbLoginInitiate()
let loginManager = FBSDKLoginManager()
loginManager.logInWithReadPermissions(["public_profile", "email","user_friends"], handler: (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
if (error != nil)
// Process error
self.removeFbData()
else if result.isCancelled
// User Cancellation
self.removeFbData()
else
//Success
if result.grantedPermissions.contains("email") && result.grantedPermissions.contains("public_profile") && result.grantedPermissions.contains("user_friends")
//Here you need to call your function for graphRequest
self.getUserInfo()
else
//Handle error
)
func removeFbData()
//Remove FB Data
let fbManager = FBSDKLoginManager()
fbManager.logOut()
FBSDKAccessToken.setCurrentAccessToken(nil)
【讨论】:
以上是关于Facebook Graph Request 正在返回名称但不是电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
我需要为 Facebook Graph API 提交 App Review 吗?
PHP中的Facebook Graph API出现不一致的错误 - 无法连接到graph.facebook.com端口443:连接超时
向 Facebook 查询正在使用/可以使用的 Graph API 版本