Ios 查看和使用Facebook登录用户数据
我按照Facebook提供的方法在我的应用程序中添加了一个“使用Facebook登录”按钮。为了填充其他视图控制器,我需要从登录的用户中提取数据,如姓名和电子邮件。然而,似乎没有办法访问这些数据 以下代码是直接从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
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中的“朋友”替换为“不可邀请的朋友”。