Ios 查看和使用Facebook登录用户数据

Ios 查看和使用Facebook登录用户数据,ios,facebook,facebook-graph-api,facebook-login,Ios,Facebook,Facebook Graph Api,Facebook Login,我按照Facebook提供的方法在我的应用程序中添加了一个“使用Facebook登录”按钮。为了填充其他视图控制器,我需要从登录的用户中提取数据,如姓名和电子邮件。然而,似乎没有办法访问这些数据 以下代码是直接从Facebook说明粘贴而成的,仅供参考 FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; loginButton.center = self.view.center; loginButton.readPer

我按照Facebook提供的方法在我的应用程序中添加了一个“使用Facebook登录”按钮。为了填充其他视图控制器,我需要从登录的用户中提取数据,如姓名和电子邮件。然而,似乎没有办法访问这些数据

以下代码是直接从Facebook说明粘贴而成的,仅供参考

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
loginButton.center = self.view.center;
loginButton.readPermissions =  @[@"public_profile", @"email", @"user_friends"];
[self.view addSubview:loginButton];

非常感谢您的帮助。谢谢

如果您有自定义Facebook按钮,则只需调用以下按钮操作代码即可:

我已经检查过了,对我来说很好。 见参考资料:

-(void)FBLogin{
NSMutableDictionary *fbResultData;
fbResultData =[[NSMutableDictionary alloc]init];
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
     if (error) {
         NSLog(@"Process error");
     } else if (result.isCancelled) {
         NSLog(@"Cancelled");
     } else {
         NSLog(@"Logged in");
         if ([FBSDKAccessToken currentAccessToken])
         {
             [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,age_range,birthday,devices,email,gender,last_name,family,friends,location,picture" parameters:nil]
              startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                  if (!error) {
                      NSString * accessToken = [[FBSDKAccessToken currentAccessToken] tokenString];
                      NSLog(@"fetched user:%@ ,%@", result,accessToken);
                      if ([result objectForKey:@"email"]) {
                          [fbResultData setObject:[result objectForKey:@"email"] forKey:@"email"];
                      }
                      if ([result objectForKey:@"gender"]) {
                          [fbResultData setObject:[result objectForKey:@"gender"] forKey:@"gender"];
                      }
                      if ([result objectForKey:@"name"]) {
                          NSArray *arrName;
                          arrName=[[result objectForKey:@"name"] componentsSeparatedByString:@" "];

                          [fbResultData setObject:[arrName objectAtIndex:0] forKey:@"name"];
                      }
                      if ([result objectForKey:@"last_name"]) {
                          [fbResultData setObject:[result objectForKey:@"last_name"] forKey:@"last_name"];
                      }
                      if ([result objectForKey:@"id"]) {
                          [fbResultData setObject:[result objectForKey:@"id"] forKey:@"id"];
                      }
                      [fbResultData setObject:accessToken forKey:@"Access Token"]; //m
                      FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                                    initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"]
                                                    parameters:nil
                                                    HTTPMethod:@"GET"];
                      [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                                            id result,
                                                            NSError *error) {
                          if (!error){
                              if ([[result objectForKey:@"data"] objectForKey:@"url"]) {
                                  [fbResultData setObject:[[result objectForKey:@"data"] objectForKey:@"url"] forKey:@"picture"];
                              }
                              NSLog(@"Final data of FB login********%@",fbResultData);
                          } }];
                  }
                  else {
                      NSLog(@"result: %@",[error description]);
                      UIAlertController *alert=[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", nil) message:[error description] preferredStyle:UIAlertControllerStyleAlert];
                      UIAlertAction *alertBtnOk=[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
                                                 {
                                                     [alert dismissViewControllerAnimated:YES completion:nil];
                                                 }];
                      [alert addAction:alertBtnOk];
                      [self presentViewController:alert animated:YES completion:nil];
                  }
              }];
         }
         else{
             [[FBSDKLoginManager new] logOut];
         }
     }
 }];}
在fbResultData中,您将获得所有用户数据,但不要忘记导入以下文件:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#导入
#进口

如果您有自定义的Facebook按钮,只需调用下面的按钮操作代码即可:

我已经检查过了,对我来说很好。 见参考资料:

