Cómo manejar la eliminación de offline_access de Facebook cuando usa el token tanto en la aplicación iOS como en un servidor

De Facebookdeprecación deloffline_access el permiso llegará en mayo de 2012 y la documentación no nos da suficiente información sobre cómo manejarlo.

Tenemos una aplicación iOS y el servicio correspondiente que la potencia y se integra con Facebook de una manera profunda para aprovechar la lista de amigos de un usuario con la aplicación (así que si tus amigos de FB también usan la aplicación, puedes conectarte más fácilmente). Esto es como todas las aplicaciones sociales parecen funcionar, así que nada especial aquí.

Cliente

Nuestra aplicación utilizaFacebook iOS SDK para permitir al usuario iniciar sesión, que actualmente solicitamosoffline_access. El token se conserva en nuestra aplicación de iOS, pero también se envía a nuestro servidor donde se guarda. El cliente actúa en nombre del usuario para publicar actualizaciones en el suministro de noticias de un usuario (también pedimospublish_stream permiso).

Servidor

Nuestro servidor verifica periódicamente si los amigos de FB de los usuarios están usando nuestra aplicación. La próxima vez que el usuario inicie sesión, exponemos el contenido y las relaciones de una manera determinada para promover a los amigos de ese usuario. El servidor también actúa en nombre del usuario para conectarse periódicamente a la API gráfica y obtener la lista de amigos actuales del usuario. Esto es para que podamos explicar los cambios en las relaciones de un usuario y hacer que se reflejen en nuestra aplicación. Hacemos esto cuando el usuario no está usando la aplicación actualmente, para que tengan la mejor experiencia la próxima vez que la utilicen. Para habilitar esto, nuestra aplicación iOS envía el token de acceso a nuestro servidor, el cual utiliza y por qué pedimosoffline_access.

Nota: Si el usuario cierra sesión en nuestra aplicación explícitamente, eliminamos los tokens de acceso tanto del cliente como del servidor.

Problemas

Ahora que ya no hay un token de acceso perpetuo que podamos usar, estoy tratando de encontrar la mejor práctica para seguir habilitando nuestros escenarios al tiempo que aprovechamos la nueva forma de manejo y extensión de tokens de acceso de Facebook. La documentación desafortunadamente no es del todo útil.

Preguntas

A. Cuando se autentica a través del nuevo SDK de iOS de Facebook, ¿cuál es la duración predeterminada del token de acceso que obtiene?Este documento dice que una solicitud de token extendida le dará una que dura 60 días. Estaotro documento habla sobre la primera solicitud de token de acceso y menciona varias validaciones pero espoco claro y habla de tiempos de validez específicos:

(el énfasis es mío)

Cuando obtenga un token de acceso de Facebook, será válido inmediatamente y se podrá utilizar en las solicitudes a la API durante un período de tiempo definido por Facebook. Una vez transcurrido ese período, se considera que el token de acceso ha caducado y el usuario deberá autenticarse nuevamente para que su aplicación obtenga un token de acceso nuevo.La duración durante la cual un token de acceso dado es válido depende de cómo se generó.

También hay eventos que pueden hacer que un token de acceso deje de ser válido antes de su tiempo de caducidad esperado. Tales eventos incluyen que el usuario cambie su contraseña, una aplicación que actualiza su Secreto de aplicaciones. Tratar con los diferentes tiempos de caducidad del token de acceso y manejar el caso cuando un token de acceso se vuelve inválido antes de su tiempo de caducidad esperado es esencial para construir experiencias sociales sólidas.

SEGUNDO. Para el cliente, ahora que el token de acceso no es necesariamente de larga duración, es el enfoque correcto para nosotros:

Deje que se inicie sesión a través de FB y, a continuación, detecte cada vez que caduque el token de acceso. Si es así, llame al SDK de iOS de FB para volver a autenticar / autorizar nuevamente. (Esto solo debería hacer que el usuario salte a la aplicación FB iOS y, en la mayoría de los casos, vuelva inmediatamente a nuestra aplicación con un nuevo token de acceso).

DO. De acuerdo aesta entrada de blog Encontré, solo puedes extender un token de acceso una vez:

¿Puedo cambiar mi token de acceso de 60 días por un nuevo token de acceso de 60 días?

No, lo siento, no puedes. Solo puede intercambiar un token de acceso de usuario válido (es decir, actual) por uno extendido. No puede extender un token de acceso ya extendido.

En el cliente, puedo manejar esto al solicitar una nueva autenticación / autorización como mencioné en la Pregunta B. Sin embargo, esto no funciona en nuestro servidor. Ciertamente podríamos tener el servidor renovarlo una vez a 60 días, pero ¿qué sucede en el día 61? ¿El servidor simplemente deja de poder sincronizar la lista de amigos?

RE. Parece tener sentido verificar la validez del token de acceso FB cada vez que la aplicación se inicia o se rehidrata desde el modo de espera. ¿Cuál es la mejor manera de que nuestra aplicación iOS compruebe esto? ¿Hay un punto final recomendado para llamar para validar un token? ¿Deberíamos llamar ahttps://graph.facebook.com/me ¿Pasando el token de acceso y comprobando la respuesta?

Nota: ciertamente podemos grabar elexpires cuando recibimos el token extendido inicialmente, pero esto no es confiable ya que el usuario podría revocar el permiso de nuestra aplicación en cualquier momento, lo que hace que elexpires tiempo de un punto de datos no fiable en la validez

Respuestas a la pregunta(2)

Su respuesta a la pregunta