2012-09-27 18 views
9

Sto utilizzando il Facebook SDK 3.1 con iOS 6 Facebook impostato in Impostazioni e la mia app autorizzata.Token di accesso scaduto dopo openActiveSession per Facebook SDK iOS

Esegue alla perfezione:

[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *fbSession, FBSessionState fbState, NSError *error) { ... } 

Comunque ora quando tento di ottenere 'me' informazioni sto ottenendo un errore:

com.facebook.sdk:ParsedJSONResponseKey = { 
    body =  { 
     error =   { 
      code = 190; 
      "error_subcode" = 463; 
      message = "Error validating access token: Session has expired at unix time 1348704000. The current unix time is 1348706984."; 
      type = OAuthException; 
     }; 
    }; 
    code = 400; 
} 

Se guardo [error code] è pari a 5. Non dovrei avere un token di accesso valido dopo aver effettuato l'accesso? Devo chiamare reauthorize?

UPDATE: Reauthorizing non aiuta. Stranamente, l'accessToken per my activeSession ritorna sempre uguale. Questo nonostante chiamando closeAndClearToken.

+2

Per iniziare la diagnosi, è possibile accedere il token di accesso che si ottiene e incollarlo in https://developers.facebook.com/tools/debug - è il timestamp proprio lì dentro? –

+0

Buon consiglio. Ora il problema è andato via e ho bisogno di ricrearlo. Proverò il tuo suggerimento la prossima volta che lo vedrò. –

+0

Sto avendo lo stesso problema con iPhone5/iOS6. Sembra molto sporadico però. Per favore fatemi sapere se trovate qualcosa di più su questo problema e farò lo stesso. – Chad

risposta

4

UPDATE: Questo problema è stato risolto in Facebook SDK per iOS 3.1.1.


ho sincronizzato il codice fuori di github e ha scoperto che non chiamavano accountStore renewCredentialsForAccount:completion: ovunque. Ho modificato il seguente codice in authorizeUsingSystemAccountStore e sembra aver risolto il problema.

+0

Probabilmente dovremmo controllare un expiryDate prima di rinnovarlo (poiché ci vuole tempo per rinnovarlo) ma nonostante quello che dice nei documenti di Apple (http://developer.apple.com/library/ios/#documentation/Accounts/Reference/ACAccountCredentialClassRef /Reference/Reference.html#//apple_ref/doc/c_ref/ACAccountCredential), il parametro expiryDate non sembra esistere. –

+2

Ciao Ben, hai ragione sul bisogno di chiamare il rinnovo *. Chiamare da qui funziona bene. La scelta di dove effettuare le chiamate dipende in genere dal trade-off tra coerenza di comportamento e roundtrip di rete aggiuntivi. Nel successivo aggiornamento dell'SDK stiamo considerando di effettuare la chiamata nella logica FBRequestConnection che gestisce i token non validi. –

+0

@JasonClark Sembra una scelta ragionevole. Suggerirei anche di avere solo una semplice vecchia chiamata di rinnovo nell'SDK FB. Sarebbe utile se stessimo usando l'SDK per la gestione dei token piuttosto che un conduit per effettuare chiamate di grafici. Grazie per aver risposto! –

0

Quindi è indirizzato, ma ho chiamato/me dal nostro backend per verificare poiché non ci si può fidare del dispositivo.

Quindi faccio una chiamata allo FBSession di + (void)renewSystemAuthorization quando il backend torna con un errore di autorizzazione.

+1

Non vedo un metodo di classe renewSystemAuthorization in FBSession in 3.1.1. – gerry3

+0

Sembra che abbiano affrontato questo problema per questo impegno per il quale sono in ritardo. https://github.com/facebook/facebook-ios-sdk/commit/0b3d28b7bea8b63dd9efca67e1438d72fc78daf5 – hawflakes

Problemi correlati