it-swarm-es.com

Hash de clave inválida integración de Facebook de Android

En una de mis aplicaciones necesito obtener datos de Facebook ... Estoy haciendo esto:

He creado ID de aplicación . Inicia sesión con éxito, pero después de cerrar sesión, inicio sesión y luego me da:

Screenshot of invalid key hash error Facebook

¿Qué es lo que estoy haciendo mal? Sugiera que estoy usando el SDK de Facebook ... He instalado Facebook en mi teléfono ... Esto funciona bien en el emulador que no tiene instalada la aplicación incorporada de Facebook.

Este es mi código:

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.Java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}
167
Android

La clave hash generada es incorrecta. Puede obtener la clave hash usando dos pasos. Uno es a través del comando del sistema. Otro es a través de la codificación. Tecla de hash a través de la instrucción de comando trabajando solo la primera vez. No sé la razón. También tengo el mismo problema. Así que lo probé programáticamente.

Sigue estos pasos:

Pegue el siguiente código en oncreate().

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                "com.example.packagename", 
                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) {

}

Modifique "com.example.packagename" con el nombre de su paquete en la codificación anterior sin fallar (puede encontrar el nombre de su paquete en el archivo de manifiesto de Android).

Ejecute su aplicación. Vaya a la actividad donde pegó el código anterior. En la búsqueda logcat para "KeyHash". Puedes encontrar un hash clave. Copia el hash clave y ve a la página del panel de la aplicación de Facebook. Vaya a la configuración e ingrese los detalles como en la imagen de abajo.

enter image description here

Una vez que haya terminado el paso anterior. Vuelva a iniciar la aplicación, ahora puede iniciar sesión en el facebook. Para más detalles sobre el hash clave, verifique el enlace

Si agrega una información incorrecta en la página de configuración significa que dará algún error. así que usa la información correcta allí. Y también si el uso público (que no sea usted) de su aplicación significa que necesita habilitar el permission(change "yes" in the "Status & Review" next to setting).

258
Mahendran Sakkarai

Si está utilizando la firma de la aplicación Google Play:

Abra la sección de firma de aplicaciones en Google Play Console , y obtenga SHA1 of certificado de firma de aplicaciones , luego conviértalo a base64 , por ejemplo con esta herramienta: http://tomeko.net/online_tools/hex_to_base64.php?lang=en

 console screenshot

 convert to base64 screenshot

126
Rafal Malek

Si está enfrentando este problema, ponga esta clave en su developer.facebook.com

 enter image description here

Luego asegúrate de que tu aplicación sea live on

developer.facebook.com

Este círculo verde indica que la aplicación está en vivo.

 enter image description here

Si no es así, sigue estos dos pasos para hacer que tu aplicación esté activa.

Paso 1 Vaya a su aplicación -> configuración => y agregue Email de contacto y aplique guardar cambios

Setp 2 Then goto App Review option y asegúrate de que esta opción sea Sí. Agregué una captura de pantalla.

 enter image description here

Nota: Si desea copiar una clave hash, verifique el BlueServiceQueue en Logcat.

108
Arpit Patel

Conseguí el mismo problema. Estaba seguro de que se debía a una falla muy pequeña y sí, lo era. Encontré la solución.

Al generar depurar clave hash en mi computadora, ingresé la contraseña de mi sistema. Pero la contraseña debe ser la siguiente:
Introduzca la contraseña del almacén de claves: "Android"
Este fue el único problema en mi caso.

----- Para generar Depurar clave hash, use este comando -

keytool -exportcert -alias androiddebugkey -keystore ~ ​​/ .Android/debug.keystore | openssl sha1 -binario | openssl base64

Introduzca la contraseña del almacén de claves: 'Android'

----- Para generar Release key hash, use este comando -

keytool -exportcert -alias "alias of keystore" -keystore "Su ruta al almacén de claves al firmar la aplicación" | openssl sha1 -binario | openssl base64

Proporcione su contraseña del almacén de claves después de ejecutar este comando.

70
Akash Bisariya

Experimenté el mismo problema. Hice una breve investigación sobre las posibles razones de este extraño comportamiento y encontré lo siguiente:

  • Durante la primera ejecución de una nueva aplicación de Facebook, permitirá la conexión/inicio de sesión incluso si no especifica ningún hashes clave.

  • Para mí, el tutorial que proporcionó Facebook no generó el hash de clave correcto, porque daba la configuración incorrecta . Al ejecutar:

    keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.Android\debug.keystore | openssl sha1 -binary | openssl
    base64
    

