【问题标题】:Getting email using ACAccount for Facebook iOS 7使用 Facebook iOS 7 的 ACAccount 获取电子邮件
【发布时间】:2013-11-11 23:43:22
【问题描述】:

首先,我不想使用 Facebook SDK,所以我设法做到了,这是可行的,但我不知道如何检索用户的电子邮件,即使它是在我的权限请求中。

ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:accountTypeName];

NSDictionary *options;

if ( [accountTypeName isEqualToString:ACAccountTypeIdentifierFacebook]){
    options = @{
                ACFacebookAppIdKey: @"601517946570890"
                ,ACFacebookPermissionsKey: @[@"email"]
                };
}

[account requestAccessToAccountsWithType:accountType options:options completion:^(BOOL granted, NSError *error)
 {
     if (granted == YES)
     {
         NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];

         if ([arrayOfAccounts count] > 0)
         {
             _account = [arrayOfAccounts lastObject];

             NSDictionary *dict = @{
                                    @"name": [_account userFullName] == nil ? [_account username] : [_account userFullName],
                                    @"account_id": [_account identifier],
                                    @"email": @"??"
                                    };

             NSLog(@"account info: %@",dict);
         }
     }
 }];

ACAccount 上没有返回用户电子邮件的属性,所以我尝试查找是否必须通过 SLRequest 完成,但找不到。

有可能吗?

【问题讨论】:

    标签: ios objective-c facebook permissions acaccount


    【解决方案1】:

    现在您需要在 GET 请求中传递参数。默认情况下只有 ID 和名称。

    NSDictionary *param = @{@"fields":@"email,name"};
    
    SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                         requestMethod:SLRequestMethodGET
                                                                   URL:[NSURL URLWithString:@"https://graph.facebook.com/me"]
                                                            parameters:param];
    

    【讨论】:

      【解决方案2】:

      为了从 Facebook 获取用户的电子邮件地址,您必须使用 Graph API 使用 Social framework 查询 current user

      SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                           requestMethod:SLRequestMethodGET
                                                     URL:[NSURL URLWithString:@"https://graph.facebook.com/me"]
                                              parameters:nil];
      request.account = _account; // This is the _account from your code
      [request performRequestWithHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
          if (error == nil && ((NSHTTPURLResponse *)response).statusCode == 200) {
              NSError *deserializationError;
              NSDictionary *userData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&deserializationError];
      
              if (userData != nil && deserializationError == nil) {
                  NSString *email = userData[@"email"];
                  NSLog(@"%@", email);
              }
          }
      }];
      

      【讨论】:

      • 很遗憾,您的建议并不能保证该电子邮件将成为用户数据字典的一部分。到目前为止,我所看到的只是返回 ID 和名称。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多