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

imc*_*mcc 45 objective-c facebook-ios-sdk facebook-ios-sdk-4.0

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

小智 129

要获取电子邮件,您需要使用图形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);
     }];
Run Code Online (Sandbox Code Playgroud)

  • 你救了我的命! (5认同)

小智 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);       
      }
  }];
}
Run Code Online (Sandbox Code Playgroud)

  • 使用nil参数,您将只获得userId和name,对于email-id,在参数中发送["fields":"email"] (14认同)
  • 此请求在结果中没有电子邮件. (12认同)
  • 这就是我现在正在做的事情,但这是浪费资源. (4认同)
  • 我尝试像这样登录:fbLoginManager.logInWithReadPermissions(["email","public_profile"] ...并且电子邮件仍未在结果对象中发送.有人知道怎么做吗? (4认同)
  • **问题一式两份解决:**http://stackoverflow.com/a/31503463/3382676 (2认同)

Aqi*_*taz 6

代码更正:

  if ([FBSDKAccessToken currentAccessToken]) {
    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
        startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                     id result, NSError *error) {
          if (!error) {
            NSLog(@"fetched user:%@", result);
          }
        }];
  }
Run Code Online (Sandbox Code Playgroud)


Dha*_*ena 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);
                     }
                 }];
            }
        }
    }
}];
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过相同的代码,但是尽管我具有“电子邮件”权限,但没有收到电子邮件ID。我在结果参数中仅获得用户ID和用户名。 (5认同)