asegúrese de verificar todas las propiedades: la HOMEPATH, la existencia del almacén de claves, etc. Tal vez también tenga que proporcionar la contraseña.

  • Lo que generó la configuración correcta fue la solución sugerida por @Mahendran .

  • Además, si ve el error publicado originalmente ( http://i.stack.imgur.com/58q3v.png ), lo más probable es que el hash de la tecla que ve en la pantalla sea el verdadero. Si nada más funciona, intente ingresarlo en Facebook.

Obtuve todos esos resultados con: Windows 7 edición de 64 bits, Android Studio 1.2.2, JDK 7.

21
Martin Doychev

Según Inicio de sesión de Facebook para Android , debe proporcionar el valor de Key Hash. Para obtenerlo, necesitará la clave utilizada para firmar su solicitud.

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64
12
JP Ventura

¡Probé todo lo anterior y nada ayudó a mi caso con mis clientes! Entonces, mi cliente recordó que tenía la aplicación de Facebook instalada en su dispositivo. Después de que lo retiró, el inicio de sesión funcionó perfectamente. La clave hash ha cambiado y he reemplazado las antiguas claves hash en la Consola de Desarrolladores de Facebook con la clave del error (como se sugirió anteriormente) ¡y funciona! La aplicación de Facebook en sí podría ser el problema, por lo que es mejor que lo resuelva en un dispositivo con la aplicación de Facebook instalada y en un dispositivo con la aplicación de Facebook no instalada y maneje ambos casos.

7
Matan Dahan

Debe crear dos hashes clave, uno para la depuración y otro para la versión.

Para Depurar hash clave:

En OS X, ejecute:

keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64

En Windows, ejecute:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.Android\debug.keystore | openssl sha1 -binary | openssl
base64

Debug key hashes source

Para Liberar hash clave:

En OS X, ejecute: (Reemplace lo que está entre <> con sus valores)

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

En Windows, use: (Reemplace lo que está entre <> con sus valores)

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

Liberar la fuente de hashes clave

6
MBH

Estaba teniendo el mismo problema. Primer inicio de sesión, bien, pero luego, hash de clave no válida.

Aunque este no es un hilo de Unity, encontré mi respuesta aquí. Así que dejaré mi respuesta, en caso de que alguien más (se desvíe como yo) se tropiece con eso.

El SDK de Facebook para Unity recibe el hash de clave incorrecto. Obtiene la clave de "C:\Users \" su usuario ".Android\debug.keystore" y, en un mundo perfecto, debería obtenerla del almacén de claves que creó en su proyecto. Es por eso que te está diciendo que el hash clave no está registrado.

Como lo sugiere Madi , puede seguir los pasos en este enlace para encontrar la clave correcta. Simplemente haga que apunten hacia el almacén de claves dentro de su proyecto, de lo contrario no obtendrá la clave correcta.

Este código le dará su hash para facebook pero debe seguir estos pasos para obtener el hash condidate de liberación. 1. Copia y pega este código en tu mainactivity.

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                "com.example.packagename", 
                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) {

}
  1. generar apk firmado.
  2. conecta tu teléfono a la computadora portátil y asegúrate de que permanezca conectado.
  3. instale y ejecute el apk en su teléfono moviendo manualmente el lanzamiento de lanzamiento a su teléfono.

  4. ahora mire el logcat de Android (use el filtro KeyHash:) debería ver su clave hash de lanzamiento para facebook. simplemente cópielo y péguelo en su https://developers.facebook.com/apps está en la configuración.

  5. ahora puedes probar la aplicación que debería funcionar perfectamente bien.

    buena suerte.

3
abdul jalil

Después de una larga investigación, encontramos una solución.

Teníamos permisos establecidos como:

loginButton.setReadPermissions (correo electrónico público_perfil);

Esto funcionó por primera vez, pero cuando volvimos a iniciar sesión en FB, se produjo el Error de hash no válido.

La solución simple fue cambiar la línea anterior a:

    loginButton.setReadPermissions(Arrays.asList(
            "public_profile", "email"));

¡Y funcionó como una dicha!

Esperemos que esto ayude a alguien.

Facebook debería devolver la excepción correcta en lugar del error de la clave de hash no válida.

2
user3663906

pega el siguiente código en tu Método OnCreate

