2013-06-27 8 views
6

Pracuję nad aplikacją na iOS, która korzysta z narzędzia Parse i Facebook.Parsowanie za pomocą Facebooka Zaloguj się: Serwer odmówił prośby o odnowienie z kodem błędu: 190

do logowania Facebooka, śledzę prowadnice na tej stronie: https://www.parse.com/tutorials/integrating-facebook-in-ios

zgodnie z instrukcjami, mam ten kod zatwierdzić w pamięci podręcznej sesji:

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

Jak przedstawiono powyżej, jeśli sesja w pamięci podręcznej jest nieprawidłowa, należy wywołać wylogowanie:

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

Aby to przetestować. Najpierw zalogowałem się do mojej aplikacji za pomocą konta na Facebooku. Następnie zmieniłem hasło i ponownie odwiedziłem aplikację.

Aplikacja prawidłowo rozpoznaje, że sesja została unieważniona i wylogowano się.

Ale kiedy ponownie kliknij logowanie, funkcja logowania wraca ten błąd:

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

DLACZEGO? Nawet jeśli zamknę aplikację i uruchomię ją ponownie. Aplikacja utknie w tym stanie - nie można się zalogować. Każda pomoc zostanie doceniona.

p/s: Żeby było jasne, to jest moja funkcja logowanie:

// 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, po więcej dochodzenia, tak tkwi w tym stanie aż pójdę do Ustawienia-> Facebook ponownie wprowadzić nowe hasło. Czy to jest prawidłowe zachowanie? czy iOS6 nie powinien natychmiast przypominać użytkownikowi o zmianie hasła, kiedy zmieniłem hasło na Facebooku z Facebook.com?

+0

Mam ten sam problem, rozwiązałeś go? Dzięki – Kreutzer

+0

W jakiś sposób aplikacja na Facebooku omija to w kontekście aplikacji. Prosi użytkownika, aby ponownie wprowadził hasło ... możesz podsłuchać połączenie, które nawiązują z Charlesem lub innym pakietem węszącym do ponownego wywołania, jestem bardzo ciekawy ... Alternatywa jest trochę fałszywa, ponieważ wielu użytkowników nie mam pojęcia, co zrobić z tą wiadomością. – Kevin

Odpowiedz

1

swój błąd punkty kodowe sub do tego

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; 

Będziesz musiał wiadomości użytkownika jakoś to zrobić

Twoje hasło Facebook uległ zmianie. Aby potwierdzić hasło, otwórz Ustawienia> Facebook i dotknij swojej nazwy.

lub

Twoje hasło na Facebooku zostało zmienione. Zaloguj się ponownie do tej aplikacji, aby ponownie połączyć swoje konto na Facebooku.

+3

Niedawno odkryłem, że NSString * message = [FBErrorUtility userMessageForError: error] natychmiast dostarczy nam ciąg znaków opisujący błąd. – mkto

+0

Bardzo pomocny @mkto – Leverin

Powiązane problemy