如何从FBSDKProfile获取用户的电子邮件地址
我正在升级我的应用程序到Facebook-iOS-SDK-4.0 ,但似乎我不能从FBSDKProfile
获取用户电子邮件,因为它只提供,用户名,用户ID等。
要获取电子邮件,您需要使用graphicsAPI,特别是提供填充所需字段的参数字段。 看看Facebook的Graph API探索工具,这可以帮助找出查询。 https://developers.facebook.com/tools/explorer
为我提取电子邮件的代码如下,假设您已经login:
NSMutableDictionary* parameters = [NSMutableDictionary dictionary]; [parameters setValue:@"id,name,email" forKey:@"fields"]; [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { aHandler(result, error); }];
这是正确的。 电子邮件地址不在FBSDKProfile对象中。 您应该使用FB的Graph API。 在FB Developer站点https://developers.facebook.com/docs/ios/graph上有大量的信息和代码示例;
要回答你的问题,请尝试这样的事情。
if ([FBSDKAccessToken currentAccessToken]) { [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email"}] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"user:%@", result); } }]; }
代码修正:
if ([FBSDKAccessToken currentAccessToken]) { [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"fetched user:%@", result); } }]; }
试试这个代码:
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error) { // Process error } else if (result.isCancelled) { // Handle cancellations } else { // If you ask for multiple permissions at once, you // should check if specific permissions missing if ([result.grantedPermissions containsObject:@"email"]) { if ([FBSDKAccessToken currentAccessToken]) { [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"fetched user:%@", result); } }]; } } } }];
这个参数给了电子邮件
NSDictionary *parameters = @{@"fields":@"email"}; [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { NSLog(@"fetched user:%@", result); }];
从Graph API v2.4开始,/ us的GET请求应该包含显式的“fields”参数
我想用我发现的东西来补充这一点。 对于我的FBSDKGraphRequest
我试图通过login时要求的权限作为字段。 所以我把fields
设置为:
"email,user_location"
但是,权限和字段是不同的。 作为参考,这些是字段: https : //developers.facebook.com/docs/graph-api/reference/v2.4/user
所以根据你想传递的链接:
"email,location"
希望帮助别人!
从Facebook开发者网站https://developers.facebook.com/docs/facebook-login/permissions/v2.2
请注意,即使您要求电子邮件许可,也不保证您将收到电子邮件地址。 例如,如果有人使用电话号码而不是电子邮件地址注册Facebook,则电子邮件字段可能为空。
希望它会帮助别人:)