Hachage de clé pour l'application Android-Facebook


229

Je travaille sur une application Android, dans laquelle je souhaite intégrer une fonction de publication Facebook. J'ai téléchargé le SDK Facebook-Android et j'ai obtenu le fichier readme.md (fichier texte) dans lequel il est mentionné pour générer le hachage de clé pour Android. Comment le générer?


2
vous pouvez vérifier ce lien javatechig.com/2012/12/10/…
Nilanchal

2
check this Pour ceux qui sont toujours confrontés à un problème,
Chintan Khetiya

Générez HashKey pour le mode de débogage et de libération en utilisant ceci. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

Pour obtenir les clés, regardez cette vidéo
Bientôt Santos

Réponses:


310

Voici les étapes-

  1. Télécharger openssl à partir du code Google (si vous avez une machine 64 bits, vous devez télécharger openssl-0.9.8e X64 pas la dernière version)

  2. Extrayez-le. créez un dossier - OpenSSL en C: / et copiez le code extrait ici.

  3. détecter le chemin du fichier debug.keystore. Si vous ne l'avez pas trouvé, faites une recherche dans C: / et utilisez le chemin dans la commande à l'étape suivante.

  4. détectez votre chemin keytool.exe et accédez à cette invite de commande dir / in et exécutez cette commande en 1 ligne-

    $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Documents and Settings \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

    • il vous demandera un mot de passe, mettre android
    • c'est tout. vous obtiendrez un hachage de clé

Pour plus d'informations, visitez ici


5
Cette réponse a presque fonctionné pour moi sur Win7 x64. Cependant, le certificat codé résultant était incorrect. La réponse de Bryan Bedard ci-dessous produira la valeur de certificat correcte. Je suppose que la tuyauterie sur les fenêtres est en quelque sorte le coupable.
Walt Armor

10
Remarque pour les utilisateurs 64 bits: cela fonctionne avec la version openssl-0.9.8e X64 uniquement ne pas utiliser avec openssl-0.9.8k X64
Nicola Peluchetti

J'ai téléchargé openssl-0.9.8e X64 pour mon système et je l'ai extrait. Il ne contient rien sauf un fichier avec des données. Aidez-moi à en savoir plus.
Ravikiran

2
la commande doit être exécutée dans le dossier bin de java dans les systèmes Windows.
Antrromet

1
@HanishSharma Essayez de laisser de côté le $.
ban-geoengineering

241

[EDIT 2020] -> Maintenant, je recommande totalement la réponse ici , beaucoup plus facile à utiliser Android Studio, plus rapide et pas besoin de manipuler de code - celui ci-dessous était de retour aux jours de l'éclipse :) -.

Vous pouvez utiliser ce code dans n'importe quelle activité. Il enregistrera la clé de hachage dans le logcat, qui est la clé de débogage. C'est facile et c'est un soulagement que d'utiliser 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());
}

Vous pouvez supprimer le code après avoir connu la clé;)


27
Les gars, faites attention, après avoir créé l'apk, le hachage de clé est changé! car en utilisant ce code, vous obtenez le hachage de débogage du magasin de clés, mais lors de la création d'apk, c'est un autre hachage, je dois le capturer à partir du journal après avoir essayé votre apk sur l'émulateur, puis supprimez le code et exportez à nouveau sans ce journal :) - je sais que c'est un problème: D mais pour moi c'était plus facile que keytool, bonne chance;)
Bassem Wissa

4
Opensssl crée toujours des problèmes. Cette méthode est la meilleure. Créez simplement une application vierge et imprimez la clé, utilisez-la. Merci mec!!
AnhSirk Dasarp

1
C'est de loin la solution la plus simple. En utilisant la keytoolcommande, j'obtenais les mauvais hachages de touches (je ne sais pas pourquoi, j'ai décidé que je m'en fichais suffisamment pour enquêter). Cela a fonctionné et a littéralement pris 5 minutes pour obtenir le débogage et libérer les hachages de touches. +1
Chris Cirefice du

