如何在iOS社交框架中使用SLRequest获取Facebook的电子邮件参数

我试着下面的代码获取loginiOS设置Facebook的人的电子邮件。 请帮助我如何从SLRequest获取电子邮件。

- (void) getMyDetails { if (! _accountStore) { _accountStore = [[ACAccountStore alloc] init]; } if (! _facebookAccountType) { _facebookAccountType = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; } NSDictionary *options = @{ ACFacebookAppIdKey: FB_APP_ID }; [_accountStore requestAccessToAccountsWithType: _facebookAccountType options: options completion: ^(BOOL granted, NSError *error) { if (granted) { NSArray *accounts = [_accountStore accountsWithAccountType:_facebookAccountType]; _facebookAccount = [accounts lastObject]; NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/me"]; SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodGET URL:url parameters:nil]; request.account = _facebookAccount; [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil]; NSLog(@"id: %@", responseDictionary[@"id"]); }]; } }]; } 

你可以通过下面提到的方式获得电子邮件ID。 通过您从账户存储获得的访问令牌来调用FacebookgraphicsAPI。是的,要从Facebook获取电子邮件ID,您需要在请求访问令牌时提供“电子邮件”权限,而没有您无法获得的权限电子邮件参数

这是我的代码

 NSString *FB_EncodedToken = [APP_CONSTANT.facebookToken stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; AFHTTPRequestOperationManager *opearation = [AFHTTPRequestOperationManager manager]; opearation.requestSerializer = [AFHTTPRequestSerializer serializer]; opearation.responseSerializer = [AFJSONResponseSerializer serializer]; NSString *strUrl = [NSString stringWithFormat:@"https://graph.facebook.com/me?"]; NSDictionary *param = [NSDictionary dictionaryWithObjectsAndKeys:FB_EncodedToken,@"access_token", nil]; [opearation GET:strUrl parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) { DLogs(@"Description %@",responseObject); //Lets pasre the JSON data fetched from facebook [self parseUserDetail:responseObject]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { DLogs(@"Error description %@",error.description); self.completionHandler(error); }]; 

然后parsing数据

 -(void)parseUserDetail:(NSDictionary *)dict { FBProfileBO *profile = [[FBProfileBO alloc] init]; profile.userFirstName = [dict objectForKey:@"first_name"]; profile.userLastName = [dict objectForKey:@"last_name"]; profile.userEmail = [dict objectForKey:@"email"]; profile.userName = [dict objectForKey:@"name"]; profile.userDOB = [dict objectForKey:@""]; profile.facebookId = [dict objectForKey:@"id"]; //Call back methods self.completionHandler(profile); profile = nil; } 

这是在iOS 8上testing的代码,返回电子邮件。 该解决scheme不需要Facebook SDK,但只有当用户使用设置应用程序中的Facebooklogin时,系统才允许访问Facebook帐户。

 // Required includes @import Accounts; @import Social; // Getting email ACAccountStore *theStore = [ACAccountStore new]; ACAccountType *theFBAccountType = [theStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; NSDictionary *theOptions = @{ ACFacebookAppIdKey : @"YOUR_APP_ID", ACFacebookPermissionsKey : @[@"email"] }; [theStore requestAccessToAccountsWithType:theFBAccountType options:theOptions completion:^(BOOL granted, NSError *error) { if (granted) { ACAccount *theFBAccount = [theStore accountsWithAccountType:theFBAccountType].lastObject; SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodGET URL:[NSURL URLWithString:@"https://graph.facebook.com/me"] parameters:@{@"fields" : @[@"email"]}]; request.account = theFBAccount; [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); } } }]; } }];