iosiphonefacebooksocial-networkingsocial-framework

How to get Email param of facebook using SLRequest in iOS Social Framework


I tried the below code for getting email of the person who logged in iOS Settings Facebook. Please help me how to get email from 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"]);

            }];
        } 
    }];
}

Solution

  • You can get email id by below mentioned way. Call Facebook graph API by the help of access token that you got from Account store And yes, to get email id from Facebook, you need to provide "email" permission while requesting access token, without the permission you won't be able to get email parameter

    Here is my code

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

    Then parse the data

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