1
Oui Sébastien, il vous suffit d'installer l'apk signé sur un appareil, de le connecter au studio Android et de vérifier le journal du chat, ou vous pouvez afficher le hachage dans un edittext dans l'interface utilisateur et le copier, de toute façon oui le hachage produit par ce code fonctionne avec l'apk signé :)
Bassem Wissa

1
utiliser keytool est un tel gâchis que c'est vraiment simple
Tabish

135

J'ai créé un petit outil pour Windows et Mac OS X. Il suffit de jeter le fichier de stockage de clés et d'obtenir la clé de hachage.

Si vous voulez le fichier debug.keystore par défaut, utilisez l'alias et le mot de passe par défaut. Sinon, utilisez votre propre fichier de clés et valeurs.

Vérifiez-le, téléchargez la version Windows ou téléchargez la version Mac OS X (Dev-Host peut parfois être en panne ... donc si le lien est rompu, envoyez-moi un MP et je le corrigerai).

J'espère que ça vous aide les gars ...

31 décembre 2014 - EDIT: a changé d'hôte pour AFH. Veuillez me faire savoir si les liens sont rompus

21 nov. 2013 - MODIFICATION:

Comme les utilisateurs l'ont demandé, j'ai ajouté un emplacement de magasin de clés par défaut et un bouton DONNER. N'hésitez pas à l'utiliser si je vous ai aidé. :)

Capture d'écran Capture d'écran 2


1
Meilleur. Méthode. Déjà. Où est le bouton de don?
Adam Varhegyi

1
@ Shahar2k5 Je ne sais pas vraiment, a recommencé et a fonctionné comme un charme. Désolé
Anearion

1
Fonctionne comme un charme! Merci pour le partage :)
Vinayak

1
@Shahar Barsheshet Merci. vous avez raison. Téléchargé depuis le domaine Devhost et aucun problème rencontré.
MajorGeek

1
Je ne comprends pas quelque chose: pourquoi votre outil donne-t-il une clé SHA différente de celle utilisée en keytoolligne de commande? N'est-il pas censé produire des résultats identiques, s'il est appliqué au même fichier de clés?
fixé

64

Les instructions actuellement dans le tutoriel Android de Facebook ne fonctionnent pas bien sous Windows . Leur exemple montre comment diriger la sortie de keytool vers openssl mais si vous essayez ceci sous Windows, la sortie n'est pas valide pour une raison quelconque. J'ai constaté que je devais utiliser des fichiers intermédiaires pour le faire fonctionner correctement. Voici les étapes qui ont fonctionné pour moi:

Commencez par télécharger openssl pour Windows à partir de 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

Après avoir exécuté ces commandes, le hachage valide est stocké dans le fichier base64.txt. Copiez et collez ceci dans les paramètres de votre application sur Facebook.


Fonctionne parfaitement, tout le reste échouait.
Oliver Dixon

2
Quel PITA - mais Bryan a raison! La commande générera un hachage presque n'importe quoi, que votre chemin soit incorrect, que votre mot de passe soit incorrect ou que les canaux ne fonctionnent pas correctement - vous obtiendrez TOUJOURS UN HASH mais cela ne fonctionnera pas. Donc (sous Windows), j'ai abandonné Powershell et essayé Cygwin - ne fonctionnant toujours pas. Ce n'est qu'après avoir copié le fichier debug.keystore dans le répertoire de travail que j'ai pu le faire fonctionner et fonctionner !!
Bobby

2
Donc, en résumé, sous Windows, utilisez la technique de Bryan pour le séparer, OU utilisez cygwin avec votre fichier de clés dans le répertoire de travail: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binaire | openssl base64 S'il ne vous demande pas de mot de passe, il n'a pas trouvé le fichier de clés correctement.
Bobby

A parfaitement fonctionné pour moi. Très bonne réponse.
Ron

Si vous voulez éviter d'avoir des hachages pour les cas de mauvais mot de passe, vérifiez simplement votre mycert.bin avant de continuer avec openSSL. Sinon, vous hacheriez le mauvais texte d'erreur de mot de passe :)
Vaiden

50

Voici ce qui est donné sur la page officielle de Facebook :

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

