Recientemente, Facebook lanzó SDK 4 con actualizaciones nuevas y geniales. Traté de cambiar a SDK4 para usar nuevas funciones, sin embargo, tengo problemas con la función de inicio de sesión de Facebook.
Hasta ahora, para cerrar la sesión de Facebook programáticamente, usé:
Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();
Pero parece que SDK4 ya no es compatible con Session, y en los documentos oficiales mencionan:
Hay dos formas de implementar el inicio de sesión de Facebook en Android:
Clase LoginButton: que proporciona un botón que puede agregar a su interfaz de usuario. Sigue el token de acceso actual y puede iniciar y cerrar sesión de personas.
Bueno, parece que no hay forma de cerrar la sesión de Facebook mediante programación, excepto usando el botón de inicio de sesión. Alguien tiene alguna idea, por favor compártala aquí.
apilamiento
Puedes usar LoginManager.getInstance().logOut();
incluso si usa LoginButton porque
Este elemento de la interfaz de usuario envuelve la funcionalidad disponible en LoginManager.
EDITAR:
Solo para mencionar que esto funciona para SDK de Facebook v4. No sé si lo cambiarán en el futuro.
@como menciona batoutofhell, no olvides poner FacebookSdk.sdkInitialize(getApplicationContext());
para inicializar el sdk de facebook. Por favor mira aquí por los detalles
-
Quiero mencionar que, dado que este es el resultado principal de Google, mi aplicación se bloqueó al intentar cerrar sesión hasta que agregué esta línea primero: FacebookSdk.sdkInitialize(this.getApplicationContext()); LoginManager.getInstance().logOut();
– Murcielago del infierno
26 mayo 2015 a las 16:18
-
Después de cerrar sesión, no me permite iniciar sesión nuevamente. ¿Hay alguna forma de volver a iniciar sesión después de que hice LoginManager.getInstance().logOut();
– AndroidDev
3 de agosto de 2015 a las 10:22
-
¿Por qué deberíamos llamar a FacebookSdk.sdkInitialize, ya que ya se ha inicializado en onCreate?
– CoolMind
23 de enero de 2017 a las 15:39
-
LoginManager.logOut() utilicé esto, funciona correctamente
– Érum
7 de marzo de 2017 a las 5:01
-
@Erum No existe tal método
LoginManager.logOut()
a partir de ahora en FB SDK v4.23.0– Gema
22 de julio de 2017 a las 17:45
SDK4, si desea desvincularse por completo, asegúrese de eliminar también la aplicación de la cuenta de Facebook del usuario. Este método desconecta al usuario por completo:
public void disconnectFromFacebook() {
if (AccessToken.getCurrentAccessToken() == null) {
return; // already logged out
}
new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
LoginManager.getInstance().logOut();
}
}).executeAsync();
}
-
¡Esto es exactamente lo que quería!
– Faja_KP
14 de enero de 2016 a las 14:46
-
¿Eso significa que debo eliminar la aplicación de Facebook y el mensaje de Facebook para completar el cierre de sesión de mi aplicación?
– mdtuyen
25 de enero de 2016 a las 2:34
-
Esta respuesta asegura que el usuario haya cerrado sesión por completo. Solo para estar al 100%, es necesario incluir FacebookSdk.sdkInitialize(getApplicationContext());
– Sandro Wiggers
25 de agosto de 2016 a las 2:59
-
En la devolución de llamada también agregué @Override public void onCompleted(GraphResponse graphResponse) { AccessToken.setCurrentAccessToken(null); LoginManager.getInstance().logOut(); }
– Sandro Wiggers
25 de agosto de 2016 a las 3:07
-
Creo que @voghDev onCompleted no vuelve al hilo de la interfaz de usuario, por lo que no lo bloquea cuando llama a LogOut allí.
– franco
28 de diciembre de 2016 a las 9:46
chris pan
Puedes usar LoginManager.logOut()
Verificar https://developers.facebook.com/docs/reference/android/current/class/LoginManager/
-
Eso funciona si está utilizando LoginManager. ¿Hay alguna forma de cerrar la sesión mediante programación cuando se usa el botón de inicio de sesión?
– Chamuscado
02/04/2015 a las 12:30
-
También quiero saber cómo podemos cerrar sesión cuando usamos LoginButton
– sarath
22 de abril de 2015 a las 7:07
-
solo use el botón de inicio de sesión, haga clic en él nuevamente y luego se cerrará la sesión
– Ser Jk
4 de mayo de 2016 a las 7:35
ritesh jaja
Puede cerrar la sesión utilizando LoginManager, pero también debe utilizar la solicitud de gráficos. Estoy hablando de cerrar sesión por completo para que la próxima vez pueda iniciar sesión con una cuenta diferente.
new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
.Callback() {
@Override
public void onCompleted(GraphResponse graphResponse) {
SharedPreferences pref = DashBoard.this.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.clear();
editor.commit();
LoginManager.getInstance().logOut();
Intent logoutint = new Intent(DashBoard.this,MainActivity.class);
logoutint.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(logoutint);
}
}).executeAsync();
Con la ayuda de las preferencias compartidas aquí, puede cerrar la sesión por completo y la próxima vez puede iniciar sesión con una cuenta diferente.
-
Hola Stevie, cuando llamé al método logOut () como mencionaste en tu respuesta, me dio el error “java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 pero está llamando desde el usuario 0;”. Me pide que agregue un permiso en el archivo de manifiesto. ¿Cómo puedo resolverlo porque no quiero dar este permiso, ya que el cierre de sesión debería ser un procedimiento normal?
– Kapil
8 de junio de 2015 a las 12:26
-
@Aditya Solo necesita el permiso de Internet para la aplicación.
<uses-permission android:name="android.permission.INTERNET" />
– huella
9 de junio de 2015 a las 11:29
-
Pero recibo el error anterior, si no lo agrego. Si es posible, ¿puede compartir una muestra de Facebook que tenga un botón de inicio de sesión personalizado y un botón de cierre de sesión personalizado?
– Kapil
9 de junio de 2015 a las 11:55
-
@Aditya en este ejemplo, estoy usando el botón de inicio de sesión de Facebook
– huella
9 de junio de 2015 a las 12:15
versión franca kotlin:
fun disconnectFromFacebook() {
if (AccessToken.getCurrentAccessToken() == null) {
return // already logged out
}
GraphRequest(
AccessToken.getCurrentAccessToken(),
"/me/permissions/",
null,
HttpMethod.DELETE,
GraphRequest.Callback {
LoginManager.getInstance().logOut()
}).executeAsync()
}