FBSDKGraphRequest无效(iOS)

时间:2015-10-09 16:17:26

标签: ios objective-c xcode facebook facebook-graph-api

我正在尝试在按下Facebook登录按钮时执行的代码块中使用FBSDKGraphRequest。但是,出于某种原因,这段代码永远不会执行。可能是什么原因。我使用的按钮是FBSDKLoginButton,它工作得很好。我只想在登录后检索用户信息,如姓名和电子邮件。

[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email,name"}]
                  startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                      NSLog(@"test");
                      if (!error) {
                          NSLog(@"fetched user:%@  and Email : %@", result,result[@"email"]);
                      }
                  }];

2 个答案:

答案 0 :(得分:3)

我使用自定义Facebook登录,而不是官方Facebook FBSDKLoginButton。请尝试以下代码。今天我整合了我的应用程序的Facebook登录,并遇到了你的问题。

- (IBAction)FacebookLogin:(id)sender {
    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");

             [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"email,name"}]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error) {
                 NSLog(@"fetched user:%@  and Email : %@", result,result[@"email"]);
             }
         }];
         }
     }];
}

答案 1 :(得分:1)

默认参数是id和name,如果用户将其设置为公共信息,则查找电子邮件。在url字段中附加电子邮件,还可以附加所需的权限,例如生日等。

if ([FBSDKAccessToken currentAccessToken]) {
        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me?fields=id,name,email" parameters:nil]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error) {
                 NSLog(@"fetched user:%@", result);
             }
         }];
    }

结果由用户名,邮件和ID组成。

然后使用以下代码分析配置文件信息

[FBSDKProfile loadCurrentProfileWithCompletion:
     ^(FBSDKProfile *profile, NSError *error) {
         if (profile) {
             NSLog(@"Hello, %@!", profile);
         }
     }];

配置文件由用户ID,名字,中间名,姓氏,名称,linkURL,refreshDate组成