with tutorial studio que example android facebook session sdk logout

tutorial - Android SDK de Facebook: compruebe si el usuario está conectado o no



que es sdk de facebook (9)

Tengo una función en mi aplicación de Android donde el usuario autoriza la aplicación y comparte un enlace.

También tengo que dar una opción para que el usuario cierre la sesión de Facebook y necesito deshabilitar este botón de forma condicional si el usuario no está registrado en la aplicación int (o no la ha autorizado).

Parece que no puedo encontrar la llamada API en el SDK de Android que me permitiría preguntarle a FB si el usuario está conectado o no.

Lo que he encontrado es getAccessExpires() :

Recupere el tiempo de caducidad de la sesión actual (en milisegundos desde época Unix), o 0 si la sesión no caduca o no existe.

¿Comprobará si la sesión es igual a 0 será el camino a seguir? ¿O hay algo que me falta?


@diljeet tenía razón. https://.com/a/29375963/859330

Además, use

return AccessToken.getAccessToken() != null && Profile.getCurrentProfile()!=null;

Siempre funciona de esta manera.


Android Studio con:

compile ''com.facebook.android:facebook-android-sdk:4.0.1''

luego, compruebe el inicio de sesión como:

private void facebookPost() { //check login AccessToken accessToken = AccessToken.getCurrentAccessToken(); if (accessToken == null) { Log.d(TAG, ">>>" + "Signed Out"); } else { Log.d(TAG, ">>>" + "Signed In"); } }


Esto parece estar funcionando bastante bien con el nuevo SDK.

private boolean isFacebookLoggedIn(){ Session session = Session.getActiveSession(); if (session != null) { //Session can be open, check for valid token if (!session.isClosed()) { if(!session.getAccessToken().equalsIgnoreCase("")){ return true; } } } return false; }


Las versiones de Facebook SDK 4.x tienen un método diferente ahora:

boolean loggedIn = AccessToken.getCurrentAccessToken() != null;

o

mediante el uso de funciones

boolean loggedIn; //... loggedIn = isFacebookLoggedIn(); //... public boolean isFacebookLoggedIn(){ return AccessToken.getCurrentAccessToken() != null; }

Consulte este enlace para obtener una mejor referencia https://developers.facebook.com/docs/facebook-login/android marque este encabezado también " Acceso a tokens y perfiles " dice "Puede ver si una persona ya ha iniciado sesión marcando AccessToken. getCurrentAccessToken () y Profile.getCurrentProfile ()


Luché para encontrar una respuesta simple a esto en los documentos de FB. Utilizando la versión 3.0 del SDK de Facebook, creo que hay dos formas de verificar si un usuario está conectado.

1) Use Session.isOpened()

Para utilizar este método, necesita recuperar la sesión activa con getActiveSession() y luego (aquí está la parte confusa) descifrar si la sesión está en un estado donde el usuario está conectado o no. Creo que lo único que importa para un usuario conectado es si la sesión es isOpened() . Por lo tanto, si la sesión no es null y está abierta, entonces el usuario inicia sesión. En todos los demás casos, el usuario está desconectado (tenga en cuenta que Session puede tener estados distintos a los abiertos y cerrados).

public boolean isLoggedIn() { Session session = Session.getActiveSession(); return (session != null && session.isOpened()); }

Hay otra forma de escribir esta función, detallada en esta answer , pero no estoy seguro de qué enfoque es más claro o "mejor práctica".

2) Monitorear constantemente los cambios de estado con Session.StatusCallback y UiLifecycleHelper

Si sigue este tutorial , configurará UiLifecycleHelper y registrará un objeto Session.StatusCallback con la UiLifecycleHelper de instancias. Hay un método de devolución de llamada, call() , que anula en Session.StatusCallback que supuestamente se llamará cada vez que el usuario inicie sesión o se desconecte. Dentro de ese método, quizás pueda hacer un seguimiento de si el usuario está conectado o no. Tal vez algo como esto:

private boolean isLoggedIn = false; // by default assume not logged in private Session.StatusCallback callback = new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (state.isOpened()) { //note: I think session.isOpened() is the same isLoggedIn = true; } else if (state.isClosed()) { isLoggedIn = false; } } }; public boolean isLoggedIn() { return isLoggedIn; }

Creo que el método 1 es más simple y, probablemente, la mejor opción.

Como nota al margen puede alguien arrojar luz sobre por qué el tutorial le gusta llamar a state.isOpened() lugar de session.isOpened() ya que ambos parecen intercambiables ( session.isOpened() parece llamar a través de la versión de state todos modos) .


Para Facebook Android SDK 4.x, debe utilizar "AccessToken.getCurrentAccessToken ()", tal como lo dijo @Diljeet pero su cheque no funcionó, finalmente lo comprobé haciendo:

Actividad "onCreate":

facebookAccessToken = AccessToken.getCurrentAccessToken();

Para comprobar si la sesión todavía está activa (lo hice en el método "onResume" pero lo hago donde lo necesite):

if(facebookAccessToken != null){ sessionExpired = facebookAccessToken.isExpired(); }else{ sessionExpired = true; }

Más información en https://developers.facebook.com/docs/facebook-login/android


Tuve el mismo problema. Aquí está mi solución usando SDK 4.0:

En primer lugar, en su actividad relacionada con la verificación de inicio de sesión, asegúrese de llamar a este principal:

FacebookSdk.sdkInitialize(this.getApplicationContext());

En su método onCreate, ponga esto:

updateWithToken(AccessToken.getCurrentAccessToken()); new AccessTokenTracker() { @Override protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) { updateWithToken(newAccessToken, handler); } };

A continuación, agregue el método llamado:

private void updateWithToken(AccessToken currentAccessToken) { if (currentAccessToken != null) { fillUIWithFacebookInfos(handler); } else { login(); } }

De esta forma se manejará el usuario que ya inició sesión y el usuario recién conectado.


Nota para los lectores: Esto ahora está en desuso en el nuevo FB 3.0 SDK.

facebook.isSessionValid() devuelve verdadero si el usuario está conectado, falso si no.


Session.getActiveSession().isOpened()

devuelve verdadero si el usuario está conectado, falso si no