try {
    PackageInfo info = getPackageManager().getPackageInfo(
            "com.example.packagename", 
            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();
}

Solo modifique el nombre del paquete. Luego vaya a su registro y seleccione Búsqueda de depuración aquí y encontrará la clave de hash. Ahora copie esta clave hash y luego vaya al sitio developer.facebook.app_id luego edite su clave hash y luego presione guardar. Ahora ejecuta tu proyecto de Android de nuevo, creo que el problema se resolverá.

1
pavel_coder

Después de tantas pruebas encontré una solución a esto. Generé y agregué las claves de depuración y de lanzamiento a la consola de desarrollador de Facebook y aún recibo el error.

La única solución que funcionó para mí fue desinstalar el programa OpenSSL de google y descargar desde http://slproweb.com/products/Win32OpenSSL.html

Realmente funciona como magia

1
Uchenna Nnodim

Así es como resolví este problema.

Primero, tienes que obtener el valor SHA-1. Para eso, hay dos formas.
-> Para obtener el valor SHA-1 en Android Studio.

  1. Haga clic en Gradle
  2. Haga clic en Informe de firma
  3. Copiar valor SHA-1

O -> Para obtener el valor SHA-1 de - keystore file.

keytool -list -v -keystore keystore_file_name.jks -alias key0

Copie el valor SHA1 en su portapapeles como este CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

y abra http://tomeko.net/online_tools/hex_to_base64.php para convertir su valor SHA1 a base64.
Esto es lo que requiere Facebook
obtenga el hash generado "******************** =" y copie el hash de la clave en la aplicación de Facebook.

1
Sajid Zeb

Si está escribiendo el keyhash manualmente (por ejemplo, desde Mobile a Facebook Dashboard), asegúrese de diferenciar entre la pequeña L y la I mayúscula.

1
Kashif Nazar

Tuve el mismo problema cuando estaba depurando mi aplicación. He vuelto a escribir el hash que has tachado en la imagen adjunta (la que Facebook dice que no es válida) y lo agregué en la consola de desarrolladores de Facebook a hashes clave. Sólo ten cuidado con los errores tipográficos.

Esta solución se parece más a una solución sencilla que a una solución adecuada.

1
Piotr Sagalara

Esto puede ayudar a alguien con el mismo problema

  1. Generar hash clave utilizando el siguiente código

keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64

cómo utilizar keytool

2. Péguelo en el campo requerido en desarrollador de Facebook

3.En Android studio Archivo-> Estructura del proyecto  enter image description here

añadir parámetros de firma

4.Seleccionar sabores  enter image description here

seleccionamos la configuración de firma que creamos

5. Seleccione el tipo de compilación  enter image description here

6. Seleccione la variante de compilación y constrúyala.

 enter image description here

1
CLIFFORD P Y

Tenía el mismo problema. Asegúrate de construir la APK con el mismo dispositivo que generó la clave hash que está almacenada en la sección de desarrolladores de Facebook.

0
genericname

Arreglo esto agregando lo siguiente en MainApplication.onCreate:

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

Luego subí esto a la consola de desarrolladores de Google y luego descargué derivado APK que, por cualquier razón, tiene un hash clave totalmente diferente.

Luego utilicé logcat para determinar el nuevo hash de clave y lo agregué a Facebook como lo han descrito otros usuarios.

0
Michael

Lo que Facebook utiliza no es la contraseña y el alias predeterminados para la depuración. Necesitas cambiarlo siguiendo y funcionará.

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64

Si no ha cambiado nada con la contraseña predeterminada, debe ser Android. También puedes configurarlo en el archivo build.gradle. Pero se debe usar la misma contraseña de alias para generar hash.

Android{
    signingConfigs {
        release {
            storeFile file("~/.Android/debug.keystore")
            storePassword "Android"
            keyAlias "androiddebugkey"
            keyPassword "Android"
        }
    }
}
0
abhi shukla
try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "www.icognix.infomedia",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("YourKeyHash :", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
0
ZafarHussain

Chicos aquí hay muchas respuestas correctas. Sólo una cosa. Pegue el hash recibido en Aplicación -> Configuración -> Principal no a través del tutorial de inicio rápido.

0
Chuck

Esto funcionó para mí.

Copie el APK en su PC en la carpeta Archivos de programa\Java\jdkX.X.X_XXX\bin

En mi caso es C:\Archivos de programa\Java\jdk1.8.0_191\bin

Abra CMD en este directorio y escriba lo siguiente

keytool -list -printcert -jarfile YOUR_APK_NAME.apk

Copie el valor SHA1 en su portapapeles. Será algo así: 79:D0:E6:80:4E:28:1E:D1:88:28:CB:D7:E6:BE:2E:0C:FB:24:98:52

Luego vaya a http://tomeko.net/online_tools/hex_to_base64.php para convertir su valor SHA1 a base64.

Esto es lo que requiere Facebook para obtener el hash generado "******************** =" y copiar el hash clave en la configuración de la aplicación de los desarrolladores de Facebook.

0
Muhammad Ovi