web-dev-qa-db-de.com

Facebook SDK 3.0: Wie erhalte ich die E-Mail des Benutzers?

Im "alten" FB iOS SDK konnte ich Benutzerinformationen über Folgendes erhalten:

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"SELECT uid, name, email, pic FROM user WHERE uid=me()", @"query",
                                   nil];

    JBFacebookManager *fbManager = [JBFacebookManager getInstance];
    fbManager.requestDelegate = self;

    [fbManager.facebook requestWithMethodName:@"fql.query"
                                     andParams:params
                                 andHttpMethod:@"POST"
                                   andDelegate:self];

Wie kann ich das mit dem neuen FB iOS SDK 3.0 machen? Muss ich FBRequest oder FBOpenGraphAction oder FBGraphObject oder eine Kombination davon oder etwas völlig anderes verwenden?

25
znq
if (FBSession.activeSession.isOpen) {
    [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
         if (!error) {
             self.nameLabel.text = user.name;
             self.emailLabel.text = [user objectForKey:@"email"];
         }
     }];
}

Da FBGraphUser keine E-Mail @property hat, können wir nicht auf die Informationen wie mit dem Namen (Punkt-Syntax) zugreifen, jedoch hat das NSDictionary immer noch das E-Mail-Kv-Paar und wir können darauf zugreifen, wie wir es mit einem normalen NSDictionary tun würden .

Vergessen Sie nicht, um die E-Mail-Erlaubnis zu bitten:

NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil];
[FBSession sessionOpenWithPermissions:permissions completionHandler:
 ^(FBSession *session, FBSessionState state, NSError *error) {
     [self facebookSessionStateChanged:session state:state error:error];
 }];
68
znq

Sobald Sie Zugriff auf (id<FBGraphUser>)user haben, können Sie einfach user[@"email"] verwenden. 

5
Zorayr

daraus können wir die Basisinformationen und die E-Mail-ID des Facebook-Benutzers erhalten.

[FBSession openActiveSessionWithReadPermissions:@[@"basic_info",@"email"] allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState status,NSError *error){
        if(error)
        {
            NSLog(@"Facebook Error : %@",error.localizedDescription);
        }
        else{

        }
        // Respond to session state changes,
        // ex: updating the view

    }];
1
Vineesh TP

Haben Sie den Quellcode des 3.0 SDK gelesen? Es gibt eine Methode, die ich für identisch halte:

- (FBRequest*)requestWithMethodName:(NSString *)methodName
                          andParams:(NSMutableDictionary *)params
                      andHttpMethod:(NSString *)httpMethod
                        andDelegate:(id <FBRequestDelegate>)delegate;
1
jasondinh

Die einfachste Methode, um die Informationen nach dem Einloggen abzurufen, ist: 

-(IBAction)loginWithFacebook:(id)sender{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login
 logInWithReadPermissions: @[@"public_profile",@"email"]
 fromViewController:self
 handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
     if (error) {
         NSLog(@"Process error");
     } else if (result.isCancelled) {
         NSLog(@"Cancelled");
     } else {
         NSLog(@"Logged in");
         [self getFacebookProfileInfos];

     }
  }];
}

-(void)getFacebookProfileInfos {
NSDictionary *parameters = @ {@"fields": @"id, name, first_name, last_name, picture.type(large), email"};
if ([FBSDKAccessToken currentAccessToken]) {
    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
         if (!error) {
             NSLog(@"fetched user:%@", result);
         }
     }];
}

}

Sie erhalten alle Informationen zum Ergebnis.

0
Ashish