我正在将我的应用升级到 Facebook-iOS-SDK-4.0 ,但似乎我无法从FBSDKProfile
收到用户电子邮件,因为它只提供用户名,用户ID等等。
答案 0 :(得分:128)
要获取电子邮件,您需要使用图形API,特别是提供填充了所需字段的参数字段。看看Facebook的Graph API探索工具,它可以帮助找出查询。 https://developers.facebook.com/tools/explorer
对我来说,提取电子邮件的代码如下,假设您已经登录:
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);
}];
答案 1 :(得分:28)
那是对的。电子邮件地址不存在于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);
}
}];
}
答案 2 :(得分:6)
代码更正:
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result);
}
}];
}
答案 3 :(得分:5)
试试这段代码:
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);
}
}];
}
}
}
}];
答案 4 :(得分:3)
这些参数提供了电子邮件
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开始,对/ me的GET请求应该包含一个 明确的"字段"参数
答案 5 :(得分:2)
来自facebook开发者网站 https://developers.facebook.com/docs/facebook-login/permissions/v2.2
请注意,即使您申请电子邮件权限,也不能保证 你会得到一个电子邮件地址。例如,如果有人注册了 Facebook上有电话号码而不是电子邮件地址,电子邮件 字段可能是空的。
希望它会帮助某人:)
答案 6 :(得分:1)
我想用我发现的东西加上这个。对于我的FBSDKGraphRequest
,我试图将登录时请求的权限作为字段传递给我。所以我将fields
设置为:
"email,user_location"
但是,权限和字段不同。作为参考,这些是字段:https://developers.facebook.com/docs/graph-api/reference/v2.4/user
因此,根据您要传递的链接:
"email,location"
希望能帮助别人!
答案 7 :(得分:0)
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
}
}];
}