13

Penso che questo potrebbe effettuare un sacco di Facebook/sviluppatori di Android e tuttavia non sembra essere che molte discussioni sul tema ...È possibile estendere i token di Facebook con extendAccessTokenIfNeeded in un'app Android?

La mia domanda

chiunque ha rinfrescato con successo un token usando la funzione extendAccessTokenIfNeeded? Se hai avuto successo, quale versione era in esecuzione il dispositivo (o l'emulatore)?

Sfondo

ho ricevuto una mail da Facebook dicendo che il permesso offline_access sarà deprecato dal 1 ° maggio 2012 e Facebook consigliato l'aggiornamento al loro ultimo SDK. Belle.

Ho effettuato l'aggiornamento all'ultima SDK, l'app Facebook ufficiale è installata sul mio dispositivo e (eventualmente!) Single Sign On sembra funzionare correttamente. Ricevo token di 60 giorni che di nuovo sono OK.

I problemi sono iniziati quando ho provato a utilizzare extendAccessTokenIfNeeded (contesto contesto, ServiceListener serviceListener). Non riuscivo a farlo aggiornare i miei token per un tempo di scadenza più lungo. Ho aspettato 24 ore tra un tentativo e l'altro ma il token non si aggiornava. L'unico modo per ottenere un token aggiornato è disconnettersi e accedere. Questo è accaduto anche quando ho usato il progetto di esempio "Hackbook".

La risposta più ovvia è che sto facendo qualcosa di sbagliato, ma un bug report è stato inviato a Facebook dicendo che ... "shouldExtendAccessToken praticamente restituirà quasi sempre false". Questo rapporto ha ricevuto la priorità "lista dei desideri".

Alternative al extendAccessTokenAsNeeded()

Nelle Facebook documentation about offline_access deprecation token possono essere estese utilizzando l'API grafico. Tuttavia questo ha il disadvantage of needing the "App Secret" incluso nell'URL. Un vantaggio è che l'utente non avrebbe bisogno di avere l'app ufficiale di Facebook installata sul proprio dispositivo.

Altre idee e preoccupazioni

  • Cambiando la funzione extendAccessTokenIfNeeded in Facebook.java per tornare sempre vero, penso che ho preso per aggiornare una volta. (Il motivo dico "pensare" è perché non ripeterà il comportamento e ho il sospetto che devo aspettare altre 24 ore prima di ogni possibilità di un altro successo)

  • mi accorgo che Hackbook richiede AndroidHttpClient essere importati. Questo è disponibile solo per API 8 in poi. Significa questo che Facebook SSO (in particolare il token di aggiornamento) è probabile che funzioni su dispositivi con API 8 e versioni successive?

  • Il Facebook.apk included in the SDK è piuttosto vecchio. Forse questo è il motivo per cui i token non si aggiornano sugli emulatori che eseguono l'API 8 e versioni successive?

  • Infine, tutto ciò si riferisce solo a coloro che hanno installato l'app Facebook ufficiale ! Un altro metodo deve essere completato per quelle persone senza l'app ufficiale di Facebook (basta lamentarsi ora!)

Rilevante Facebook collega

Facebook-Android-SDK at GitHub

Facebook Android Tutorial

Facebook offline_access permission deprecation

Facebook bug report

correlati Stack Overflow domande

Facebook 60 day access token and Deprecated Offline_Access

Facebook access token can not be extended

How would offline_access work after deprecation after May 1st?

Facebook access token can not be extended

Protecting app secret for extendAccessToken usage (Java/Android)

+0

"Cambiando la funzione extendAccessTokenIfNeeded in Facebook.java per restituire sempre true, penso di averlo aggiornato una volta. (La ragione per cui dico" penso "è perché non ripeterà il comportamento e sospetto di dover aspetta altre 24 ore prima di ogni possibilità di un altro successo) "Hai ripeterlo? – nmr

risposta

3

Non so di sviluppo di Android, ma se hai problemi con quella funzione, forse c'è un simile funzione CURL all'interno di Android che vi permetterà di chiamare https://graph.facebook.com/oauth/access_token?
client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN

(Google ha rivelato: http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html su come Curl da Android)

+0

Grazie per la risposta. Indagherò – Mel

+1

Non penso che funzionerà, e non penso sia una buona idea. Penso che non sia una buona idea perché significherebbe incorporare il tuo client_secret nella tua app per Android, il che significa che è pubblico, il che è male. Non penso che funzionerà perché questo endpoint non sembra in grado di estendere i token di accesso oltre la loro scadenza originale di 60 giorni. (Tuttavia, è utile estendere 2 token di autenticazione lato client in token di 60 giorni). – nmr

+1

La chiamata deve essere effettuata da un server Web remoto in cui il client_secret è veramente segreto. Quindi puoi inviare AJAX al server Web remoto da Android utilizzando CURL. – DMCS

1

Provare a modificare l'ora di REFRESH_TOKEN_BARRIER, in modo da non dover attendere 24 ore ogni volta che si desidera eseguire il test. Ho cambiato il mio a circa 2 minuti, e sono stato in grado di vedere che il token di accesso è stato effettivamente esteso quando ho riavviato l'app dopo 2 minuti.

Problemi correlati