我正在尝试通过facebook sdk获取信息,但到目前为止,我只获得用户的ID和名称,尽管我确定有可用的电子邮件,因为这是我的帐户。我一直在这里看几个答案,但到目前为止,没有一个解决我的问题。我在做什么错,为什么在我请求多个权限时它不返回更多数据?
这是我的代码:
fbLoginManager.logInWithReadPermissions(["public_profile", "email", "user_friends", "user_about_me", "user_birthday"], handler: { (result, error) -> Void in if ((error) != nil) { // Process error println("There were an error: \(error)") } else if result.isCancelled { // Handle cancellations fbLoginManager.logOut() } else { var fbloginresult : FBSDKLoginManagerLoginResult = result if(fbloginresult.grantedPermissions.contains("email")) { println(fbloginresult) self.returnUserData() } } })
以及获取用户数据的功能:
func returnUserData() { let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil) graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in if ((error) != nil) { // Process error println("Error: \(error)") } else { println("fetched user: \(result)") if let userName : NSString = result.valueForKey("name") as? NSString { println("User Name is: \(userName)") } if let userEmail : NSString = result.valueForKey("email") as? NSString { println("User Email is: \(userEmail)") } } }) }
哪个返回:
fetched user: { id = 55555555; name = "Kali Aney"; } User Name is: Kali Aney
自Graph-API版本2.4(Pod版本4.4.0)以来,Facebook Graph API打破了其向后兼容性(以默认方式使用时)。
FB Graph-API 2.4不会为用户返回所有默认字段
若要解决此问题,您可以使用显式图形版本2.3:
[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil tokenString:[FBSDKAccessToken currentAccessToken].tokenString version:@"v2.3" HTTPMethod:nil]
在这种情况下,FB确保v2.3至少在两年后可用。 https://developers.facebook.com/docs/graph- api/overview:
Graph API有多个版本可随时访问。每个版本包含一组核心字段和边缘操作。我们保证从发布之日起至少2年内,这些核心API将在该版本中可用且未经修改。平台变更日志可以告诉您当前可用的版本。
要么
您可以通过询问您感兴趣的特定字段来使用新的Graph-API(v2.4):
[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields" : @"email,name"}]