java - obtener - invalid key hash facebook android solucion
¿Cómo crear Android Facebook Key Hash? (16)
Aquí está lo que tú necesitas hacer -
Descarga openSSl desde Code Extract it. crea una carpeta- OpenSSL en C: / y copia el código extraído aquí.
detectar la ruta del archivo debug.keystore. Si no lo encontró, realice una búsqueda en C: / y utilice la ruta en el comando en el siguiente paso.
detecte su ruta de acceso keytool.exe y vaya a ese indicador de comando dir / in y ejecute este comando en 1 línea-
$ keytool -exportcert -alias androiddebugkey -keystore "C:/Documents and Settings/Administrator.android/debug.keystore" | "C:/OpenSSL/bin/openssl" sha1 -binary |"C:/OpenSSL/bin/openssl" base64
pedirá contraseña, poner Android eso es todo. obtendrás un hash de clave
No entiendo este proceso en absoluto. Pude navegar a la carpeta que contiene keytool en Java SDK. Aunque sigo obteniendo el error openssl no reconocido como un comando interno o externo. El problema es que incluso si puedo hacer que esto funcione, ¿qué haría y con qué después?
Así es como obtuve mi:
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (exception != null) {
new AlertDialog.Builder(FriendActivity.this)
.setTitle(R.string.login_failed_dialog_title)
.setMessage(exception.getMessage())
.setPositiveButton(R.string.ok_button, null)
.show();
}
Por lo tanto, cuando intenta ingresar sin la clave, se producirá una excepción. Facebook puso la tecla DERECHA en esta excepción. Todo lo que necesitas hacer es copiarlo.
Ejecuta esto en tu aplicación:
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"=");
O esto:
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
Y luego mira los registros.
El resultado debe terminar con "=".
La solución se basa here y here .
Encontré la herramienta más simple y la utilicé muchas veces. Funciona perfectamente. échale un vistazo, te ayudará.
Verifique this respuesta para más detalles.
Estaba teniendo el mismo problema exacto, no me solicitaban una contraseña, y parece que tenía una ruta incorrecta para el archivo del almacén de claves.
De hecho, si la herramienta de claves no encuentra el almacén de claves que ha establecido, creará uno y le dará la clave incorrecta, ya que no está utilizando la correcta.
La regla general es que si no se le solicita una contraseña, entonces se genera la clave incorrecta.
Hay una solución corta también. Simplemente ejecuta esto en tu aplicación:
FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
Uno más largo que no necesita FB SDK (basado en una solución here ):
public static void printHashKey(Context context) {
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
for (android.content.pm.Signature signature : info.signatures) {
final MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
final String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i("AppLog", "key:" + hashKey + "=");
}
} catch (Exception e) {
Log.e("AppLog", "error:", e);
}
}
El resultado debe terminar con "=".
OpenSSL: debe instalarlo si no viene preinstalado con su sistema operativo (p. Ej., Windows no lo tiene preinstalado) . Cómo instalar eso depende de su sistema operativo (para Windows, consulte el Code provisto por coder_For_Life22).
La manera más fácil sin juguetear es copiar el binario openssl.exe en la ruta de tu keytool si estás en Windows. Si no quiere hacer eso, debe agregarlo a su PATH
entorno PATH
. Luego ejecute el comando provisto en los documentos.
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Tenga en cuenta que el argumento después de -keystore
apunta a su almacén de claves de depuración. Esta ubicación también depende de su sistema operativo. Debe estar en una de las siguientes ubicaciones:
- Windows Vista o 7 - C: / Users / .android / debug.keystore
- Windows XP - C: / Documents and Settings / .android / debug.keystore
- OS X y Linux - ~ / .android / debug.keystore
Si hiciste todo bien, se te debe pedir una contraseña. Eso es android
para el certificado de depuración. Si la contraseña es correcta, la consola imprime un hash (caracteres y números un tanto aleatorios).
Toma eso y copialo en el campo de android key hash
dentro de las preferencias de tu aplicación en Facebook. Para llegar allí, vaya a developers.facebook.com/apps , seleccione su aplicación, vaya a Edit settings
y desplácese hacia abajo. Después de eso, espere unos minutos hasta que los cambios entren en vigencia.
Para alguien como yo aquí hay detalles completos (para Windows)
1. Descargue HERE 1ra o 2da según su sistema de 32 bits o 64 bits.
2. Extraiga el archivo zip descargado dentro del directorio C
3. Abra la carpeta extraída hasta bin y copie la ruta, debería ser algo como C:/openssl-0.9.8k_X64/bin/openssl
(add / openssl al final)
4. (Obtenga la ruta a la carpeta bin de Jdk, si sabe cómo, ignore esto).
Abra el archivo ~ de estudio android ~ Estructura del proyecto (ctrl + alt + shift + s), seleccione la ubicación del SDK en el panel lateral izquierdo, copie la ubicación JDK y agregue / bin a ella
Así que la ubicación final de JDK será como C:/Program Files/Android/Android Studio/jre/bin
estamos siguiendo este método para obtener la ubicación de Jdk porque podrías usar jdk integrado como yo
ahora tienes la ubicación de OpenSSl y la ubicación de JDK
5. Ahora necesitamos depurar la ubicación del almacén de claves, para eso abrir C ~> Users ~> YourUserName ~> .android debe haber un nombre de archivo debug.keystore, ahora copie la ubicación de la ruta, debería ser algo así como
C:/Users/Redman/.android/debug.keystore
6. ahora abre el símbolo del sistema y escribe comando
cd YourJDKLocationFromStep4
en mi caso
cd C:/Program Files/Android/Android Studio/jre/bin
7. Ahora construye el siguiente comando
keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
en mi caso, el comando se verá como
keytool -exportcert -alias androiddebugkey -keystore C:/Users/Redman/.android/debug.keystore | C:/openssl-0.9.8k_X64/bin/openssl sha1 -binary | C:/openssl-0.9.8k_X64/bin/openssl base64
ahora ingrese este comando en el símbolo del sistema, si alguna vez lo hizo bien, se le solicitará una contraseña (la contraseña es android)
Enter keystore password: android
eso es todo, se te dará el Key Hash, simplemente cópialo y úsalo
Por favor intente esto:
public static void printHashKey(Context pContext) {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String hashKey = new String(Base64.encode(md.digest(), 0));
Log.i(TAG, "printHashKey() Hash Key: " + hashKey);
}
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, "printHashKey()", e);
} catch (Exception e) {
Log.e(TAG, "printHashKey()", e);
}
}
Puede obtener todas sus huellas digitales en https://console.developers.google.com/projectselector/apis/credentials
Y usa este código de Kotlin para convertirlo a keyhash:
fun main(args: Array<String>) {
listOf("<your_production_sha1_fingerprint>",
"<your_debug1_sha1_fingerprint>",
"<your_debug2_sha1_fingerprint>")
.map { it.split(":") }
.map { it.map { it.toInt(16).toByte() }.toByteArray() }
.map { String(Base64.getEncoder().encode(it)) }
.forEach { println(it) }
}
Puedes usar este apk
1.first install the app from the Google play store
2.install the above apk
3.launch the apk and input the package name of your app
4.then you will get the hash code you want
para generar su hash de clave en su computadora local, ejecute la utilidad de keytool de Java (que debe estar en la ruta de su consola) contra el almacén de claves de depuración de Android. Esto es, por defecto, en su directorio home .android). En OS X, ejecuta:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
En Windows, use:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%/.android/debug.keystore | openssl sha1 -binary | openssl base64
Espero que esto te ayudará
Ref - sitio de Facebook para desarrolladores
A continuación, agregue openssl / bin a las variables del sistema de ruta:
Mi computadora -> propiedades -> Configuraciones avanzadas -> Avanzadas -> Variables del sistema -> en las variables del sistema encuentran la ruta y la agregan a sus finales:; yourFullOpenSSLDir / bin
Ahora abra una línea de comando en su carpeta jdk / bin C: / Archivos de programa / Java / jdk1.8.0_40 / bin (en Windows mantenga presionada la tecla Mayús y haga clic derecho -> abra la línea de comandos aquí) y use:
keytool -exportcert -alias keystorealias -keystore C:/yourkeystore/folder/keystore.jks | openssl sha1 -binary | openssl base64
Y copie el número de 28 dígitos que genera después de dar la contraseña.
Para Linux
Terminal abierta:
Para la compilación de depuración
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
Encontrará debug.keystore en la carpeta ".android". Cópielo y péguelo en el escritorio y ejecute el comando anterior.
Para la versión Build
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
NOTA: asegúrese de que en ambos casos solicite una contraseña. Si no solicita una contraseña, significa que algo está mal en el comando. La contraseña para debug.keystore es " android " y para el lanzamiento debe ingresar la contraseña que estableció durante la creación del almacén de claves .
Para ventanas:
- abrir símbolo del sistema y pegar debajo del comando
keytool -exportcert -alias androiddebugkey -keystore% HOMEPATH% .android / debug.keystore | openssl sha1 -binary | openssl base64
Ingresa la contraseña: android -> Presiona Enter
Copie la clave hash generada -> Inicie sesión en Facebook con su cuenta de desarrollador
Vaya a su aplicación de Facebook -> Configuración -> Pegue la tecla Hash en la opción "hash de clave" -> guardar cambios.
Ahora prueba tu aplicación de Android con Facebook Log-in / Share, etc.