13

Creo que esto podría efectuar una gran cantidad de Facebook/desarrolladores de Android y, sin embargo, no parece ser que mucha discusión sobre el tema ...¿Es posible extender tokens de Facebook con extendAccessTokenIfNeeded en una aplicación de Android?

Mi pregunta

nadie ha renovado con éxito una token utilizando la función extendAccessTokenIfNeeded? Si tuvo éxito, ¿qué versión ejecutó el dispositivo (o emulador)?

Antecedentes

he recibido un correo electrónico de Facebook diciendo que el permiso offline_access dejará de estar disponible desde el 1 de mayo de 2012 y la actualización de Facebook recomienda su último SDK. Multa.

Actualicé a la última versión del SDK, la aplicación oficial de Facebook está instalada en mi dispositivo y (¡eventualmente!), El inicio de sesión único parece estar funcionando bien. Estoy recibiendo tokens de 60 días, lo que de nuevo está bien.

Los problemas comenzaron cuando traté de usar extendAccessTokenIfNeeded (Context context, ServiceListener serviceListener). No pude conseguir que actualice mis tokens por un tiempo de caducidad más largo. Esperé 24 horas entre intentos, pero el token no se actualizaba. La única forma en que puedo obtener un token actualizado es cerrar la sesión e iniciar sesión. Esto también sucedió cuando usé el proyecto de ejemplo "Hackbook".

La respuesta más obvia es que estoy haciendo algo mal, pero se envió un bug report a Facebook diciendo que ... "shouldExtendAccessToken casi siempre devolverá falso". Este informe ha recibido la prioridad "lista de deseos".

Alternativas a la extendAccessTokenAsNeeded()

En los Facebook documentation about offline_access deprecation tokens se pueden ampliar mediante la API Graph. Sin embargo, esto tiene el disadvantage of needing the "App Secret" que se incluye en la URL. Una ventaja es que el usuario no necesitaría tener instalada la aplicación oficial de Facebook en su dispositivo.

Otras ideas e inquietudes

  • Al cambiar la función extendAccessTokenIfNeeded en Facebook.java para volver siempre es cierto, creo que lo tengo que actualizar una vez. (La razón que digo "pensar" se debe a que no se repita el comportamiento y sospecho que tengo que esperar otras 24 horas antes de cualquier posibilidad de un nuevo éxito)

  • noto que Hackbook requiere AndroidHttpClient ser importados. Esto solo está disponible para API 8 en adelante. ¿Significa esto que el SSO de Facebook (en particular la actualización de tokens) solo funciona en dispositivos con API 8 y posterior?

  • El Facebook.apk included in the SDK es bastante viejo. Quizás esta es la razón por la cual los tokens no se actualizan en emuladores que ejecutan API 8 y posterior?

  • Y, por último, todo esto solo se relaciona con las personas que tienen instalada la aplicación oficial de Facebook . Es necesario completar otro método para aquellas personas que no tienen la aplicación oficial de Facebook (¡simplemente quejándose ahora!)

Relevante Facebook une

Facebook-Android-SDK at GitHub

Facebook Android Tutorial

Facebook offline_access permission deprecation

Facebook bug report

relacionada desbordamiento de pila Preguntas

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

"Al cambiar la función extendAccessTokenIfNeeded en Facebook.java para que siempre sea verdadera, creo que tengo que actualizarla una vez. (La razón por la que digo" pensar "es porque no repetirá el comportamiento y sospecho que tengo que espere otras 24 horas antes de tener la posibilidad de otro éxito) "¿Ha vuelto a realizar la prueba? – nmr

Respuesta

3

No sé el desarrollo de Android, pero si usted está teniendo problemas con esa función, tal vez hay una función similar de Curl dentro de Android que le permitirá llamar 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 reveló: http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html sobre la forma de rizo de Android)

+0

Gracias por su respuesta. Yo investigaré. – Mel

+1

No creo que esto funcione, y no creo que sea una buena idea. Creo que no es una buena idea porque implica insertar tu client_secret en tu aplicación de Android, lo que significa que es público, lo cual es malo. No creo que esto funcione porque este punto final no parece poder extender los tokens de acceso después de su vencimiento original de 60 días. (Sin embargo, es bueno extender tokens de autenticación del lado del cliente de 2 horas en tokens de 60 días). – nmr

+1

La llamada debe hacerse desde un servidor web remoto donde client_secret es verdaderamente secreto. Entonces podrías usar AJAX en el servidor web remoto de Android usando CURL. – DMCS

1

Intente cambiar el tiempo de REFRESH_TOKEN_BARRIER, para que no tenga que esperar 24 horas cada vez que desee realizar la prueba. Cambié el mío a aproximadamente 2 minutos, y pude ver que el token de acceso se estaba extendiendo cuando reinicié la aplicación después de 2 minutos.

Cuestiones relacionadas