No se puede reloginar con las credenciales de Facebook después de cerrar la sesión

Tengo una aplicación de Android que permite a los usuarios iniciar sesión con sus credenciales de Facebook. Una vez que se desconecten por primera vez, no pueden iniciar sesión nuevamente. Después de borrar el permiso de la aplicación de la página de Aplicaciones en la configuración de usuario en el sitio web de Facebook, iniciar sesión funciona correctamente.

Utilizo un LoginButton para iniciar sesión.

Las actividades que necesitan poder acceder a la información de inicio de sesión, amplían esta actividad AuthActivity .

 public class AuthActivity extends Activity { private AuthUtils authUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); authUtils = new AuthUtils(this); authUtils.onCreate(savedInstanceState); } public AuthUtils getAuthUtils() { return authUtils; } @Override public void onStart() { super.onStart(); authUtils.onStart(); } @Override public void onStop() { super.onStop(); authUtils.onStop(); } @Override public void onResume() { super.onResume(); authUtils.onResume(); } @Override public void onPause() { super.onPause(); authUtils.onPause(); } @Override public void onDestroy() { super.onDestroy(); authUtils.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); authUtils.onSaveInstanceState(outState); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); authUtils.onActivityResult(requestCode, resultCode, data); } } 

AuthUtils tienen este aspecto. He eliminado todas las cosas relacionadas con el inicio de sesión de Google+ y todo lo que no tiene nada que ver con el proceso de inicio de sesión, como guardar la información del usuario con mis preferencias de aplicación.

 public class AuthUtils implements ConnectionCallbacks, OnConnectionFailedListener { private final Activity activityContext; private UiLifecycleHelper facebookUiHelper; public AuthUtils(Activity context) { this.activityContext = context; facebookUiHelper = new UiLifecycleHelper(context, facebookStatusCallback); } public void signInFacebook() { LoginButton facebookLoginButton = new LoginButton(activityContext); facebookLoginButton.setReadPermissions(Arrays.asList("email")); facebookLoginButton.performClick(); } public void signOutFacebook() { Session facebookSession = Session.getActiveSession(); if(facebookSession != null) { facebookSession.closeAndClearTokenInformation(); } } private StatusCallback facebookStatusCallback = new StatusCallback() { @Override public void call(final Session session, SessionState state, Exception exception) { if(state.isOpened()) { Request.newMeRequest(session, new GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { String email = ""; if(user.asMap().containsKey("email")) { email = user.getProperty("email").toString(); } else { // ... not related to login } // Some actions here, not related to login. } }); } else if(state.isClosed()) { // ... not related to login } } }; public void onCreate(Bundle savedInstanceState) { facebookUiHelper.onCreate(savedInstanceState); } public void onResume() { facebookUiHelper.onResume(); } public void onPause() { facebookUiHelper.onPause(); } public void onDestroy() { facebookUiHelper.onDestroy(); } public void onSaveInstanceState(Bundle outState) { facebookUiHelper.onSaveInstanceState(outState); } public void onActivityResult(int requestCode, int resultCode, Intent data) { facebookUiHelper.onActivityResult(requestCode, resultCode, data); } } 

Tuve el mismo problema, incluso al ejecutar las aplicaciones de ejemplo de Facebook. Resolví esto proporcionando mi clave de firma predeterminada a Facebook: tanto en mi configuración de desarrollador para las aplicaciones de ejemplo en https://developers.facebook.com/settings/developer/sample-app/, como en la configuración de aplicaciones de la plataforma Android .

Facebook sugiere una forma fácil de obtener su clave predeterminada que se puede encontrar en Solución de problemas en https://developers.facebook.com/docs/android/getting-started . El código para hacerlo al ejecutar la aplicación de ejemplo Hello Facebook se proporciona a continuación.

 try { PackageInfo info = getPackageManager().getPackageInfo( "com.facebook.samples.hellofacebook", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } 

Nota: cuando publicas aplicaciones, no deberías usar la clave predeterminada y generar y firmar aplicaciones con las tuyas propias.

  • AndroidStudio emulator "no se ejecutará a menos que actualice Google Play Services"
  • ¿Cómo implementar la videoconferencia de conferencia telefónica de 3 vías con WebRTC Native Code para Android?
  • Obtener SharedPreferences de un servicio
  • Manera más eficiente de pausar el bucle deseado
  • ¿Cuál es el objetivo de establecer el tamaño mínimo del montón en una aplicación para Android?
  • La lectura de cadena gzip en sqlite3 base de datos (python escribir, Java Android leer)
  • Asynchronous socket I / O en Android
  • ¿Cómo crear un objeto con JNI?
  • Introducción a DropboxAPI, clase no encontrada
  • Cambiar el idioma del emulador de Android en Android 6.0 y 7.0
  • ¿Puedo borrar la parte o el contenido de una imagen que se carga desde la tarjeta SD al lienzo o DrawView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.