Objective c [Facebook iOS SDK 4.0]如何从FBSDKProfile获取用户电子邮件地址
我正在将我的应用程序升级到Facebook-iOS-SDK-4.0,但似乎我无法从FBSDKProfile获取用户电子邮件,因为它只提供用户名、用户名等。这是正确的。FBSDKProfile对象中不存在该电子邮件地址。 您应该改用FB的Graph API。在FB开发者网站上有大量的信息和代码示例 要回答您的问题,请尝试以下内容Objective c [Facebook iOS SDK 4.0]如何从FBSDKProfile获取用户电子邮件地址,objective-c,facebook-ios-sdk,facebook-ios-sdk-4.0,Objective C,Facebook Ios Sdk,Facebook Ios Sdk 4.0,我正在将我的应用程序升级到Facebook-iOS-SDK-4.0,但似乎我无法从FBSDKProfile获取用户电子邮件,因为它只提供用户名、用户名等。这是正确的。FBSDKProfile对象中不存在该电子邮件地址。 您应该改用FB的Graph API。在FB开发者网站上有大量的信息和代码示例 要回答您的问题,请尝试以下内容 if ([FBSDKAccessToken currentAccessToken]) { [[[FBSDKGraphRequest alloc] initWithG
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);
}
}];
}
}
}
}];
要获取电子邮件,您需要利用graph API,特别是提供用所需字段填充的参数字段。看看Facebook的Graph API explore工具,它可以帮助您了解查询 我获取电子邮件的代码如下,假设您已登录:
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);
}];
我想用我的发现来补充这一点。对于我的
FBSDKGraphRequest
,我试图将登录时请求的权限作为字段传递。因此,我将字段设置为:
“电子邮件,用户位置”
但是,权限和字段是不同的。以下字段仅供参考:
因此,基于您要传递的链接:
“电子邮件,地址”
希望这对别人有帮助 来自facebook开发者网站
注意,即使您请求电子邮件许可,也不能保证
你会得到一个电子邮件地址。例如,如果有人注册了
用电话号码代替电子邮件地址的Facebook
字段可能为空
希望它能帮助某人:)这些参数提供了电子邮件
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开始,GET/me请求应该包含
显式“字段”参数
这就是我现在正在做的,但这是浪费资源。此请求的结果中没有电子邮件。我尝试按以下方式登录:fbLoginManager.logInWithReadPermissions([“电子邮件”,“公共_配置文件”]…并且电子邮件仍然没有在结果对象中发送。有人知道如何发送吗?如果参数为零,则对于电子邮件id send[“字段”:“email”]在参数中问题在重复帖子中解决:我尝试了相同的代码,但是我没有获得电子邮件id,尽管我有“电子邮件”权限。我在结果参数中只获得用户id和用户名。请确保通过单击facebook发送的链接验证了您的电子邮件,这也可能导致问题。我尝试了相同的代码,但是我没有虽然我有“电子邮件”权限,但无法获取电子邮件id。我在结果参数中仅获取用户id和用户名。很抱歉,延迟回复,请确保已验证您的facebook帐户的电子邮件地址,否则,您可能需要从您的facebook帐户重新发送各种电子邮件,并单击电子邮件验证链接。事实上,我已找到解决方案n、 对于最新的Graph api版本,我们需要在graphpath ie中传递参数@“me/emailId?位置”明确地说。他们的文档中没有提到。我尝试了与您接受的答案相同的代码,但是我没有获得电子邮件id,尽管我有“电子邮件”权限。我在结果参数中只获得用户id和用户名。问题在重复的帖子中得到了解决:我还没有尝试过,但似乎是合法的。谢谢@HeTziDeserves获得更多投票比接受的答案…回答电子邮件要求..+1!!!如果您只想获得用户电子邮件,是否必须登录facebook?请询问结果中的所有字段是什么?
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
}
}];
}