Permettez-moi de diviser cette commande en fragments.

  1. Cherchez "keytool.exe". Vous pouvez rechercher cela sur le lecteur C :. Vous pouvez le trouver dans "java jdk"ou "java jre". Si vous avez installé plusieurs versions, choisissez-en une.

  2. Ouvrez une invite CMD et accédez au répertoire ci-dessus où vous l'avez trouvé "keytool.exe".

    Coupez le "exe" et collez la commande ci-dessus fournie sur la page Facebook.

  3. Vous obtiendrez une erreur en entrant ceci que OpenSSL n'est pas reconnu comme dans la commande de sortie d'entrée. Solution: Téléchargez "Openssl" depuis OpenSSL (si vous avez une machine 64 bits, vous devez télécharger openssl-0.9.8e X64 ). Extrayez-le et enregistrez-le n'importe où ... Je l'ai enregistré sur le lecteur C: dans le OpenSSldossier

  4. Remplacez le openssl dans la commande ci-dessus dans laquelle vous obteniez une erreur d'OpenSSL avec "C: \ OpenSSL \ bin \ openssl" aux deux endroits après le canal, "|".

  5. Si un mot de passe vous est demandé, entrez android.

Et vous obtiendrez votre clé de hachage. Pour plus d'informations, reportez-vous à nouveau à la page Facebook.


32

Ajoutez ce code à onCreatevotre activité, il imprimera le hachage sous la balise KeyHash dans votre 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) {

}

Vous pouvez ajouter plusieurs touches de hachage pour votre compte, donc si vous avez exécuté le débogage, n'oubliez pas de l'exécuter à nouveau en mode de publication .


excellente solution, je suppose qu'il ne devrait pas y avoir de version exécutable non signée? la version non signée ne doit pas être installée sur aucun appareil. Ces versions de débogage sont signées avec le magasin de
clés de

26

Pour obtenir le code de hachage de clé Android, procédez comme suit:

  1. Télécharger OpenSSL pour Windows ici
  2. Décompressez maintenant le lecteur C
  3. Ouvrez une invite CMD
  4. Type cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Tapez ensuite uniquement keytool -export -alias myAlias -keystore C:\Users\votre nom d'utilisateur\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Terminé

2
Très bonne réponse. Merci beaucoup.
Palani Kumar

1
Est-ce pour la clé de débogage ou pour la clé de libération?
IgorGanapolsky

@IgorGanapolsky au lieu du chemin de myKeyStore, donnez le chemin de votre clé de version. Le code ci-dessus est pour la clé de débogage
Pallavi

17

La solution la plus simple que j'ai trouvée est la suivante:

  • Ouvrez Log Cat
  • Essayez d'accéder à Facebook avec le SDK Android
  • Recherchez la ligne dans le journal qui ressemble à ceci:

    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
  • Copiez "abcdefgHIJKLMN + OPqrstuvwzyz" et collez-le dans la zone Facebook Android Key Hash.


c'est le moyen le plus simple et le plus efficace, prenez-le simplement dans les journaux sans même ouvrir!
Luca C.

c'est la seule solution qui a fonctionné pour moi!. Je ne vois pas le journal comme vous, mais je le vois KeyHash: XWwXXXXX/5xxxxxxxxxxx=dans le journal et m'a aidé!
Khang Dinh Hoang

14

Vous pouvez obtenir le hachage de clé à partir de la clé SHA-1. C'est très simple, vous devez obtenir votre clé SHA-1 (APK signé) sur le Play Store, vérifiez l'image ci-dessous.entrez la description de l'image ici

Maintenant, copiez cette clé SHA-1 et collez-la dans ce site Web http://tomeko.net vérifiez également l'image ci-dessous pour obtenir votre clé de hachage.

entrez la description de l'image ici


1
Merci. J'ai essayé d'obtenir le hachage de clé en utilisant OpenSSL. Cela m'a pris 1 minute et c'était facile.
Vert Y.

1
Merci beaucoup! C'était la solution car Google signe mon application maintenant (j'utilise juste le certificat de téléchargement / keystore)
Harrison

13

