Integración de Android en Facebook con hash de clave inválida

194

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

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

Captura de pantalla del error de hash de clave inválida Facebook

¿Qué está haciendo mal? Estoy usando el SDK de Facebook ... He instalado Facebook en mi teléfono ... Funciona bien dentro de un emulador, pero eso no tiene instalada la aplicación de Facebook incorporada.

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");
}
Androide
fuente
12
pero funciona bien por primera vez, no funciona si inicio sesión después de cerrar sesión
Android
1
sí, lo he creado usando try {PackageInfo info = getPackageManager (). getPackageInfo ("com.facebook.samples.hellofacebook", PackageManager.GET_SIGNATURES); para (Firma de firma: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); }
Android
1
He resuelto este problema aquí! Aquí entendido genial! [ Stackoverflow.com/questions/5306009/… ] [1]
Madi
3
@Android Aunque esto es viejo, debo mencionar esto. Esto no sucede cuando un usuario cierra sesión y luego inicia sesión. Esto sucede cuando depura la segunda vez, es decir, reinstala la aplicación durante la depuración. Por lo tanto, el hash cambia. Esto no sucede en el caso de una aplicación firmada (producción lista)
Nilay Vishwakarma
1
¿Obtiene el mismo error si desinstala la aplicación de Facebook? Probé desde dos teléfonos y este error solo ocurre cuando la aplicación de Facebook está instalada.
Jaime Montoya

Respuestas:

274

La clave hash generada es incorrecta. Puede obtener la clave hash utilizando dos pasos.

