我正在尝试在按下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"]);
}
}];
答案 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组成