10

Estoy un poco confundido acerca de cómo funciona facebook.logout (context).Cómo funciona el cierre de sesión en Facebook SDK Android

Porque incluso después de cerrar la sesión, puedo obtener acceso a la información que requiere auth_token. Entonces, ¿cómo es eso posible? Me encontré con este tema, que me dejó un poco confundido: https://stackoverflow.com/a/6597688/487940

Después de leer esa respuesta, esta es mi pregunta: Entonces, si el usuario otorga acceso a [mi] aplicación, siempre estará autenticado si está conectado la aplicación de Facebook [oficial]? Incluso si trato de llamar a facebook.logout (context) en [mi] aplicación, ¿estará conectado y mi aplicación podrá hacer llamadas a la API de Facebook?

Lo sentimos, no puedo entender este comportamiento.

ACTUALIZACIÓN: Después de leer la respuesta de Torid, estoy confundido acerca de la función facebook.logout(). ¿Cuál es el propósito de esta función si no registra al usuario? Porque, no veo el propósito de llamar a este propósito nunca más. No registra al usuario.

Respuesta

8

Hay dos cosas independientes sucediendo aquí: 1) si su usuario ha autenticado su aplicación (con permisos) a Facebook y 2) si su usuario ha iniciado sesión en Facebook.

La autenticación se requiere la primera vez que el usuario usa su aplicación y dura hasta que el usuario anula la autenticación (por ejemplo, a través de la configuración de la cuenta web de Facebook -> Aplicaciones -> Configuración de la aplicación).

Es posible que se requiera iniciar sesión cada vez que el usuario inicie su aplicación. Pero si utiliza el SDK authorize() predeterminado, que intenta hacer un inicio de sesión único (SSO), donde si la aplicación de Facebook está iniciada, su aplicación inicia sesión automáticamente y utiliza el token de acceso existente.

Si está utilizando SSO, cuando cierra la sesión, eso no tiene ningún efecto, ya que un cierre de sesión real tendría que cerrar la sesión de la aplicación de Facebook, que al usuario no le gustaría.

, usted puede obtener este comportamiento haciendo una autorizar de forma

authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener()); 

que evita SSO y obliga a un inicio de sesión de diálogo. Por supuesto, eso obliga a su usuario a iniciar sesión cada vez que inicia su aplicación, a menos que guarde los tokens de acceso/detalles de inicio de sesión bajo las cubiertas (que es lo que hace el SDK - verifique la fuente).

+0

Entonces, ¿es facebook.isSessionValid() la forma correcta de verificar si el usuario está realmente conectado? Porque facebook.isSessionValid() devolvería true, incluso cuando el usuario inició sesión. – harsimranb

+2

No creo que el SDK proporcione una forma de saber cuál es el estado de inicio de sesión del usuario cuando está utilizando SSO. logout() simplemente borra las cookies de su aplicación/webview y anula el accessToken. Y isSessionValid() simplemente comprueba si el accessToken es válido. Entonces, después de que su aplicación cierre la sesión() isSessionValid devolverá false. Pero la aplicación Faceboko todavía está conectada. Entonces, si haces un inicio de sesión con SSO (el valor predeterminado) que se verificará con la aplicación de Facebook, que todavía tiene un accessToken válido, que se devolverá a tu aplicación sin pasar por un usuario iniciar sesión. – Torid

+1

facebook.isSessionValid devuelve verdadero, incluso después de llamar a logout() ... – harsimranb

Cuestiones relacionadas