在iOS中使用Facebook SDK登录时无法获取用户的电子邮件ID

ext*_*ner 5 objective-c facebook-graph-api ios facebook-ios-sdk xcode6

当我使用下面的代码获取用户的email-id时,我得到[null]值.此外,我已经设置了访问这样的电子邮件的权限.

{
self.fbLoginButton.readPermissions = @[@"public_profile", @"email", @"user_friends"];
}
Run Code Online (Sandbox Code Playgroud)

同时在委托中获取电子邮件详细信息.

- (void)loginButton:(FBSDKLoginButton *)loginButton
didCompleteWithResult:  (FBSDKLoginManagerLoginResult *)result
error:  (NSError *)error
{
    if ([FBSDKAccessToken currentAccessToken])
    {
        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error) {
                 NSLog(@"fetched user:%@", result);
                 NSLog(@"fetched user:%@ and Email : %@", result,result[@"email"]);


             }
         }];
    }

}
Run Code Online (Sandbox Code Playgroud)

请提供任何解决方案.

另外,我将FacebookSDK集成文档用于实现链接:https://developers.facebook.com/docs/facebook-login/ios#login-button

Dee*_*san 14

您可以尝试此代码.基于Facebook SDK 4.0版.与旧版本相比,它在4.0中进行了修改.

App delegate.m

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation];
}
Run Code Online (Sandbox Code Playgroud)

viewController.m档案中

- (IBAction)btnFacebookPressed:(id)sender {
    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 ([result.grantedPermissions containsObject:@"email"])
             {
                 NSLog(@"result is:%@",result);
                 [self fetchUserInfo];
             }
         }
     }];
}

-(void)fetchUserInfo
{
    if ([FBSDKAccessToken currentAccessToken])
    {
        NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);

        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , friendlists"}]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error)
             {
                 NSLog(@"resultis:%@",result);
             }
             else
             {
                 NSLog(@"Error %@",error);
             }
         }];

    }

}
Run Code Online (Sandbox Code Playgroud)

在viewdidload方法中调用此函数fetchUserInfo

[self fetchUserInfo];
Run Code Online (Sandbox Code Playgroud)

通过调用此方法,您将在登录后获得访问令牌,并且您希望明确指定有关该电子邮件的权限.通过此方法,您可以获取用户的电子邮件.请享用