Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c [Facebook iOS SDK 4.0]如何从FBSDKProfile获取用户电子邮件地址_Objective C_Facebook Ios Sdk_Facebook Ios Sdk 4.0 - Fatal编程技术网

Objective c [Facebook iOS SDK 4.0]如何从FBSDKProfile获取用户电子邮件地址

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

我正在将我的应用程序升级到Facebook-iOS-SDK-4.0,但似乎我无法从FBSDKProfile获取用户电子邮件,因为它只提供用户名、用户名等。

这是正确的。FBSDKProfile对象中不存在该电子邮件地址。 您应该改用FB的Graph API。在FB开发者网站上有大量的信息和代码示例

要回答您的问题,请尝试以下内容

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) {
                    }
  }];
}