-(void)FBLogin{
NSMutableDictionary *fbResultData;
fbResultData =[[NSMutableDictionary alloc]init];
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
     if (error) {
         NSLog(@"Process error");
     } else if (result.isCancelled) {
         NSLog(@"Cancelled");
     } else {
         NSLog(@"Logged in");
         if ([FBSDKAccessToken currentAccessToken])
         {
             [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,age_range,birthday,devices,email,gender,last_name,family,friends,location,picture" parameters:nil]
              startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                  if (!error) {
                      NSString * accessToken = [[FBSDKAccessToken currentAccessToken] tokenString];
                      NSLog(@"fetched user:%@ ,%@", result,accessToken);
                      if ([result objectForKey:@"email"]) {
                          [fbResultData setObject:[result objectForKey:@"email"] forKey:@"email"];
                      }
                      if ([result objectForKey:@"gender"]) {
                          [fbResultData setObject:[result objectForKey:@"gender"] forKey:@"gender"];
                      }
                      if ([result objectForKey:@"name"]) {
                          NSArray *arrName;
                          arrName=[[result objectForKey:@"name"] componentsSeparatedByString:@" "];

                          [fbResultData setObject:[arrName objectAtIndex:0] forKey:@"name"];
                      }
                      if ([result objectForKey:@"last_name"]) {
                          [fbResultData setObject:[result objectForKey:@"last_name"] forKey:@"last_name"];
                      }
                      if ([result objectForKey:@"id"]) {
                          [fbResultData setObject:[result objectForKey:@"id"] forKey:@"id"];
                      }
                      [fbResultData setObject:accessToken forKey:@"Access Token"]; //m
                      FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                                    initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"]
                                                    parameters:nil
                                                    HTTPMethod:@"GET"];
                      [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                                            id result,
                                                            NSError *error) {
                          if (!error){
                              if ([[result objectForKey:@"data"] objectForKey:@"url"]) {
                                  [fbResultData setObject:[[result objectForKey:@"data"] objectForKey:@"url"] forKey:@"picture"];
                              }
                              NSLog(@"Final data of FB login********%@",fbResultData);
                          } }];
                  }
                  else {
                      NSLog(@"result: %@",[error description]);
                      UIAlertController *alert=[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", nil) message:[error description] preferredStyle:UIAlertControllerStyleAlert];
                      UIAlertAction *alertBtnOk=[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
                                                 {
                                                     [alert dismissViewControllerAnimated:YES completion:nil];
                                                 }];
                      [alert addAction:alertBtnOk];
                      [self presentViewController:alert animated:YES completion:nil];
                  }
              }];
         }
         else{
             [[FBSDKLoginManager new] logOut];
         }
     }
 }];}
在fbResultData中,您将获得所有用户数据,但不要忘记导入以下文件:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#导入
#进口

此代码对于获取Facebook登录用户数据和未使用您的应用程序的好友列表非常有用:

-(void)FBLogin{
NSMutableDictionary *fbResultData;
fbResultData =[[NSMutableDictionary alloc]init];
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    if (error) {
        NSLog(@"Process error");
    } else if (result.isCancelled) {
        NSLog(@"Cancelled");
    } else {
        NSLog(@"Logged in");
        if ([FBSDKAccessToken currentAccessToken])
        {
            [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,age_range,birthday,devices,email,gender,last_name,family,invitable_friends,location,picture" parameters:nil]
             startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                 if (!error) {
                     NSString * accessToken = [[FBSDKAccessToken currentAccessToken] tokenString];
                     NSLog(@"fetched user:%@ ,%@", result,accessToken);
                     if ([result objectForKey:@"email"]) {
                         [fbResultData setObject:[result objectForKey:@"email"] forKey:@"email"];
                     }
                     if ([result objectForKey:@"gender"]) {
                         [fbResultData setObject:[result objectForKey:@"gender"] forKey:@"gender"];
                     }
                     if ([result objectForKey:@"name"]) {
                         NSArray *arrName;
                         arrName=[[result objectForKey:@"name"] componentsSeparatedByString:@" "];

                         [fbResultData setObject:[arrName objectAtIndex:0] forKey:@"name"];
                     }
                     if ([result objectForKey:@"last_name"]) {
                         [fbResultData setObject:[result objectForKey:@"last_name"] forKey:@"last_name"];
                     }
                     if ([result objectForKey:@"id"]) {
                         [fbResultData setObject:[result objectForKey:@"id"] forKey:@"id"];
                     }
                     [fbResultData setObject:accessToken forKey:@"Access Token"]; //m
                     FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                                   initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"]
                                                   parameters:nil
                                                   HTTPMethod:@"GET"];
                     [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                                           id result,
                                                           NSError *error) {
                         if (!error){
                             if ([[result objectForKey:@"data"] objectForKey:@"url"]) {
                                 [fbResultData setObject:[[result objectForKey:@"data"] objectForKey:@"url"] forKey:@"picture"];
                             }
                             NSLog(@"Final data of FB login********%@",fbResultData);
                         } }];
                 }
                 else {
                     NSLog(@"result: %@",[error description]);
                     UIAlertController *alert=[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", nil) message:[error description] preferredStyle:UIAlertControllerStyleAlert];
                     UIAlertAction *alertBtnOk=[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
                                                {
                                                    [alert dismissViewControllerAnimated:YES completion:nil];
                                                }];
                     [alert addAction:alertBtnOk];
                     [self presentViewController:alert animated:YES completion:nil];
                 }
             }];
        }
        else{
            [[FBSDKLoginManager new] logOut];
        }
    }
}];}

