Facebook请求不会返回电子邮件

时间:2013-02-20 22:57:26

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

Facebook请求不会输出任何电子邮件。我怎么得到这个?我需要它来登录/注册过程

- (void)request:(FBRequest *)request didLoad:(id)result{

    NSLog(@"FACEBOOK RESULT %@ ", result);

}

这是最初的要求:

[facebook requestWithGraphPath:@"me" andDelegate:self];

2 个答案:

答案 0 :(得分:2)

如果没有请求获取其他权限,则无法获取email属性,请参阅https://developers.facebook.com/docs/reference/login/email-permissions/

我的应用程序使用以下代码首先检查Facebook会话是否有效(self.facebook是使用Facebook初始化的initWithAppId对象):

  if (![self.facebook isSessionValid]) { 

    NSArray* permissions =  [NSArray arrayWithObjects: @"email", nil];

    [self.facebook authorize:permissions];

  } else { 
    // Since we have a valid session we can get the userinfo
    [self getFacebookUserInfo];
  }

您的应用程序提示将指示“使用此应用程序需要:*您的基本信息*您的电子邮件地址”如果用户授权您获取此信息,则您返回的访问令牌将设置为允许您获取e的位邮件地址,以下将起作用:

-(void)getFacebookUserInfo {
  [self.facebook requestWithGraphPath:@"me" andDelegate:self];
}

假设您的-(void)request:(FBRequest *)request didLoad:(id)result方法可用(看起来是这样)。

请注意,此帖子中未提供完整的SSO(单点登录)流程,您需要详细浏览https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/#implementsso

另请注意,您可能正在使用已弃用的iOS 6 API,在进一步操作之前,请先查看https://developers.facebook.com/docs/tutorial/iossdk/upgrading-from-2.0-to-3.1/

答案 1 :(得分:1)

使用2.4 api时,使用参数来指定您有兴趣接收哪些用户数据项。 E.g:

FBSDKGraphRequestConnection * connection2 = [[FBSDKGraphRequestConnection alloc] init];

FBSDKGraphRequest *selfRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me?"
                                                                   parameters:@{@"fields":@"id,name,first_name,last_name,verified,email"}];
[connection2 addRequest:selfRequest
      completionHandler:^(FBSDKGraphRequestConnection *innerConnection, NSDictionary *result, NSError *error) {
          if (error) {
              NSLog(@"%@", error);
              return;
          }

          if (result) {
              // get user data
              NSMutableDictionary *facebookUserData = [NSMutableDictionary dictionaryWithDictionary:result];
              NSLog(@"result=%@", result);

但是,他们显然搞砸了大部分时间,因为电子邮件目前还没有为开发者返回,目前正在开发应用程序中。 顺便提一下,在开发中的应用程序上提交错误是不可能的,因为它们需要在反馈系统中批准的应用程序......

我想知道在提交应用程序以供审批之前,他们怎么认为我们会确保某些工作有效,或者在Facebook之前要求获得App Store App Store ID的逻辑是什么?可以充分测试集成。

此外,谁是Facebook的天才谁决定有一天从另一个中断工作代码?