2015-04-07 6 views
12

Ich integriere FacebookSDK 4.x Integration mit benutzerdefinierten UI und folgende Methode zum Anmelden und auch E-Mail-Berechtigung vom Benutzer erhalten.Wie kann ich die E-Mail-Berechtigung mit dem Facebook iOS SDK 4.x "erneut anfordern"?

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     if (error){ 
      NSLog(@"%@",[error localizedDescription]);    
     } 
     else if (result.isCancelled){ 
      NSLog(@"Cancled"); 
     } 
     else 
     { 
      if ([result.grantedPermissions containsObject:@"email"]) 
      { 
       NSLog(@"Granted all permission"); 
       if ([FBSDKAccessToken currentAccessToken]) 
       { 
        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
        { 
         if (!error) 
         { 
          NSLog(@"%@",result); 
         } 
        }]; 
       } 
      } 
      else 
      { 
       NSLog(@"Not granted"); 
      } 
     } 
    }]; 

Das funktioniert gut, es sei denn, der Benutzer verweigert den Zugriff auf "E-Mail". Ich sehe in den FacebookSDK-Dokumenten, dass ich den Zugriff auf die E-Mail-Adresse des Benutzers erneut anfordern kann. Nach den FB-Dokumentation: wie in diesem

link gegeben
If someone has declined a permission for your app, the login dialog won't let your app re-request the permission unless you pass auth_type=rerequest along with your request. 

Aktivieren Flow Re-Authentifizierung

Während gewählten Login zeigten wir Ihnen, wie Sie die Anmeldung Dialog und OAuth verwenden, jemanden zu authentifizieren und fordern Sie Berechtigungen von ihnen. Um erneut zu authentifizieren, können Sie diese Schritte mit zusätzlichen Parameter verwenden, um es zu zwingen:

auth_type: Dieser Parameter gibt die angeforderten Authentifizierungs Funktionen (als kommagetrennte Liste). Gültige Optionen sind: https - überprüft das Vorhandensein einer sicheren Sitzung Facebook und bittet um erneute Authentifizierung, wenn es nicht vorhanden reauthenticate ist - bittet die Person erneut authentifizieren bedingungslos

auth_nonce: includes an app generated alphanumeric nonce which can be used to provide replay protection. See how to check an auth_nonce 

für mehr.

Hier ist ein Beispiel, das JavaScript SDK, das unter Verwendung von erneute Authentifizierung unter Verwendung eines von auth_type reauthenticate löst:

FB.login (function (response) { // Ursprüngliche FB.login Code}, {auth_type : 'reauthenticate'})

Beachten Sie, dass der Körper der Antwort den auth_type Parameter enthält, die Sie zum Beispiel angegeben,:

access_token = USER_ACCESS_TOKEN & abläuft = SECONDS_UNTIL_TOKEN_EXPIRES & auth_type =

reauthenticate Wie gehe ich "auth_type = rerequest" auf Facebook-Servern über das iOS SDK? Gibt es dafür eine spezielle Methode?

Antwort

15

ich gelösten Problem, indem das Verfahren unter Hinweis:

[login logInWithReadPermissions: @ [@ "email"] Handler:^(FBSDKLoginManagerLoginResult * Ergebnis, NSError * error)

Ich brauche passieren auth_type: ‚rerequest‘ während anfordernden wieder und ich bekomme es in der Dokumentation dieser Methode i die Beschreibung erhalten:

Verwenden sie diese Methode, wenn sie Leseberechtigungen zu fragen. Sie sollten nur nach Berechtigungen fragen, wenn sie benötigt werden, und den Wert dem Benutzer erklären. Sie können die result.declinedPermissions überprüfen, um dem Benutzer weitere Informationen zu bereitzustellen, wenn sie Berechtigungen verweigern.

Wenn [FBSDKAccessToken currentAccessToken] nicht gleich Null ist, wird es für den Benutzer als reauthorization behandelt und die „rerequest“ Flag an den Login-Dialog übergeben.

nur das Problem war ich Abmelde Methode der FbSDKLoginManager Klasse rief. Dadurch wird das Token gelöscht und es wird es als die alte Berechtigung nicht erneut angefordert Berechtigung.

+0

Ich habe das gleiche Problem, aber wie hast du auth_type: 'request' übergeben? – joels

+3

Eigentlich übergebe ich 're-request' nicht explizit an facebook, aber sobald Sie eingeloggt sind, rufen Sie erneut die Methode loginWithReadPermissions: @ [@ "email"] handler:^(FBSDKLoginManagerLoginResult * result, NSError * error) auf Nimm als 'erneut anfordern'. Erinnere dich einfach an diese Methode nach einiger Zeit, das ist es ja, aber du darfst die Abmelde-Methode nicht aufrufen, bevor du diese Methode erneut anrufst. hoffe, es wird dir helfen :) – Ryuk

+0

also, wie die Benutzer E-Mail bekommen, wenn Sie es verwenden möchten? – ArdenDev

1

Sie müssen nicht wirklich übergeben oder rufen Sie auth_type: request. Dies wird bereits von Facebook getan. Wenn Sie FBSDKLoginManager überprüfen, erledigt der Code das für Sie.

-(NSDictionary *)logInParametersWithPermissions:(NSSet *)permissions 
{ 
    if ([FBSDKAccessToken currentAccessToken]) 
     { 
      loginParams[@"auth_type"] = @"rerequest"; 
     } 
} 
Verwandte Themen