我尝试使用iOS Facebook SDK第4版。
我完成了登录而没有任何问题,但无法使用图形API获取用户电子邮件地址。如果某人有解决方案可能会非常酷。
这里是我的代码,在视图中加载了:
_FBButton = [[FBSDKLoginButton alloc] init];
_FBButton.readPermissions = @[@"public_profile", @"email"];
_FBButton.delegate = self;
此处登录成功时的方法:
- (void)loginButton:(FBSDKLoginButton *)loginButton didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result error: (NSError *)error{
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result2, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result2);
}
}];
}
}
这里的结果是:
"first_name" = Jack;
gender = male;
id = 1381385368853232;
"last_name" = Ammer;
link = "https://www.facebook.com/app_scoped_user_id/1381385368853232/";
locale = "fr_FR";
name = "Jack Ammer";
timezone = 2;
"updated_time" = "2015-04-02T07:26:35+0000";
verified = 1;
为什么我可以收到电子邮件地址?
提前感谢。
修改
也许问题是由于facebook要求用户仅提供公开资料,请查看图片:为什么readpermissions不起作用?
答案 0 :(得分:1)
我找到了解决方案,我真的不知道为什么会这样,但它确实有效! 这很简单,你不应该在故事板上添加Facebook按钮时初始化它。为了解决我的问题,我只是评论我初始化按钮的行。
//facebook
// _FBButton = [[FBLoginView alloc] initWithReadPermissions:@[@"email"]];
_FBButton.readPermissions = @[@"email"];
_FBButton.delegate = self;
现在一切正常;)
答案 1 :(得分:0)
正确检查您必须将用户电子邮件地址输入控制台。
尝试使用FBSDKGraphRequest获取您的代码并获取电子邮件地址。
答案 2 :(得分:0)
我的问题是我的Facebook帐户没有经过验证的电子邮件地址(是的,这可能会发生!)。请检查您的个人资料设置页面。
答案 3 :(得分:0)
对于sdk 4x,您可以使用此
当你开始询问权限时这样做:(因为截至目前,图表api已经升级到2.5,其中电子邮件尚未被默认许可)
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions: @[@"public_profile", @"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
}];
然后在里面,继续像
if ([FBSDKAccessToken currentAccessToken])
{
NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
[parameters setValue:@"id, name, email, gender" forKey:@"fields"];
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
// fetch all your datas
}];