J'ai fait de cette façon pour Linux OS et Windows OS :

Linux:

  • Télécharger Openssl
  • Terminal ouvert
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Veuillez changer le nom d'alias et le magasin de clés avec son chemin comme exigence.

Terminal se demander de mot de passe de Keystore. Vous devez fournir un mot de passe pour le même magasin de clés .

Donc, finalement, vous obtiendrez la version Hashkey .

Les fenêtres:

Étapes de libération de Hashkey :

  • Télécharger Openssl (téléchargement à partir d' ici ), j'ai téléchargé pour un système d'exploitation 64 bits , vous pouvez en trouver plus ici
  • Extraire le fichier zip téléchargé sur le lecteur C: \ uniquement
  • Ouvrir l'invite de commande
  • 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

Veuillez changer le nom d'alias et le magasin de clés avec son chemin comme exigence.

Remarque:

Veuillez mettre vos coordonnées là où j'ai marqué entre ** **.

Terminal se demander de mot de passe de Keystore. Vous devez fournir un mot de passe pour le même magasin de clés .

Donc, finalement, vous obtiendrez la version Hashkey .

Terminé


quel est le mot de passe ici?
Akash Bisariya

@AkashBisariya, mot de passe du magasin de clés, que vous avez donné lors de la création du magasin de clés.
Hiren Patel

Où puis-je trouver la clé après avoir réussi à générer?
Anand Phadke

11
  • téléchargez openSSL pour windows ici vous pouvez trouver 64bit et 32bit ici

  • extraire le fichier téléchargé

  • créer le nom du dossier openSSL dans le lecteur C
  • copier tous les éléments extraits dans le dossier openSSL (bin, include, lib, openssl.cnf)
  • obtenir le magasin de clés de débogage android, l'emplacement par défaut sera

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

  • maintenant obtenez votre invite de commande et collez ce code

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

  • appuyez sur Entrée et vous obtiendrez le code clé à 28 chiffres

NON, il demande un mot de passe. la frappe androiddonne un hachage à 24 chiffres et la frappe adonne un hachage à 28 chiffres. Je ne sais pas pourquoi!
sud007

mauvais liens! ils n'ont pas du tout de
clé

6

Vous devez créer un fichier de clés par le keytool pour les applications signées pour Android comme la procédure décrite dans le site Android , puis vous devez installer cygwin, puis vous devez installer openssl à partir du code Google, puis exécuter la commande suivante et vous obtiendrez le hachage clé pour Android, puis mettez cette clé de hachage dans l'application Facebook que vous avez créée. Et puis vous pouvez accéder à l'application facebook via l'application Android pour poster un mur ("publish_stream") pourrait être un exemple.

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

Vous devez exécuter la commande ci-dessus à partir de cygwin.


6

Téléchargez openSSL -> Installez-le -> il serait généralement installé dans C: \ OpenSSL

puis ouvrez cmd et tapez

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

pour vérifier la version jdk, allez dans 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)

Il vous demandera un mot de passe qui est Android.


6
  1. Ouvrez simplement votre fichier d'activité principal et créez la fonction de mention ci-dessous:

         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 Exécutez votre application, cela générera une clé de hachage pour votre application.

  1. Maintenant, ouvrez log cat et recherchez avec "KeyHash" et copiez la clé de hachage.

  2. Une fois que vous générez la clé de hachage, vous pouvez supprimer cette fonction.


5

1) Créez une clé pour signer votre demande et souvenez-vous de l'alias.

2) Installez OpenSSL.

3) Mettez le dossier bin d'OpenSSL dans votre chemin.

4) Suivez les étapes mentionnées sous "Configuration Single Sign-On" sur le FB-Android SDK la page et générer votre clé Hash. Assurez-vous de mettre l'alias et le nom de fichier de clés corrects.

5) Créez une application sur Facebok et sous l'onglet Appareils mobiles, entrez cette clé de hachage.


5

Documentation officielle sur le site des développeurs 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) {

    }

@WilliamKinaan: à tout moment;): P
Hardik Thaker

