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
- Token AccessToken: ACCESS_TOKEN_REMOVED en Facebook SDK de Android
- Facebook SDK: ApiException: La aplicación proxy no puede solicitar permisos de publicación sin haber sido instalados previamente
- Compartir un anuncio de pared por facebook android sdk
- iOS \ Android Facebook SDK - obtener lista de amigos, algunos sin nombre de usuario
- incapaz de escribir jarlist caché archivo Facebook SDK en Android
¡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"); } } });
- Salir de google y facebook en la aplicación Android
- SDK de Android de Facebook y java.lang.NullPointerException
- Importe facebook SDK al proyecto cordova / phonegap
- Facebook SDK 3.5 Iniciar sesión a través de la aplicación no funciona
- Java.lang.IllegalStateException: Orca SharedPreferences utilizado antes de inicializado
- Apache Cordova Facebook Plugin falla en Init - Android
- Android Studio 0.5.0 reconstrucción no funciona con Proguard
- Facebook Key Hash para el lanzamiento de Play Store
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:
-
Si usted tiene un dispositivo
Android 1.9.X
conAndroid 1.9.X
yFacebook App
está instalado en el dispositivo llamado Método deNative Login
aquí, no es necesario utilizar facebookWebView
-
Si no ha instalado la
Facebook App
en su dispositivo Android, entonces es bueno usarWebView
Por lo que para este Facebook proporcionar 3 Constants
-
NATIVE_ONLY
(utilizado cuando se desea abrir solo en la aplicación de Facebook) -
WEB_ONLY
(utilizado cuando sólo se desea abrir enWebView
) -
NATIVE_WITH_FALLBACK
(Recommended Facebook detect y opnewebView
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
Deshabilitar SAndbox Mode … Esto permitirá que tu aplicación se ejecute en todos los dispositivos. Pruebe esta solución
- Error de Android Studio: org.gradle.process.internal.ExecException
- El cambio de orientación del dispositivo multiusuario de los servicios de juegos de Google Play expulsa al usuario de la habitación