Hash clave para la aplicación Android-Facebook

Estoy trabajando en una aplicación de Android, en la que quiero integrar una función de publicación de Facebook. Descargué el SDK de Facebook-Android, y obtuve el archivo readme.md (archivo de texto) allí, en el que se menciona para generar el hash de clave para Android. ¿Cómo lo genero?

Aquí están los pasos-

  1. Descargue openssl del código de Google (si tiene una máquina de 64 bits, debe descargar openssl-0.9.8e X64, no la última versión)

  2. Extraelo. crea una carpeta- OpenSSL en C: / y copia el código extraído aquí.

  3. 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.

  4. 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

Para más información, visite aquí

Puedes usar este código en cualquier actividad. Registrará el hashkey en el logcat, que es la clave de depuración. Esto es fácil, y es un alivio que usar SSL.

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

Puede eliminar el código después de conocer la clave;)

Creé una pequeña herramienta para Windows y Mac OS X. Solo inserte el archivo key-store y obtenga la clave hash.

Si desea el archivo predeterminado debug.keystore, use el alias y la contraseña predeterminados. De lo contrario, use su propio archivo y valores de keystore.

Compruébelo, descargue la versión de Windows o descargue la versión de Mac OS X (Dev-Host podría estar inactivo a veces … así que si el enlace se rompe, PM y lo arreglaré).

Espero que les ayuden chicos …

31 de diciembre de 2014 – EDITAR: Se cambió el host a AFH. Por favor, avíseme si los enlaces están rotos

21 de noviembre de 2013 – EDITAR:

Como solicitaron los usuarios, agregué una ubicación de almacén de claves predeterminada y un botón DONAR. Siéntete libre de usarlo si te he ayudado. 🙂

Captura de pantallaCaptura de pantalla 2

Las instrucciones actualmente en el Tutorial de Android de Facebook no funcionan bien en Windows . Su ejemplo muestra cómo canalizar la salida de keytool a openssl, pero si prueba esto en Windows, la salida no es válida por algún motivo. Descubrí que tenía que usar archivos intermedios para que funcione correctamente. Estos son los pasos que funcionaron para mí:

Comience por descargar openssl para Windows desde Google.

 C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt 

Después de ejecutar estos comandos, el hash válido se almacena en el archivo base64.txt. Copie y pegue esto en la configuración de su aplicación en Facebook.

Esto es lo que se da en la página oficial de Facebook :

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