此代码对于获取Facebook登录用户数据和未使用您的应用程序的好友列表非常有用:

-(void)FBLogin{
NSMutableDictionary *fbResultData;
fbResultData =[[NSMutableDictionary alloc]init];
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions: @[@"public_profile", @"email", @"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    if (error) {
        NSLog(@"Process error");
    } else if (result.isCancelled) {
        NSLog(@"Cancelled");
    } else {
        NSLog(@"Logged in");
        if ([FBSDKAccessToken currentAccessToken])
        {
            [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,age_range,birthday,devices,email,gender,last_name,family,invitable_friends,location,picture" parameters:nil]
             startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                 if (!error) {
                     NSString * accessToken = [[FBSDKAccessToken currentAccessToken] tokenString];
                     NSLog(@"fetched user:%@ ,%@", result,accessToken);
                     if ([result objectForKey:@"email"]) {
                         [fbResultData setObject:[result objectForKey:@"email"] forKey:@"email"];
                     }
                     if ([result objectForKey:@"gender"]) {
                         [fbResultData setObject:[result objectForKey:@"gender"] forKey:@"gender"];
                     }
                     if ([result objectForKey:@"name"]) {
                         NSArray *arrName;
                         arrName=[[result objectForKey:@"name"] componentsSeparatedByString:@" "];

                         [fbResultData setObject:[arrName objectAtIndex:0] forKey:@"name"];
                     }
                     if ([result objectForKey:@"last_name"]) {
                         [fbResultData setObject:[result objectForKey:@"last_name"] forKey:@"last_name"];
                     }
                     if ([result objectForKey:@"id"]) {
                         [fbResultData setObject:[result objectForKey:@"id"] forKey:@"id"];
                     }
                     [fbResultData setObject:accessToken forKey:@"Access Token"]; //m
                     FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                                   initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"]
                                                   parameters:nil
                                                   HTTPMethod:@"GET"];
                     [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                                           id result,
                                                           NSError *error) {
                         if (!error){
                             if ([[result objectForKey:@"data"] objectForKey:@"url"]) {
                                 [fbResultData setObject:[[result objectForKey:@"data"] objectForKey:@"url"] forKey:@"picture"];
                             }
                             NSLog(@"Final data of FB login********%@",fbResultData);
                         } }];
                 }
                 else {
                     NSLog(@"result: %@",[error description]);
                     UIAlertController *alert=[UIAlertController alertControllerWithTitle:NSLocalizedString(@"Error", nil) message:[error description] preferredStyle:UIAlertControllerStyleAlert];
                     UIAlertAction *alertBtnOk=[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
                                                {
                                                    [alert dismissViewControllerAnimated:YES completion:nil];
                                                }];
                     [alert addAction:alertBtnOk];
                     [self presentViewController:alert animated:YES completion:nil];
                 }
             }];
        }
        else{
            [[FBSDKLoginManager new] logOut];
        }
    }
}];}

访问数据的代码在哪里?你查过文档和api参考了吗?这有一个示例代码。另外,请阅读changelog中的“声明性字段”。是的-访问数据的代码正是我要问的。我在这里找到了“声明性字段”,但它似乎并不完全相关:在官方文档中,每个api端点都有示例代码,请查看api引用。声明性字段肯定是相关的,您将只获取id和名称,而不获取声明性字段。访问数据的代码在哪里?你查过文档和api参考了吗?这有一个示例代码。另外,请阅读changelog中的“声明性字段”。是的-访问数据的代码正是我要问的。我在这里找到了“声明性字段”,但它似乎并不完全相关:在官方文档中,每个api端点都有示例代码,请查看api引用。声明性字段肯定是相关的,你只会得到id和名称,而没有声明性字段。太棒了,所以定制按钮是最好的选择。将很快报告结果。好的,等待您的回答。快速跟进问题-当我检查“friends”字段时,
数据
键返回空白。这就是我看到的:
friends={data=();summary={“total_count”=640;};}
我想知道,如果“数据”具有用户\朋友权限,是否需要其他权限您可以访问也使用您的应用程序的朋友列表,因此,如果您的任何朋友未使用您的应用程序,则列表将为空。请参阅用户朋友权限参考:代码中有细微的更改,将FBSDKGraphRequest中的“朋友”替换为“不可邀请的朋友”。太棒了-因此自定义按钮是一个不错的选择。将很快报告结果。好的,等待您的回答。快速跟进问题-当我检查“friends”字段时,
数据
键返回空白。这就是我看到的:
friends={data=();summary={“total_count”=640;};}
我想知道,如果“数据”具有用户\朋友权限,是否需要其他权限您可以访问也使用您的应用程序的朋友列表,因此,如果您的任何朋友未使用您的应用程序,则列表将为空。请参阅用户朋友权限参考:代码中有细微更改,将FBSDKGraphRequest中的“朋友”替换为“不可邀请的朋友”。