Uno es a través de un símbolo del sistema. Otro es a través de la codificación. La clave hash a través de un símbolo del sistema funciona solo la primera vez. No se el motivo. También tengo el mismo problema. Así que lo probé mediante programación.

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 falta (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 el archivo LogCat, busque "KeyHash". Puede encontrar un hash clave. Copie el hash clave y vaya a la página del panel de la aplicación de Facebook. Vaya a configuración e ingrese los detalles como en la imagen a continuación.

Ingrese la descripción de la imagen aquí

Una vez que haya completado el paso anterior, vuelva a iniciar la aplicación. Ahora puede iniciar sesión en Facebook. Para obtener más detalles sobre el hash clave, consulte el enlace .

Si agrega 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 público (aparte de usted) necesita usar su aplicación significa que debe habilitar el permiso (cambie "sí" en "Estado y revisión" al lado de la configuración) .

Mahendran Sakkarai
fuente
20
De esta manera, lo más probable es que tenga un hash de clave para el almacén de claves de depuración. Funciona para usted en modo de desarrollo, no necesariamente funciona para su modo de producción. Al menos, no funciona para mi aplicación de producción.
Liangjun
3
gracias me ahorraste mucho tiempo ... el documento oficial de Facebook no debería leerlo es una mierda
DjP
Muchas gracias amigo!
KinGPinG
Hola por este código PackageInfo info = getPackageManager (). GetPackageInfo ("com.example.packagename", PackageManager.GET_SIGNATURES); para (Firma de firma: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); se envía una clave hash diferente mientras que cuando ejecuté el comando en cmd en Windows mi clave hash era diferente y la agregué en FB, pero aún así el registro muestra el hash del código programático
Sagar Devanga
1
Me ahorro mucho tiempo. Aún el mejor. Verifique en detalle el keyhash y cópielo y péguelo en la página de desarrolladores de Facebook. ¡No cometas el error de escribirlo manualmente! Además, comprenda que keyhash cambia cada vez que desinstala e instala la aplicación.
sanjeev
188

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

Abra la sección de firma de la aplicación en Google Play Console y obtenga el hash SHA-1 en el certificado de firma de la aplicación . Luego conviértalo a Base64 , por ejemplo con esta herramienta: Hexadecimal -> decodificador de cadena base64

Captura de pantalla de la consola

Convertir a Base64 captura de pantalla

Rafal Malek
fuente
14
¡Señor! ¡eres un salvavidas! Mucho amor. Estaba usando la firma de Play Store mientras colocaba los hash de mis claves de lanzamiento locales en la consola de Facebook.
Taha Rushain
44
Me salvas la vida, estoy usando reaccionar, nadie mencionó sobre la firma de aplicaciones de Play Store
TomSawyer
77
¡Gracias! ¡Funciona! También puede usar el comando de terminal para ello: echo YOUR_SHA1_CERTIFICATE_COPIED_FROM_GOOGLE_PLAY | sed s/\://g | xxd -r -p | base64
Yuriy Seredyuk
44
¡Esto es lo que hay que hacer para el entorno de producción! ¡Pulgares hacia arriba!
Bikey
Exactamente lo que quería saber. Hashkey cambia de depuración cada vez que desinstala e instala la aplicación. ¡Para apk firmado, esta es la mejor solución! Usted hace la vida más fácil gracias!
sanjeev
123

Si enfrenta este problema, coloque esta clave en su developer.facebook.com :

Ingrese la descripción de la imagen aquí

Luego, asegúrese de que su aplicación esté activa en developer.facebook.com .

Este círculo verde indica que la aplicación está activa:

Ingrese la descripción de la imagen aquí

Si no es así, siga estos dos pasos para hacer que su aplicación esté activa:

Paso 1 Vaya a su aplicación → configuraciónagregar correo electrónico de contacto y aplique Guardar cambios.

Paso 2 Vaya a la opción Revisión de la aplicación y asegúrese de que esta opción sea . Agregué una captura de pantalla:

Ingrese la descripción de la imagen aquí

Nota: Si desea copiar el hashkey, verifique BlueServiceQueue en LogCat .

Arpit Patel
fuente
55
¿Hay una manera fácil de copiar ese hash desde el teléfono?
Daniel Shatz
44
@DanielShatz aparece en logcat. Lo descubrí solo después de copiarlo letra por letra.
Alaa M.
44
@DanielShatz Busque la etiqueta BlueServiceQueueen logcat
Alaa M.
44
Esta respuesta funcionó para mí. Después de algunos intentos de escribir hash manualmente, me dio el mismo error, el problema fue que escribí mayúscula i "I" en lugar de minúscula L "l". Me tomó un tiempo darme cuenta de esto.
Markus
1
Esto está funcionando, pero me pregunto de dónde sacará FB esta clave hash. Nadie se pregunta? El error mostraba la clave hash que funcionaba bien, pero incluso con todos los comandos, o al obtener sha1 a base64 desde la firma de la aplicación de Google me dio la clave que FB mostró en el error ... Gracias por el truco de todos modos
Umar3x
82

Tengo el mismo problema. Estaba seguro de que se debió a una falla muy pequeña y sí lo fue.

Encontré la solución:

Al generar la clave hash de depuración en mi computadora, ingresé la contraseña de mi sistema. Pero la contraseña debe ser la siguiente:

Ingrese la contraseña del almacén de claves: "Android". Este fue el único problema en mi caso.

----- Para generar el hash de la clave de depuración , use este comando -

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

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

----- Para generar el hash de la tecla Release , use este comando:

keytool -exportcert -alias "alias of keystore" -keystore "Your path to the keystore when signing app" | openssl sha1 -binary | openssl base64

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

Akash Bisariya
fuente
55
usando "android" ya que la contraseña me funciona. Esto es desconcertante.
adbie
3
use este "android" como contraseña cuando genere una clave hash.
Akash Bisariya
2
en la máquina de Windows, asegúrese de que la variable de ruta esté configurada correctamente para las carpetas openssl \ bin y java .. \ bin. También configure la variable HOMEPATH para poder usar comandos de Facebook.
KawaiKx
1
Al menos en Mac tuve que instalar Java JDK para que esto funcione. De lo contrario, el comando de depuración anterior aún genera un hash, pero el hash no funciona y no se le solicitará una contraseña. Con JDK instalado, esto funcionó a las mil maravillas.
lejonl
1
esta respuesta debería ser la RESPUESTA CORRECTA
Evan Ngo
20

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 hash clave.

  • Para mí, el tutorial que proporcionó Facebook no generó el hash de clave correcto, porque estaba dando 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 HOMEPATHexistencia del almacén de claves, etc. Quizás también tenga que proporcionar una contraseña.

  • Lo que generó la configuración adecuada 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 clave que vea en la pantalla sea el real. Si nada más funciona, intente ingresarlo en Facebook.

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

Martin Doychev
fuente
2
versión de Linux: `keytool -exportcert -alias androiddebugkey -keystore $ HOME / .android / debug.keystore | openssl sha1 -binario | openssl base64`
ruX
1
Simplemente ingrese lo que muestra Facebook en la pantalla del dispositivo, eso debería funcionar. Gracias por la nota @ Martin
ralphgabb
14

Según Facebook Login para Android , debe proporcionar el valor hash clave. Para obtenerlo, necesitará la clave utilizada para firmar su solicitud.

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64
JP Ventura
fuente
1
solo desea agregar un comentario, use su almacén de claves de producción.
Liangjun
2
@Liangjun En realidad, debe usar todas sus claves porque de lo contrario no podrá probar Facbeook Login en el entorno de depuración.
Pijusn
2
@ Pius, sí, en realidad uso ambas teclas. Debería haberlo dicho claramente.
Liangjun
Recibo un error para este comando (no hay tiempo de ejecución de Java presente, solicitando la instalación), pero aún así obtengo una clave, sin embargo, no es válida y solo copio y pego la de logcat que me dice que no se reconoce.
Cristi Băluță
8

Debe crear dos hashes clave, uno para Debug y otro para Release.

Para la depuración hash de clave de :

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

Fuente de hashes clave de depuración

Para el hash de la tecla Release :

En OS X, ejecute (reemplace lo que está entre <>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 <>sus valores) :

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

Liberar fuente de hashes clave

MBH
fuente
Recibo un error para este comando (no hay tiempo de ejecución de Java presente, solicitando la instalación), pero aún así obtengo una clave también, sin embargo, no es válida y para que funcione simplemente copie y pegue la de logcat
Cristi Băluță
¿Quizás no ha establecido la RUTA de su Java y Keytool en la línea de comando? @ CristiBăluță
MBH
7

¡Intenté todas las respuestas anteriores 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 quitó. El inicio de sesión funcionó perfectamente.

El hashkey había 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 descubra esto 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 ...

Matan Dahan
fuente
Sí, aquí mismo recibí este error después de instalar la aplicación de Facebook en el dispositivo. Así que actualmente pongo 2 claves hash en la configuración de desarrollo de Facebook.
stuckedoverflow
3
Tengo una situación muy similar a la tuya. Lo que me ayudó fue ir a su página de FB - Configuración - Aplicaciones - Eliminar la aplicación de la lista. Cambie la clave hash y reinstale la aplicación fb y su aplicación. Y ahora funciona ...
anna_manzhula
4

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. Hacer clic Gradle
  2. Haga clic en Informe de firma
  3. Copie el valor SHA-1

O

Para obtener el valor SHA-1 del archivo de almacén de claves .

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

Copie el valor SHA-1 en su portapapeles de esta manera:

CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

Y abra hexadecimal -> decodificador de cadena Base64 para convertir su valor SHA-1 a Base64.

Esto es lo que requiere Facebook.

Obtenga el hash generado "******************** =" y copie el hash clave en la aplicación de Facebook.

Sajid Zeb
fuente
3

Estaba teniendo el mismo problema. Primero inicie sesión, bien, pero luego, un hash de clave inválido.

El SDK de Facebook para Unity obtiene el hash de clave incorrecto. Obtiene la clave de "C: \ Users \" your user ".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 le dice que el hash de clave no está registrado.

Según lo sugerido por Madi , puede seguir los pasos en este enlace para encontrar la clave correcta. Solo asegúrese de señalarlos al almacén de claves dentro de su proyecto. De lo contrario, no obtendrá la clave correcta.

Jefferson Suzuki Bitencourt
fuente
3

El siguiente código le dará su hash para Facebook, pero debe seguir estos pasos para obtener el hash de candidato de lanzamiento.

  1. Copia y pega este código en tu actividad principal

    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) {
    }
  2. Generar un APK firmado archivo .

  3. Conecte su teléfono a una computadora portátil y asegúrese de que permanezca conectado.
  4. Instala y ejecuta el archivo APK en tu teléfono moviendo manualmente el APK de lanzamiento a tu teléfono.
  5. Ahora mire Android LogCat (use el filtro KeyHash:) . Debería ver su clave hash de lanzamiento para Facebook. Simplemente cópielo y péguelo en suhttps://developers.facebook.com/apps . Está bajo configuración.
  6. Ahora puede probar la aplicación, debería funcionar perfectamente bien.
