SDK de Android Facebook: el hash de clave no coincide con ningún hash de clave almacenado al cargar Google Play

Mi aplicación utiliza la API de Facebook para el inicio de sesión de usuario. En el desarrollo funciona bien, pero cuando lo cargué a google play deja de funcionar.

Este es el registro de errores:

12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): Exception during service 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): com.facebook.http.protocol.ApiException: Key hash XXXXXXX does not match any stored key hashes. 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseChecker.b(ApiResponseChecker.java:83) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseChecker.a(ApiResponseChecker.java:162) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponse.g(ApiResponse.java:239) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:272) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:29) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseHandler.a(ApiResponseHandler.java:56) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.ApiResponseHandler.handleResponse(ApiResponseHandler.java:29) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:280) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:141) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.b(FbHttpRequestProcessor.java:103) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:196) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:374) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:151) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.http.protocol.AbstractSingleMethodRunner.a(AbstractSingleMethodRunner.java:18) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.handler.PlatformOperationHandler.c(PlatformOperationHandler.java:367) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.katana.server.handler.PlatformOperationHandler.a(PlatformOperationHandler.java:260) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.fbservice.service.BlueServiceQueue.e(BlueServiceQueue.java:299) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.fbservice.service.BlueServiceQueue.d(BlueServiceQueue.java:53) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.fbservice.service.BlueServiceQueue$3.run(BlueServiceQueue.java:230) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at com.facebook.common.executors.ListenableScheduledFutureImpl.run(ListenableScheduledFutureImpl.java:59) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at android.os.Handler.handleCallback(Handler.java:733) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at android.os.Handler.dispatchMessage(Handler.java:95) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at android.os.Looper.loop(Looper.java:137) 12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): at android.os.HandlerThread.run(HandlerThread.java:61) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): Failed to send 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): com.facebook.fbservice.service.ServiceException: API_ERROR: API_ERROR 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.java:640) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.java:48) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.facebook.fbservice.ops.BlueServiceOperation$2.run(BlueServiceOperation.java:605) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at android.os.Handler.handleCallback(Handler.java:733) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at android.os.Handler.dispatchMessage(Handler.java:95) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at android.os.Looper.loop(Looper.java:137) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at android.app.ActivityThread.main(ActivityThread.java:4998) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at java.lang.reflect.Method.invokeNative(Native Method) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at java.lang.reflect.Method.invoke(Method.java:515) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): at dalvik.system.NativeStart.main(Native Method) 

¿Podría ser que el hash clave ha cambiado de alguna manera?

¿Ha seguido los pasos que facebook proporciona para la creación de una aplicación de inicio de sesión?

Necesitas un keyhash de producción obtenido a partir de tu keystore de liberación:

De la línea de comand:

 keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 

Y agrega esta clave en las opciones de la página de la aplicación de Facebook.

Más información: Documentos de Facebook

Pasé un día entero tratando de averiguar por qué esto no funcionaba …

Al generar la clave hash para la producción, debe usar openssl-0.9.8e_X64.zip en Windows, no puede usar openssl-0.9.8k_X64.zip

Las versiones producen diferentes claves hash, por alguna razón 9.8k no funciona correctamente … 9.8e hace

Referencia

Esto me estaba dando la llave equivocada.

 keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 

Una solución que funcionó para mí fue: 1. Ponga este código en su actividad de lanzamiento

 private void printKeyHash(){ // Add code to print out the key hash try { PackageInfo info = getPackageManager().getPackageInfo( "YOUR_PACKAGE_NAME", 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) { Log.d("KeyHash:", e.toString()); } catch (NoSuchAlgorithmException e) { Log.d("KeyHash:", e.toString()); } } 
  1. Exporte la aplicación para publicar en la tienda de juegos utilizando la .keyStore
  2. Instale la aplicación antes de cargar para reproducir la tienda y ejecútela y observe el keyHash impreso.
  3. Agrega el keyHash a la aplicación de Facebook.

Espero que esto ayude a alguien.

También puede tomar el hash que falta del rastreo de pila de la ApiException: Key hash XXXXXXX does not match any stored key hashes . Ahí lo tienes ya, solo falta el = al final. Así que toma XXXXXXX =.

Esto está funcionando bien para mí

 keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 

Donde <RELEASE_KEY_ALIAS> es su nombre de alias mientras crea la aplicación firmada.

Introduzca aquí la descripción de la imagen

Y <RELEASE_KEY_PATH> es la ubicación en la imagen de abajo Y, a continuación, introduzca la contraseña es clave crear contraseña en la imagen de abajo en lugar de android

Introduzca aquí la descripción de la imagen

Las soluciones anteriores son correctas hasta cierto punto. Pero si alguien todavía se enfrenta a un problema. Elimine la clave del perfil del desarrollador y agréguela de nuevo escribiendo = al final y pulse enter. Usted tiene que agregar la llave en ajustes y revelador.

Tenía problemas con el lanzamiento de aplicaciones en google play y el uso de la tecla de liberación

Verifique el punto no. 9 en Activar inicio de sesión único para su aplicación

Activar inicio de sesión único Active la conexión única para su aplicación configurando Single Sign On en Sí a continuación. SíNo Inicio de sesión único

  • El inicio de sesión de API de Facebook falla con la aplicación FB instalada en el teléfono
  • Analizar con inicio de sesión de Facebook - Posiblemente desde APK v42 o Graph API v2.4
  • La aplicación proxy no puede solicitar permisos de publicación sin haber sido instalados previamente
  • Actividad de Facebook no se carga correctamente en facebook-sdk 4.4.0
  • Facebook Android SDK 4.0.0 no obtener información del perfil
  • Facebook SDK para Android - el primer inicio de sesión es muy lento / lleva mucho tiempo
  • Facebook Android SDK 3.0, cómo compartir contenido sin el LoginButton
  • Facebook SDK importar en Android Studio y añadirlo en mi aplicación
  • android - cómo cambiar el texto en facebook botón de inicio de sesión
  • "Argumento 'contexto' no puede ser nulo"
  • Login de Android Facebook "LoginActivity could not be started"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.