Déjame dividir este comando en fragmentos.

  1. Busque "keytool.exe" . Puede buscar eso en la unidad C :. Puedes encontrarlo en "java jdk" o "java jre" . Si ha instalado varias versiones, elija una.

  2. Abra un indicador de CMD y vaya al directorio de arriba donde encontró "keytool.exe" .

    Clip el “exe`” y pegue el comando anterior proporcionado en la página de Facebook.

  3. Obtendrá un error al ingresar esto que OpenSSL no se reconoce como un comando de salida de entrada. Solución: descargue “Openssl” de OpenSSL (si tiene una máquina de 64 bits, debe descargar openssl-0.9.8e X64 ). Extraiga y guárdelo en cualquier lugar … Lo OpenSSl en la unidad C: en la carpeta OpenSSl

  4. Reemplace el openssl en el comando anterior en el que estaba obteniendo un error de OpenSSL con “C: \ OpenSSL \ bin \ openssl” en ambos lugares después del conducto, “|”.

  5. Si se le solicita una contraseña, ingrese android .

Y obtendrás tu clave hash. Para más pasos, consulte nuevamente la página de Facebook.

Agregue este código a onCreate de su actividad, imprimirá el hash bajo la etiqueta KeyHash en su logCat

 try { PackageInfo info = getPackageManager().getPackageInfo( getPackageName(), 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) { } 

Puede agregar múltiples hashkeys para su cuenta, por lo que si estuvo ejecutando depuración , no olvide ejecutar esto de nuevo en el modo de lanzamiento .

Para obtener el código hash de la clave Android, sigue estos pasos:

  1. Descargue OpenSSL para Windows aquí
  2. Ahora descomprímalo en el disco C
  3. Abra un mensaje de CMD
  4. Escriba cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. A continuación, escriba solo keytool -export -alias myAlias -keystore C:\Users\ su nombre de usuario \.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e \.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Hecho

La solución más simple que he encontrado es esta:

  • Abre Log Cat
  • Intenta acceder a Facebook con el SDK de Android
  • Busque la línea en el registro que se ve así:

     04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your application settings. Check your application settings at http://www.facebook.com/developers 
  • Copie “abcdefgHIJKLMN + OPqrstuvwzyz” y péguelo en el área Facebook Key Hash de Facebook.

Lo he hecho de esta manera para el sistema operativo Linux y el sistema operativo Windows :

Linux:

  • Descargar Openssl
  • Terminal abierto
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Cambie amablemente el nombre del alias y la tienda de claves con su trayectoria como su requisito.

Terminal solicitaría la contraseña de Keystore. Debe proporcionar una contraseña para el mismo Almacén de claves .

Así que finalmente obtendrías el Release Hashkey .

Windows:

Pasos para la liberación de Hashkey :

  • Descargue Openssl (descargue desde aquí ), lo he descargado para sistema operativo de 64 bits , puede encontrar más aquí
  • Extraiga el archivo zip descargado solo a C: \ drive
  • Abrir el símbolo del sistema
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

Cambie amablemente el nombre del alias y la tienda de claves con su trayectoria como su requisito.

Nota:

Por favor ponga sus detalles donde he marcado entre ** **.

Terminal solicitaría la contraseña de Keystore. Debe proporcionar una contraseña para el mismo Almacén de claves .

Así que finalmente obtendrías el Release Hashkey .

Hecho

  • descarga OpenSSL para Windows aquí puedes encontrar 64bit y 32bit aquí

  • extraer el archivo descargado

  • crear el nombre de la carpeta openSSL en la unidad C
  • Copie todos los elementos extraídos en la carpeta openSSL (bin, include, lib, openssl.cnf)
  • obtener el almacén de claves de depuración de Android, la ubicación predeterminada será

C: \ Users \ username \ .android \ debug.keystore

  • ahora obtenga su símbolo del sistema y pegue este código

keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ username.android \ debug.keystore | “C: \ openSSL \ bin \ openssl” sha1 -binary | “C: \ openSSL \ bin \ openssl” base64

  • presiona enter y obtendrás el código clave de 28 dígitos

Necesita crear un almacén de claves mediante la herramienta de claves para aplicaciones firmadas para Android como el procedimiento descrito en el Sitio de Android y luego debe instalar cygwin y luego debe instalar openssl desde el código de Google, luego ejecute el siguiente comando y obtendrá el hash tecla para Android y luego poner esa clave hash en la aplicación de Facebook que ha creado. Y luego puede acceder a la aplicación de Facebook a través de la aplicación Android para publicar muro (“publish_stream”) podría ser un ejemplo.

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64

Debe ejecutar el comando anterior de cygwin.

Descargue openSSL -> Instalarlo -> generalmente se instalará en C: \ OpenSSL

a continuación, abra cmd y escriba

 cd../../Program Files (Enter) java (Enter) dir (Enter) cd jdk1.6.0_17 (varies with jdk versions) (Enter) 

para verificar la versión de jdk vaya a C: / program files / java / jdk_version

 cd bin (enter) keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter) 

Te pedirá una contraseña que es Android.

  1. Simplemente abra su archivo de actividad principal y cree a continuación la función de mención:

      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 (PackageManager.NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } 

1.1 Ejecutar aplicación, esto generará una tecla Hash para su aplicación.

  1. Ahora, abra log cat y busque con “KeyHash” y copie la clave hash.

  2. Una vez que genere la tecla Hash, puede eliminar esta función.

1) Crea una clave para firmar tu aplicación y recuerda el alias.

2) Instala OpenSSL.

3) Coloque la carpeta bin de OpenSSL en su ruta.

4) Siga los pasos mencionados en “Configurar inicio de sesión único” en la página FB-Android-SDK y genere su clave hash. Asegúrese de poner el alias correcto y el nombre de archivo del almacén de claves.

5) Cree una aplicación en Facebok, y en la pestaña Dispositivos móviles, ingrese esta clave Hash.

Documentación oficial en el sitio del desarrollador de Facebook :

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Add code to print out the key hash try { PackageInfo info = getPackageManager().getPackageInfo( "com.facebook.samples.hellofacebook", 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) { } 
 keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

Esto funcionó para mí …

Pasos:

 1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin 2) Download OpenSSL from google 3) paste this with changing your paths - keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 .................... give proper debug.keystore path and openSSL path .. 4) Finley it may be ask u password .. so give password -> android ... 5) you will get 28 characters that will be your has key 

Para Linux

Terminal abierta:

Para la comstackción de depuración

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

Encontrará debug.keystore desde la carpeta “.android” cópielo y péguelo en el escritorio y ejecute el comando anterior

Para la versión Build

 keytool -exportcert -alias  -keystore  | openssl sha1 -binary | openssl base64 

NOTA: asegúrese de que en ambos casos, debe solicitar una contraseña. Si no solicita una contraseña, significa que algo está mal al comando.

Para una aplicación de Android

Este código se usa para obtener la clave hash en su aplicación Android para la integración de Facebook. He probado todos los dispositivos y está funcionando. Solo cambie el nombre del paquete de este código:

 private void facebookHashKey() { try { PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String hashCode = Base64.encodeToString(md.digest(), Base64.DEFAULT); System.out.println("Print the hashKey for Facebook :"+hashCode); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } } 

Para generar un hash de su clave de liberación, ejecute el siguiente comando en Mac o Windows sustituyendo su alias de clave de liberación y la ruta a su almacén de claves.

En Windows, use:

 keytool -exportcert -alias  -keystore  | openssl sha1 -binary | openssl base64 

Este comando debería generar una cadena de 28 caracteres. Recuerde que COPIE y PEGUE este Release Key Hash en la configuración de Android de su ID de aplicación de Facebook.

imagen: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

Consulte en: https://developers.facebook.com/docs/android/getting-started#release-key-hash y http://note.taable.com

Como contesté sobre un problema similar, encontré que esto funcionaba para mí:

  • Copie el archivo apkname.apk del que desea saber el hash a la carpeta ‘ Java \ jdk1.7.0_79 \ bin
  • Ejecute este comando keytool -list -printcert -jarfile apkname.apk
  • Copie el valor SHA1 y conviértalo utilizando este sitio
  • Utilice el valor convertido Keyhash (por ejemplo, zaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

La solución más simple:

  1. No agregue la clave hash, implemente todo lo demás
  2. Cuando se presione el inicio de sesión de Facebook, se mostrará un error que dice “Hash de clave no válida. El hash de la clave” xxx “no coincide con ninguna clave almacenada …”
  3. Abra el panel de la aplicación de Facebook y agregue el hash “xxx =” (“xxx” hash del error + “=” signo)

El mejor enfoque es usar el siguiente código:

 private void getHashKey(String pkgName) { try { PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String hashKey = Base64.encodeBytes(md.digest()); _hashKey_et.setText(hashKey); Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey); } } catch (NameNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } 

Pero estaba tan frustrado con el hecho de que no existe una herramienta sencilla para generar HashKey para la aplicación de Facebook. Cada vez que tenía que jugar con Openssl y Keytool o usar un código para obtener el hash de la firma …

Así que escribí un KeyGenTool simple que hará que funcione para usted: -> KeyGenTool en Google Play <-

Disfruta 🙂

Hice un pequeño error que debería tenerse en cuenta. Si está utilizando su almacén de claves, entonces proporcione su nombre de alias, no androiddebugkey …

Resolví mi problema. Ahora bien, si Facebook está instalado en mi dispositivo, aún así mi aplicación está obteniendo datos en la integración de inicio de sesión de Facebook. Solo me importa tu clave hash.

Por favor ver más abajo.

 C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64 

A continuación, presione Entrar ; le pedirá la contraseña y luego ingresará su contraseña de almacén de claves, no Android.

Guay.

 import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import android.os.Bundle; import android.app.Activity; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; import android.text.Editable; import android.util.Base64; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { Button btn; EditText et; PackageInfo info; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.button1); et=(EditText)findViewById(R.id.editText1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { info = getPackageManager().getPackageInfo("com.example.id", 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())); et.setText("" + something); 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()); } } }); } } 

En primer lugar, para generar su hash de clave en su computadora local, ejecute la herramienta 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 Ubuntu, está trabajando en mi computadora

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

Para las personas que no saben cómo codificar, la herramienta de generación de claves de AivarsDa en google play es la solución más fácil. simplemente obtenga la clave de acceso y copie a la configuración de la aplicación de Facebook. El recurso compartido en la herramienta keygen hace que mi aplicación se cuelgue en mi teléfono, así que simplemente la escribí manualmente en el bloc de notas y la copié a fb. Finalmente, después de este paso después de días de frustración

Use este comando después de mantener ssl abierto en la unidad c y en la carpeta openssl.

 keytool -exportcert -alias androiddebugkey -keystore "C:\Users\AJAY SUNDRIYAL.android\debug.keystore" | openssl sha1 -binary | openssl base64 

Use esto para imprimir hash de clave en kotlin

 try { val info = context.getPackageManager().getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES); for (signature in info.signatures) { val md = MessageDigest.getInstance("SHA") md.update(signature.toByteArray()) Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT)) } }catch (e:Exception){ }