在我的应用程序中,我通过FacebookSDK.framework
登录facebook- (IBAction)facebookLoginBtn1:(id)sender {
[FBSession openActiveSessionWithReadPermissions:@[@"email"] allowLoginUI:YES completionHandler:
^(FBSession *session, FBSessionState state, NSError *error) {
AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate sessionStateChanged:session state:state error:error];
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) {
if (!error) {
NSString *firstName = user.first_name;
NSString *lastName = user.last_name;
NSString *facebookId = user.id;
NSString *email = [user objectForKey:@"email"];
NSString *imageUrl = [[NSString alloc] initWithFormat: @"http://graph.facebook.com/%@/picture?type=large", facebookId];
NSLog(@"%@",email);
NSLog(@"%@",user.id);
NSLog(@"%@",imageUrl);
}
else
{
}
}];
}];
}
和代码在我的旧应用程序中工作,但我在这里只获得FB ID和用户名。 我尝试过不同类型的权限和facebook id,但无法找出问题所在。
我在info plist和facebook开发者portle中做了完整的设置。 我只得到FBGraphUser对象的响应
{
id = FB id;
name = “user name here“;}
作为回应。 这里没有我收到的电子邮件ID。 有人可以帮我从这里出去吗。 它应该是我想念的小事。
答案 0 :(得分:2)
尝试此代码。基于Facebook SDK 4.0版
<强> ViewController.m 强>
- (IBAction)btnFacebookPressed:(id)sender {
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[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];
}
}
}];
}
-(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, birthday, bio ,location ,friends ,hometown , friendlists"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error)
{
NSLog(@"resultis:%@",result);
}
else
{
NSLog(@"Error %@",error);
}
}];
}
}
ViewDidLoad
调用此方法,您在登录后获得访问令牌
[self fetchUserInfo];
以这种方式传递参数以获取电子邮件,姓名等。
@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , friendlists"}
答案 1 :(得分:1)
您必须指定要立即获取的字段,即使用户授权该权限,以下API调用也不会返回该电子邮件:
/me
这是您再次访问该电子邮件的方式:
/me?fields=id,email