abdul jalil
fuente
tenga en cuenta que el código solo funciona si genera apk firmado. de lo contrario, solo le dará el hash de depuración de apk que es inútil para el apk lanzado
abdul jalil
Hola, cuando le di el hashkey generado a la aplicación de Facebook funciona bien, pero cuando intento ejecutarlo en otro dispositivo, nuevamente se muestra 'INVALID HASH KEY' (clave de hash inválida), ¿cómo puedo configurar la clave de hash para que la libreta contenga el trabajo en todos los dispositivos?
Deepak
2

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

Habíamos establecido permisos como:

loginButton.setReadPermissions(public_profile email);

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

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

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

¡Y funcionó como una dicha!

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

usuario3663906
fuente
Tengo el mismo problema. Intenté su solución pero aún no puedo resolver mi problema @ user3663906
BekaKK
2

Después de tantas pruebas me encontré con una solución para esto. Generé y agregué claves de depuración y liberación a la consola de desarrolladores de Facebook y aún recibí el error.

La única solución que funcionó para mí fue desinstalar el programa OpenSSL de Google y descargarlo desde Win32 / Win64 OpenSSL Installer para Windows

Realmente funciona como magia.

Uchenna Nnodim
fuente
2

A pesar de que esta pregunta se ha respondido de muchas maneras útiles, solo quería agregar que cuando seguí la respuesta de Rafal Maleks (usando las teclas hash en Google Play Console) NO pude usar la tecla SHA1 de firma de la aplicación, todavía obtuve el genérico error de Facebook En su lugar, necesitaba usar la huella digital del certificado SHA-1 de la parte Cargar certificado (justo debajo de la parte Firma de la aplicación en Google Play Console). Mismo proceso de lo contrario;

  1. Copie la huella digital del certificado SHA-1 de la sección Cargar certificado en la Consola de Google Play

  2. Convierta el SHA-1 usando: http://tomeko.net/online_tools/hex_to_base64.php y copie la salida (base64)

  3. Péguelo en la entrada de Key Hashes en developer.facebook.com y guarde los cambios.

