El inicio de sesión de Android facebook no funciona con la aplicación de Facebook instalada

He configurado el inicio de sesión simple de Facebook. Para Android 2.3.6 todo funciona como debería, el usuario obtiene un diálogo de inicio de sesión, ingresa datos y la aplicación continúa. Pensé que era fallas de las versiones de Android, pero descubre que el inicio de sesión no funciona cuando hay aplicación de facebook instalado en el teléfono!

Probado esto en: Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 Emulador de Android 4.1.2

¡Incluso las muestras de Facebook no funcionan!

Cada vez que se ejecuta la aplicación: else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); } else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }

Parece que la sesión no se abre, pero ¿por qué? Seguimos esta guía – https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Código:

 Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(final Session session, SessionState state, Exception exception) { if (session.isOpened()) { Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user != null) { Log.d("Access_token", session.getAccessToken()); } } }); } else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); } } }); 

Echa un vistazo a la parte inferior del paso 4: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

Si no has introducido correctamente el hash de la clave de la aplicación, el inicio de sesión de Facebook a través de la ventana emergente de WebView (si la aplicación no está instalada) seguirá funcionando, pero el acceso a través de la aplicación nativa de Facebook no lo hará.

Debería ver esta excepción en LogCat:

 com.facebook.http.protocol.ApiException: remote_app_id does not match stored id 

El SDK de Facebook imprime sus excepciones, así que fíjese allí de todos modos si hay otros problemas.

Estoy escribiendo esta respuesta para aquellos que están usando Facebook SDK 4.X

Puede abrir el portal de inicio de sesión de Facebook en cualquiera de las dos formas siguientes:

  1. Si usted tiene un dispositivo Android 1.9.X con Android 1.9.X y Facebook App está instalado en el dispositivo llamado Método de Native Login aquí, no es necesario utilizar facebook WebView

  2. Si no ha instalado la Facebook App en su dispositivo Android, entonces es bueno usar WebView

Por lo que para este Facebook proporcionar 3 Constants

  1. NATIVE_ONLY (utilizado cuando se desea abrir solo en la aplicación de Facebook)
  2. WEB_ONLY (utilizado cuando sólo se desea abrir en WebView )
  3. NATIVE_WITH_FALLBACK (Recommended Facebook detect y opne webView si la aplicación no está instalada)

Consulte el siguiente enlace para más detalles https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting

  LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK); LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY); LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY); 

Parece que no pude obtener los datos si tuviera una sesión de facebook activa (desde la aplicación de facebook).

Así que antes de abrir la sesión, estoy pidiendo la fuerza de inicio de sesión, incluso si el usuario tiene abierta la sesión de facebook desde la aplicación de facebook.

 openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 

Así que ahora todo funciona, pero el usuario tiene que introducir los datos manualmente. No es ideal, pero funciona.

Incluso las muestras de Facebook no funcionaban para mí con la aplicación de Facebook abierta.

Si alguien tiene una mejor solución, no dude en sugerir.

Obtener clave hash utilizando esta función para ambos (depurar y liberar apk) y ponerlo en su aplicación en developer.facebook.com/apps

 private void calculateHashKey(String yourPackageName) { try { PackageInfo info = getPackageManager().getPackageInfo( yourPackageName, 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) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } 

Esto me ayuda mucho .. Espero que esto te ayude también ..

Si la clave hash no se genera correctamente, entonces puede enfrentar problemas como

Aparece un cuadro de diálogo de inicio de sesión nativo, pero después de aceptar los permisos se despliega y no ocurre nada en log cat

Sin embargo, el inicio de sesión y el recurso compartido funcionarán correctamente si la aplicación nativa del dispositivo está deshabilitada (el cuadro de diálogo de inicio de sesión se abre en la vista web en este caso y no se requiere la clave de hash adecuada)

Yo estaba enfrentando el mismo problema y resolvió este mediante la obtención de clave hash con este código. La clave de hash era diferente a la generada mediante openSSl y keytool

Y después de actualizar esta clave hash en la aplicación de Facebook todo funciona bien

 //================================== To Get Facebook Hash key Programmatically =========================// PackageInfo info; try { info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md; md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String something = new String(Base64.encode(md.digest(), 0)); //String something = new String(Base64.encodeBytes(md.digest())); Log.e("hash key", something); } } catch (NameNotFoundException e1) { Log.e("name not found", e1.toString()); } catch (NoSuchAlgorithmException e) { Log.e("no such an algorithm", e.toString()); } catch (Exception e) { Log.e("exception", e.toString()); } 

Simplemente cambie el nombre del paquete y obtenga la clave de hash adecuada

Introduzca aquí la descripción de la imagen

Deshabilitar SAndbox Mode … Esto permitirá que tu aplicación se ejecute en todos los dispositivos. Pruebe esta solución

  • Subir imagen a facebook desde la unidad
  • No hacer fb como postId que acabo de compartir con éxito
  • Com.facebook.widget.loginbutton error en xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.