@HardikThaker J'ai utilisé votre code, il me donne exactement le même porte-clés que j'ai obtenu en utilisant le terminal par cette commande keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64et je reçois toujours le hachage de clé ne correspond à aucun hachage de clé stocké
Shan Xeeshi

4
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

Cela a fonctionné pour moi ...

Pas:

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

4

Pour Linux

Terminal ouvert:

Pour Debug Build

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

vous trouverez debug.keystore à partir du dossier ".android" copiez-le et collez-le sur le bureau et exécutez la commande ci-dessus

Pour la version Build

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

REMARQUE: assurez-vous que dans les deux cas, il doit demander un mot de passe. S'il ne demande pas de mot de passe, cela signifie que quelque chose ne va pas dans la commande.


J'obtiens des valeurs différentes avec un nom d'alias différent, comment vérifier laquelle est correcte?
Javal Nanda

-il demander un mot de passe avec le nom d'alias?
Biraj Zalavadia

ya et quel que soit le mot de passe que j'entre, on me donne la clé de hachage .. mon application est déjà sur le Play Store et le fb natif ne fonctionne pas maintenant. Je devrai de toute façon générer un hachage de clé exact pour la version. Les développeurs suggèrent d'inclure du code dans onCreate dans le post suivant, mais je veux le faire fonctionner sans mise à jour de l'application sur playstore stackoverflow.com/questions/15021790/…
Javal Nanda

oui il y a un problème avec les veuves avec openssl. Vous pouvez réaliser avec le code spécifié dans ce message.
Biraj Zalavadia

Si vous voulez vous passer de la mise à jour sur Playstore. 1) Créez une nouvelle application Android Demp. 2) Mettez ce morceau de code dans create. 3) signez cette application de démonstration avec le même magasin de clés de votre application sur l'App Store 4) Exécutez ensuite cette apk signée 5) Et utilisez enfin cette clé de hachage
Biraj Zalavadia

4

Pour une application Android

Ce code est utilisé pour obtenir la clé de hachage dans votre application Android pour l'intégration Facebook. J'ai testé tous les appareils et ça marche. Modifiez uniquement le nom de package de ce code:

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) {

    }
}

4

Comme répondu sur un problème similaire, j'ai trouvé que cela fonctionnait pour moi:

  • Copiez le apkname.apkfichier dont vous voulez connaître le hachage dans le ' dossier Java \ jdk1.7.0_79 \ bin '
  • Exécutez cette commande keytool -list -printcert -jarfile apkname.apk
  • Copiez la SHA1valeur et convertissez-la en utilisant ce site
  • Utilisez la valeur Keyhash convertie ( ex. ZaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

La solution la plus simple:

  1. N'ajoutez pas la clé de hachage, implémentez tout le reste
  2. Lorsque vous vous connectez à Facebook, vous obtenez une erreur indiquant "Hachage de clé non valide. Le hachage de clé" xxx "ne correspond à aucune clé stockée. ..."
  3. Ouvrez le tableau de bord de l'application facebook et ajoutez le hachage "xxx =" (hachage "xxx" de l'erreur + signe "=")

3

Pour générer un hachage de votre clé de version, exécutez la commande suivante sur Mac ou Windows en remplaçant votre alias de clé de version et le chemin d'accès à votre fichier de clés.

Sous Windows, utilisez:

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

Cette commande doit générer une chaîne de 28 characher. N'oubliez pas que COPY et PASTE cette clé de sortie dans les paramètres Android de votre ID d'application Facebook.

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

Référez-vous à: https://developers.facebook.com/docs/android/getting-started#release-key-hash et http://note.taable.com


3

Utilisez ceci pour imprimer le hachage des clés dans 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){

    }

2

Résolu le mien aussi dans Android Studio mais avec une approche légèrement différente.

Pour obtenir la valeur SHA-1 dans Android Studio.

  1. Cliquez Gradle
  2. Cliquez sur Rapport de signature
  3. Copier SHA-1