Esperemos que esta respuesta no sea redundante y ayude a alguien que no pueda hacerlo funcionar con el certificado de firma de la aplicación.

Ahora el inicio de sesión de Facebook funciona en mi aplicación tanto en modo de depuración como de liberación.

Ferenziz
fuente
1

Pegue el siguiente código en su 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();
}

Simplemente modifique el nombre del paquete. Luego vaya a su archivo LogCat y seleccione Búsqueda de depuración aquí. Luego encontrarás la clave hash. Ahora copie esta clave hash y luego vaya al sitio developer.facebook.app_id, edite su clave hash y presione Save. Ahora ejecute su proyecto de Android nuevamente. Creo que el problema se resolverá.

codificador_pavel
fuente
77
repitiendo el otro tipo
Beto Caldas
1

Esto puede ayudar a alguien con el mismo problema.

  1. Genere el hash de clave usando el siguiente código

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

    Cómo usar keytool

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

  3. En Android Studio, menú ArchivoEstructura del proyecto

    Ingrese la descripción de la imagen aquí

    Agregar parámetros de firma.

  4. Seleccionar sabores

    Ingrese la descripción de la imagen aquí

    Seleccione la configuración de firma que creamos.

  5. Seleccionar tipo de compilación

    Ingrese la descripción de la imagen aquí

  6. Seleccione la variante de compilación y compílela

    Ingrese la descripción de la imagen aquí

CLIFFORD PY
fuente
1

Tuve el mismo problema cuando estaba depurando mi aplicación. Reescribí 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 los hashes clave. Solo ten cuidado con los errores tipográficos.

Esta solución es más una solución fácil que una solución adecuada.

Piotr Sagalara
fuente
1

Si está escribiendo el keyhash manualmente (por ejemplo, desde el dispositivo móvil al Panel de Facebook), asegúrese de diferenciar entre la letra L pequeña y la letra I mayúscula.

Kashif Nazar
fuente
1
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) {
}
ZafarHussain
fuente
0

Lo que Facebook usó no es la contraseña y el alias predeterminados para la depuración. Debe cambiarlo a continuación 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, debería ser "android" .

También puede configurarlo en el archivo build.gradle. Pero se debe usar la misma contraseña de alias para generar el hash:

android {
    signingConfigs {
        release {
            storeFile file("~/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
}
abhi shukla
fuente
0

Aquí hay muchas respuestas correctas. Sólo una cosa:

Pegue el hash recibido en AplicaciónConfiguraciónPrincipal , no a través del tutorial de inicio rápido.

Arrojar
fuente
0

Yo tuve el mismo problema.

Asegúrese de crear el archivo APK con el mismo dispositivo que generó el hashkey que se almacena en la sección de desarrolladores de Facebook.

nombre generico
fuente
0

Lo arreglé 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 cargué esto en la consola de desarrollador de Google y luego descargué el APK derivado que, por cualquier razón, tiene un hash de clave totalmente diferente.

Luego usé LogCat para determinar el nuevo hash clave y lo agregué a Facebook como otros usuarios han descrito.

Miguel
fuente
0

Si está generando hashes clave de liberación, asegúrese de ingresar la contraseña real de su almacén de claves y no "android".

Este fue mi problema. La versión de depuración funcionaba, pero la versión APK no.

Sermilion
fuente
-1

Use el siguiente código en el método onCreate () de su actividad:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "your application 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) {
}
catch (NoSuchAlgorithmException e) {
}

Ejecute este código. Esto generará la clave hash. Copie este KeyHash en la configuración de la aplicación de Facebook y guarde los cambios. Luego inicie sesión en su aplicación. Esto funcionará perfectamente en el futuro también.

Ashutoshg
fuente
3
repitiendo el otro tipo
Beto Caldas