2013-06-27 12 views
6

Sto lavorando su un'app iOS che utilizza Parse e Facebook.Parse con Facebook Login: server ha rifiutato la richiesta di rinnovo con codice di errore: 190

Per il login di Facebook, sto seguendo le guide in questa pagina: https://www.parse.com/tutorials/integrating-facebook-in-ios

Seguendo la guida, ho questo codice che convalidare la sessione di cache:

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

Come indicato sopra, se il la sessione memorizzata nella cache non è valida, dovrebbe chiamare il logout:

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

Per testare questo. Per prima cosa ho effettuato l'accesso alla mia app utilizzando un account Facebook. Quindi, ho cambiato la password e rivisitare l'app.

L'applicazione riconosce correttamente la sessione è invalidata e il logout viene chiamato.

Ma quando clicco di nuovo login, la funzione di login sta tornando questo errore:

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

PERCHE '? Anche se termino l'app e la riavvio. L'app ora si bloccherà in questo stato - impossibile accedere. Qualsiasi aiuto sarà apprezzato.

p/s: Per essere chiari, questo è il mio funzione di login:

// 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, dopo ulteriori indagini, quindi è bloccato in questo stato fino a quando vado alle Impostazioni-> Facebook per reinserire la nuova password. È questo il comportamento corretto? iOS6 non dovrebbe ricordare tempestivamente all'utente di cambiare la password quando ho cambiato la password di Facebook da Facebook.com?

+0

Ho lo stesso problema, l'hai risolto? Grazie – Kreutzer

+0

In qualche modo l'app di Facebook aggira questo contesto nel contesto dell'app. Chiede all'utente di inserire di nuovo la password ... potresti forse snoopare la chiamata che stanno facendo con Charles o qualche altro pacchetto che annusa per la chiamata di re-auth, sono molto curioso ... L'alternativa è un po 'fasulla come molti utenti hanno non ho idea di cosa fare con quel messaggio. – Kevin

risposta

1

vostro errore punti di codice Sub Per questo

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; 

si dovrà messaggio che l'utente in qualche modo per fare questo

la password di Facebook è cambiata. Per confermare la password, apri Impostazioni> Facebook e tocca il tuo nome.

o

la password di Facebook è cambiata. Accedi di nuovo a questa app per ricollegare il tuo account Facebook.

+3

Recentemente ho scoperto che il messaggio NSString * = [FBErrorUtility userMessageForError: error] ci fornirà istantaneamente una stringa che descriverà l'errore. – mkto

+0

Molto utile @mkto – Leverin

Problemi correlati