Cliquez sur le panneau marqué dans le studio Android

  1. La valeur SHA-1 ressemble à ce CD: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    et ouvrez http://tomeko.net/online_tools/hex_to_base64.php pour convertir votre valeur SHA1 en base64. C'est ce dont Facebook a besoin pour obtenir le hachage généré "******************** =" et copier le hachage de clé dans la console de l'application Facebook.

Une partie de cette réponse tirée d'ici Github Link


2

Il y a deux méthodes disponibles , l'une complexe et l'autre simple

Première méthode: (peu complexe)

vous devez d'abord télécharger ssl 64bit ou en 32bitconséquence, n'oubliez pas de télécharger le fichier avec le nom contenant eaprès le code de version openssl-0.9.8e_X64.zip OU openssl-0.9.8e_WIN32.zip pas avec le kcode après la version,

et placez-le dans le répertoire AndroidStudio / jre / bin, si vous ne savez pas où placer, vous pouvez trouver ce répertoire en cliquant avec le bouton droit sur le raccourci du studio Android comme suit:

entrez la description de l'image ici

maintenant vous avez réussi deux choses requises en un seul endroit, mais vous devez toujours trouver le chemin pour votre debug.keystore, qui peut toujours être trouvé dans le "C:\Users\yourusernamehere\.android\debug.keystore",

REMARQUE Si votre application est déjà publiée ou sur le point de publier, utilisez votre magasin de clés de signature de publication, si et seulement si vous testez en mode de développement, vous pouvez utiliser le débogage, keysotre

Comme tout est configuré, laissez organiser la commande que vous vouliez exécuter pour la génération de clé de hachage base64 format, et votre commande ressemblera à ceci

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

il vous demandera d'entrer un mot de passe pour le debug.keystore, qui est android par défaut. si vous utilisez votre propre clé, le mot de passe sera également le vôtre. la sortie ressemblera à ceci si tout se passe bien comme prévu, j'espère que cela peut aider

entrez la description de l'image ici

Deuxième méthode (respectivement facile)

si vous ne voulez pas passer par toutes les procédures ci-dessus, utilisez simplement la méthode suivante pour enregistrer la clé de sécurité:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

production:

entrez la description de l'image ici


1

La meilleure approche consiste à utiliser le code suivant:

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();
    }
}

Mais j'étais tellement frustré par le fait qu'il n'y ait pas d'outil simple pour générer la HashKey pour l'application Facebook. Chaque fois, je devais jouer avec Openssl et Keytool ou utiliser un code pour obtenir le hachage de la signature ...

J'ai donc écrit un KeyGenTool simple qui fera ce travail pour vous: -> KeyGenTool sur Google Play <-

Prendre plaisir :)


1

J'ai fait une petite erreur qui doit être gardée à l'esprit. Si vous utilisez votre magasin de clés, donnez votre nom d'alias, pas androiddebugkey ...

J'ai résolu mon problème. Maintenant, si Facebook est installé sur mon appareil, mon application reçoit toujours des données sur l'intégration de connexion Facebook. Ne vous souciez que de votre clé de hachage.

Veuillez voir ci-dessous.

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

Puis appuyez Enter - il vous demandera le mot de passe, puis entrez votre mot de passe de magasin de clés, pas Android.

Cool.


0
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());
                }
            }
        });
    }



}

Ce code ne génère pas de clé de hachage valide pour moi. La réponse de @ Jamshid fonctionne pour moi sur Mac OSX.
Loolooii

0

Code Kotlin pour obtenir la clé de hachage

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

N'oubliez pas de générer des clés dans l'environnement de débogage et de publication car elles changent selon le paramètre de construction.


0

essaye ça :

  • deux façons d'obtenir la valeur de clé de hachage

1) Obtenez la clé de hachage à l'aide de la ligne de commande (Doc officiel: https://developers.facebook.com/docs/android/getting-started )

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

OU

2) Obtenez la clé de hachage en utilisant le code

  @Override
   protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

            //Hask Kay generation 
             GetKeyHase();
    }

    private void GetKeyHase() {
            try {
                PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = (MessageDigest.getInstance("SHA"));
                    md.update(signature.toByteArray());
                    String hashkey_value = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", hashkey_value);
                    //check you logcat hash key value
                }
            }catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.