2013-06-27 2 views
6

Ich arbeite an einer iOS App, die Parse und Facebook verwendet.Parsen mit Facebook Login: Server verweigerte Verlängerungsanfrage mit Fehlercode: 190

Für die Facebook-Login ich die Führungen auf dieser Seite finden Sie am: https://www.parse.com/tutorials/integrating-facebook-in-ios

die Führung Folgen, habe ich diesen Code, die im Cache gespeicherte Sitzung bestätigen:

// check if this cached session is still valid? 
// does nothing if still valid 
- (void) validateCachedSession 
{ 
    FBRequest *request = [FBRequest requestForMe]; 
    [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
     if (!error) 
     { 
      // handle successful response 
      LogObvious(@"Facebook session validated. No problem"); 
     } 
     else if ([error.userInfo[FBErrorParsedJSONResponseKey][@"body"][@"error"][@"type"] isEqualToString:@"OAuthException"]) 
     { // Since the request failed, we can check if it was due to an invalid session 
      LogObvious(@"The facebook session was invalidated. Announce logged Out"); 

      // The persisted session is invalid. Logout! 
      [self logout]; 
     } 
     else 
     { 
      LogObvious(@"The facebook session was invalidated. Announce logged Out"); 

      // The persisted session is invalid. Logout! 
      [self logout]; 
     } 
    }]; 
} 

Wie oben gezeigt, wenn die Cache-Sitzung ist ungültig, sollte es Abmeldung anrufen:

- (void) logout 
{ 
    [PFUser logOut]; 
    // Over here we will show the login button again. 
} 

Um dies zu testen. Ich habe mich zuerst über einen Facebook-Account bei meiner App angemeldet. Dann habe ich das Passwort geändert und die App erneut besucht.

Die App erkennt korrekt, dass die Sitzung ungültig ist und Abmeldung aufgerufen wird.

Aber wenn ich Login erneut auf, die Login-Funktion diesen Fehler zurückgibt:

Uh oh. An error occurred: Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0x1e066140 {com.facebook.sdk:ErrorInnerErrorKey=Error Domain=com.apple.accounts Code=1 "Server refused renewal request with error code: 190" UserInfo=0x1d56df10 {NSLocalizedDescription=Server refused renewal request with error code: 190}, com.facebook.sdk:ParsedJSONResponseKey={ 
    body =  { 
     error =   { 
      code = 190; 
      "error_subcode" = 65001; 
     }; 
    }; 
}} 

WARUM? Auch wenn ich die App beende und neu starte. Die App bleibt nun in diesem Zustand - sie kann sich nicht anmelden. Jede Hilfe wird geschätzt.

p/s: Um klar zu sein, das ist meine Login-Funktion:

// to be called when user explicitly clicked a login button 
- (void) loginByFacebookWithPermissions:(NSArray*)permissionsArray 
{ 
    LogFunctionCalledObvious(); 
    [PFFacebookUtils logInWithPermissions:permissionsArray block:^(PFUser *user, NSError *error) 
    { 
     if (!user) 
     { 
      if (!error) 
      { 
       NSLog(@"Uh oh. The user cancelled the Facebook login."); 
      } else 
      { 
       NSLog(@"Uh oh. An error occurred: %@", error); 
       [self logout]; 
      } 
     } else if (user.isNew) 
     { 
      LogObvious(@"User with facebook signed up and logged in!"); 
      [self requestLoggedInUserInfo]; 
     } else 
     { 
      LogObvious(@"User with facebook logged in!"); 
      [self requestLoggedInUserInfo]; 
     } 
    }]; 
} 

p/s2: OK, auf weitere Untersuchungen, so dass es in diesem Zustand fest, bis ich zu dem Einstellungen- gehen> Facebook um das neue Passwort erneut einzugeben. Ist das das richtige Verhalten? sollte iOS6 den Benutzer nicht umgehend daran erinnern, das Passwort zu ändern, wenn ich das Facebook-Passwort von Facebook.com geändert habe?

+0

Ich habe das gleiche Problem, hast du es gelöst? Danke – Kreutzer

+0

Irgendwie kommt die Facebook App im Rahmen der App um. Er bittet den Benutzer, das Passwort erneut einzugeben ... Sie könnten möglicherweise schnüffeln, welchen Anruf sie mit Charles oder einem anderen Paket schnüffeln für den Re-Auth-Anruf machen, ich bin sehr neugierig .... Die Alternative ist ein bisschen falsch, wie viele Benutzer haben keine Ahnung, was ich mit dieser Nachricht machen soll. – Kevin

Antwort

1

Ihr Fehler Untercodepunkte zu diesem

static const int FBSDKSystemPasswordErrorSubcode = 65001; 

case FBSDKSystemPasswordErrorSubcode: 
      case FBAuthSubcodePasswordChanged: 
       if (subcode == FBSDKSystemPasswordErrorSubcode 
        || [FBErrorUtility fberrorIsErrorFromSystemSession:error]) { 
        userMessageKey = @"FBE:PasswordChangedDevice"; 
        userMessageDefault = @"Your Facebook password has changed. To confirm your password, open Settings > Facebook and tap your name."; 
        shouldNotifyUser = YES; 
       } else { 
        userMessageKey = @"FBE:PasswordChanged"; 
        userMessageDefault = @"Your Facebook password has changed. Please log into this app again to reconnect your Facebook account."; 
       } 
       break; 

Sie werden dem Benutzer Nachricht haben irgendwie diese

Ihr Facebook Passwort geändert hat zu tun. Um Ihr Passwort zu bestätigen, öffnen Sie Einstellungen> Facebook und tippen Sie auf Ihren Namen.

oder

Ihr Facebook-Passwort wurde geändert. Bitte logge dich erneut in diese App ein, um dein Facebook-Konto erneut zu verbinden.

+3

Ich habe vor kurzem entdeckt, dass NSString * Nachricht = [FBErrorUtility userMessageForError: Fehler] wird uns sofort eine Zeichenfolge zur Verfügung stellen, die den Fehler beschreiben wird. – mkto

+0

Sehr hilfreich @mkto – Leverin