2014-12-17 3 views
3

Я пробовал приведенный ниже код для получения электронной почты человека, который вошел в систему iOS Settings Facebook. Пожалуйста, помогите мне, как получить электронную почту от SLRequest.Как получить адрес электронной почты для facebook с помощью SLRequest в iOS Social Framework

- (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"]); 

      }]; 
     } 
    }]; 
} 

ответ

1

Вы можете получить идентификатор электронной почты указанным ниже способом. Вызвать графический API Facebook с помощью токена доступа, который вы получили из магазина учетных записей И да, чтобы получить идентификатор электронной почты от Facebook, вам необходимо предоставить разрешение «электронной почты» при запросе токена доступа без разрешения, которое вы не сможете получить чтобы получить электронную почту параметр

Вот мой код

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); 
}]; 

Затем разобрать данные

-(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; 
} 
+0

Это сработало спасибо !!! –

+0

Добро пожаловать, я рад, что это помогло вам – Janmenjaya

2

Вот код протестирован на прошивке 8, который возвращает электронную почту. Решение не требует Facebook SDK, хотя система предоставляет доступ к учетной записи Facebook только в том случае, если пользователь зарегистрировался в 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); 
       } 
      } 
     }];    
    } 
}]; 

 Смежные вопросы

  • Нет связанных вопросов^_^