ios - 没有使用 Facebook 4.4.0 SDK 获取电子邮件和公开个人资料

标签 ios facebook facebook-graph-api

我目前正在开发 Facebook SDK 4.4.0。在 4.4.0 版本之前,在 4.3.0 中我们收到邮件,public_profile 包含以下代码

NSArray *arrFBPermission = [[NSArray alloc]initWithObjects:@"email",@"public_profile", nil];
    [loginUsingFB logInWithReadPermissions:arrFBPermission handler:^(FBSDKLoginManagerLoginResult *result, NSError *error){ 
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error){
                      if (!error){
                          NSString *fnm = [result valueForKey:@"first_name"];
                          NSString *lnm = [result valueForKey:@"last_name"];
                      }
else{
     Nslog("%@", error localizedDescription);
}
                  }];
}

现在在新 SDK(即 4.4.0)中我没有得到这些值。为什么?我想要来自 Facebook 的电子邮件、名字、姓氏和 ID。

最佳答案

在 Facebook 4.4 SDK 中有一个细微的变化。 您必须从 Facebook 帐户使用您想要的 FBSDKGraphRequest 请求参数。

在您的代码中,参数中有 nil:

使用如下参数更新您的代码:

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location , friends ,hometown , friendlists"}]

如果您想使用自定义按钮登录 Facebook,那么您可以使用如下完整代码:

- (IBAction)btnFacebookPressed:(id)sender {
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    login.loginBehavior = FBSDKLoginBehaviorBrowser;
    [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];
                 [login logOut]; // Only If you don't want to save the session for current app
             }
         }
     }];
}
-(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"}]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error)
             {
                 NSLog(@"resultis:%@",result);

             }
             else
             {
                 NSLog(@"Error %@",error);
             }
         }];
    }
}

希望对你有用。

关于ios - 没有使用 Facebook 4.4.0 SDK 获取电子邮件和公开个人资料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31312744/

相关文章:

iPhone,如何在代码中将日期选择器的最小日期设置为今天?

iOS Facebook SDK 错误域com.facebook.sdk 代码2 和代码7

facebook - 从 Facebook 群组获取实时更新?

android - Facebook 图谱 API v 2.4

ios - Swift 中的套接字(不是 webSocket)

iphone - iOS 中的 vtable 错误

python - Facebook Messenger 与 Flask

php - 如何刷新服务器端的 facebook 访问 token (在 facebook-php SDK 中)?

ios - iOS:据我所知,GLKit矩阵乘法已中断

网站上的 Facebook "Like"和 "Share"按钮哪个更好?