Schlüssel-Hash für Android-Facebook-App


229

Ich arbeite an einer Android-App, in die ich eine Facebook-Posting-Funktion integrieren möchte. Ich habe das Facebook-Android SDK heruntergeladen und dort die Datei readme.md (Textdatei) abgerufen, in der der Schlüssel-Hash für Android generiert wird. Wie generiere ich es?


2
Sie können diesen Link überprüfen javatechig.com/2012/12/10/…
Nilanchal

2
Überprüfen Sie dies Für diejenigen, die immer noch
Probleme haben

Generieren Sie damit HashKey für den Debug- und Release-Modus. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

Um die Schlüssel zu bekommen, schauen Sie sich dieses Video an
Bald Santos

Antworten:


310

Hier sind die Schritte-

  1. Laden Sie openssl vom Google-Code herunter (Wenn Sie einen 64-Bit-Computer haben, müssen Sie openssl-0.9.8e X64 herunterladen, nicht die neueste Version).

  2. Extrahieren Sie es. Erstellen Sie einen Ordner - OpenSSL in C: / und kopieren Sie den extrahierten Code hier.

  3. Erkennen des Dateipfads debug.keystore. Wenn Sie nicht gefunden haben, führen Sie eine Suche in C: / durch und verwenden Sie im nächsten Schritt den Pfad im Befehl.

  4. Ermitteln Sie den Pfad keytool.exe, gehen Sie zu dieser dir / in-Eingabeaufforderung und führen Sie diesen Befehl in einer Zeile aus.

    $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Dokumente und Einstellungen \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

    • es wird nach dem Passwort fragen, Android setzen
    • das ist alles. Du wirst einen Key-Hash bekommen

Weitere Informationen finden Sie hier


5
Diese Antwort hat bei Win7 x64 fast funktioniert. Das resultierende codierte Zertifikat war jedoch falsch. Die Antwort von Bryan Bedard unten ergibt den korrekten Zertifizierungswert. Ich vermute, die Rohrleitungen an den Fenstern sind irgendwie der Schuldige.
Walt Armor

10
Hinweis für 64-Bit-Benutzer: Dies funktioniert mit der Version openssl-0.9.8e X64 nur nicht mit openssl-0.9.8k X64
Nicola Peluchetti

Ich habe openssl-0.9.8e X64 für mein System heruntergeladen und extrahiert. Es enthält nur eine Datei mit einigen Daten. Bitte helfen Sie mir, mehr zu wissen.
Ravikiran

2
Der Befehl sollte in Windows-Systemen im Ordner bin von Java ausgeführt werden.
Antrromet

1
@ HanishSharma Versuchen Sie, das wegzulassen $.
Ban-Geoengineering

240

[EDIT 2020] -> Jetzt kann ich die Antwort hier nur empfehlen , viel einfacher mit Android Studio, schneller und ohne Code schreiben zu müssen - der folgende war in den Tagen der Sonnenfinsternis zurück :) -.

Sie können diesen Code in jeder Aktivität verwenden. Der Hash-Schlüssel wird im Logcat protokolliert, der der Debug-Schlüssel ist. Dies ist einfach und eine Erleichterung als die Verwendung von 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());
}

Sie können den Code löschen, nachdem Sie den Schlüssel kennen;)


27
Leute, passt auf, nach dem Erstellen der apk wird der Schlüssel-Hash geändert! weil du mit diesem Code den Debug-Keystore-Hash bekommst, aber wenn du apk erstellst, ist es ein weiterer Hash, der aus dem Protokoll erfasst werden muss, nachdem du dein apk auf dem Emulator ausprobiert hast, dann Code löschst und erneut ohne dieses Protokoll exportierst :) - ich weiß, es ist ein Ärger: D aber für mich war es einfacher als Keytool, viel Glück;)
Bassem Wissa

4
Opensssl schafft immer Probleme. Diese Methode ist die beste. Erstellen Sie einfach eine leere App und lassen Sie den Schlüssel drucken. Verwenden Sie ihn. Danke, Mann!!
AnhSirk Dasarp

1
Dies ist bei weitem die einfachste Lösung. Mit dem keytoolBefehl bekam ich die falschen Schlüssel-Hashes (ich habe keine Ahnung warum, entschied, dass es mir nicht wichtig genug war, Nachforschungen anzustellen). Dies funktionierte und dauerte buchstäblich 5 Minuten, um die Debug- und Release-Key-Hashes zu erhalten. +1
Chris Cirefice

1
Ja Sebastien, du musst nur die signierte apk auf einem Gerät installieren, sie mit Android Studio verbinden und die Protokollkatze überprüfen, oder du kannst den Hash in einem Edittext in der Benutzeroberfläche anzeigen und kopieren, ja, der Hash, den dieser Code erzeugt, funktioniert mit die signierte apk :)
Bassem Wissa

1
Die Verwendung von Keytool ist so ein Durcheinander, dass es wirklich einfach ist
Tabish

135

Ich habe ein kleines Tool für Windows und Mac OS X erstellt. Geben Sie einfach die Key-Store-Datei ein und holen Sie sich den Hash-Schlüssel.

Wenn Sie die Standarddatei debug.keystore verwenden möchten, verwenden Sie den Standardalias und das Standardkennwort. Verwenden Sie andernfalls Ihre eigene Keystore-Datei und Werte.

Probieren Sie es aus, laden Sie die Windows-Version oder die Mac OS X-Version herunter (Dev-Host ist manchmal nicht verfügbar ... Wenn der Link unterbrochen ist, senden Sie mir eine PM und ich werde das Problem beheben).

Ich hoffe das hilft euch ...

31. Dezember 2014 - BEARBEITEN: Host auf AFH geändert. Bitte lassen Sie mich wissen, wenn die Links defekt sind

21. November 2013 - BEARBEITEN:

Auf Wunsch der Benutzer habe ich einen Standardspeicherort für den Schlüsselspeicher und eine Schaltfläche SPENDEN hinzugefügt. Fühlen Sie sich frei, es zu benutzen, wenn ich Ihnen geholfen habe. :) :)

Bildschirmfoto Screenshot 2


1
Beste. Methode. Je. Wo ist der Spendenknopf?
Adam Varhegyi

1
@ Shahar2k5 Weiß nicht wirklich, fing wieder an und arbeitete wie ein Zauber. Entschuldigung
Anearion

1
Klappt wunderbar! Vielen Dank für das Teilen :)
Vinayak

1
@ Shahar Barsheshet Danke. Du hast recht. Von der Devhost-Domain heruntergeladen und kein Problem aufgetreten.
MajorGeek

1
Ich verstehe etwas nicht: Warum gibt Ihr Tool einen anderen SHA-Schlüssel als die keytoolBefehlszeile? Soll es nicht zu identischen Ergebnissen führen, wenn es auf dieselbe Keystore-Datei angewendet wird?
Nightfixed

64

Die Anweisungen im Android-Tutorial von Facebook funktionieren unter Windows nicht gut . Ihr Beispiel zeigt, wie die Keytool-Ausgabe an openssl weitergeleitet wird. Wenn Sie dies jedoch unter Windows versuchen, ist die Ausgabe aus irgendeinem Grund nicht gültig. Ich stellte fest, dass ich Zwischendateien verwenden musste, damit es richtig funktionierte. Hier sind die Schritte, die für mich funktioniert haben:

Laden Sie zunächst openssl für Windows von Google herunter .

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

Nach dem Ausführen dieser Befehle wird der gültige Hash in der Datei base64.txt gespeichert. Kopieren Sie diese und fügen Sie sie in Ihre App-Einstellungen auf Facebook ein.


Funktioniert perfekt, alles andere hat versagt.
Oliver Dixon

2
Was für eine PITA - aber Bryan hat recht! Der Befehl gibt fast unabhängig davon einen Hash aus, egal ob Ihr Pfad falsch ist, das Passwort falsch ist oder die Pipes nicht richtig funktionieren - Sie erhalten immer noch einen HASH, aber es funktioniert nicht. Also (unter Windows) habe ich Powershell über Bord geworfen und Cygwin ausprobiert - funktioniert immer noch nicht. Erst nachdem ich die Datei debug.keystore in das Arbeitsverzeichnis kopiert hatte, konnte ich sie zum Laufen bringen und arbeiten lassen !!
Bobby

2
Zusammenfassend lässt sich sagen, dass Sie unter Windows entweder Bryans Technik zum Zerlegen verwenden oder Cygwin mit Ihrer Keystore-Datei im Arbeitsverzeichnis verwenden: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 Wenn Sie nicht zur Eingabe eines Kennworts aufgefordert werden, wurde die Keystore-Datei nicht ordnungsgemäß gefunden.
Bobby

Hat perfekt für mich funktioniert. Gute Antwort.
Ron

Wenn Sie vermeiden möchten, dass Hashes für falsche Kennwortfälle angezeigt werden, überprüfen Sie einfach Ihre mycert.bin, bevor Sie mit der openSSL fortfahren. Andernfalls würden Sie den falschen Passwortfehler-Text
haschen

50

Dies ist, was auf der offiziellen Seite von Facebook gegeben wird :

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

Lassen Sie mich diesen Befehl in Fragmente zerlegen.

  1. Suchen Sie nach "keytool.exe". Sie können das auf dem Laufwerk C: suchen. Sie finden es in "java jdk"oder "java jre". Wenn Sie mehrere Versionen installiert haben, wählen Sie eine aus.

  2. Öffnen Sie eine CMD-Eingabeaufforderung und wechseln Sie in das oben angegebene Verzeichnis "keytool.exe".

    Clip die "exe" und füge den obigen Befehl auf der Facebook-Seite ein.

  3. Bei der Eingabe wird eine Fehlermeldung angezeigt, dass OpenSSL nicht wie im Eingabe- / Ausgabebefehl erkannt wird. Lösung: Laden Sie "Openssl" von OpenSSL herunter (wenn Sie einen 64-Bit-Computer haben, müssen Sie openssl-0.9.8e X64 herunterladen ). Extrahieren und speichern Sie es überall ... Ich habe es auf dem Laufwerk C: im OpenSSlOrdner gespeichert

  4. Ersetzen Sie die openssl in dem obigen Befehl, in dem Sie einen OpenSSL-Fehler erhalten haben, durch "C: \ OpenSSL \ bin \ openssl" an beiden Stellen nach der Pipe "|".

  5. Wenn Sie zur Eingabe eines Passworts aufgefordert werden, geben Sie ein android.

Und Sie erhalten Ihren Hash-Schlüssel. Weitere Schritte finden Sie erneut auf der Facebook-Seite.


32

Wenn Sie diesen Code zu onCreateIhrer Aktivität hinzufügen , wird der Hash unter dem KeyHash- Tag in Ihrer logCat gedruckt

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

}

Sie können Ihrem Konto mehrere Hashkeys hinzufügen. Wenn Sie also im Debug ausgeführt wurden , vergessen Sie nicht, dies im Release-Modus erneut auszuführen .


tolle Lösung, ich denke, es sollte keine ausführbare nicht signierte Version geben? Eine nicht signierte Version sollte auf keinem Gerät installiert werden können. Diese Debug-Version sind mit Debug-Keystore signiert :)
Benleung

26

Gehen Sie folgendermaßen vor, um den Android-Schlüssel-Hashcode zu erhalten:

  1. Download von OpenSSL für Windows hier
  2. Entpacken Sie nun auf das Laufwerk C.
  3. Öffnen Sie eine CMD-Eingabeaufforderung
  4. Art cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Geben keytool -export -alias myAlias -keystore C:\Users\Sie dann nur Ihren Benutzernamen ein\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Getan

2
Gute Antwort. Vielen Dank.
Palani Kumar

1
Ist dies für den Debug-Schlüssel oder für den Release-Schlüssel?
IgorGanapolsky

@IgorGanapolsky Geben Sie anstelle von Pfad von myKeyStoreden Pfad Ihres Freigabeschlüssels an. Der obige Code ist für den Debug-Schlüssel
Pallavi

17

Die einfachste Lösung, die ich gefunden habe, ist folgende:

  • Öffnen Sie Log Cat
  • Versuchen Sie, mit dem Android SDK auf Facebook zuzugreifen
  • Suchen Sie im Protokoll nach der Zeile, die folgendermaßen aussieht:

    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
  • Kopieren Sie "abcdefgHIJKLMN + OPqrstuvwzyz" und fügen Sie es in den Facebook Android Key Hash-Bereich ein.


Dies ist der einfachste und effektivste Weg, nehmen Sie es einfach aus den Protokollen ohne auch nur openssl!
Luca C.

Dies ist die einzige funktionierende Lösung für mich!. Ich sehe das Protokoll nicht wie Sie, aber ich sehe es KeyHash: XWwXXXXX/5xxxxxxxxxxx=im Protokoll und habe mir geholfen!
Khang Dinh Hoang

14

Sie können den Schlüssel-Hash vom SHA-1-Schlüssel erhalten. Es ist sehr einfach, dass Sie Ihren SHA-1-Schlüssel (Signed APK) aus dem Play Store beziehen müssen.Geben Sie hier die Bildbeschreibung ein

Kopieren Sie nun diesen SHA-1-Schlüssel und fügen Sie ihn auf dieser Website http://tomeko.net ein. Überprüfen Sie auch das folgende Bild, um Ihren Schlüssel-Hash zu erhalten.

Geben Sie hier die Bildbeschreibung ein


1
Vielen Dank. Ich habe versucht, Schlüssel-Hash mit OpenSSL zu erhalten. Ich habe 1 Minute gebraucht und es war einfach.
Green Y.

1
Vielen Dank! Dies war die Lösung, da Google meine App jetzt signiert (ich verwende nur das Upload-Zertifikat / den Keystore)
Harrison,

13

Ich habe auf diese Weise für Linux OS & Windows OS getan :

Linux:

  • Laden Sie Openssl herunter
  • Terminal öffnen
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

Mit freundlicher Änderung Aliasname und Schlüsselspeicher mit seinem Weg als Ihre Anforderung.

Terminal würde fragen , für Kennwort von Schlüsselspeicher. Sie müssen ein Passwort für denselben Keystore angeben .

Endlich würden Sie den Release Hashkey bekommen .

Windows:

Schritte zur Veröffentlichung von Hashkey :

  • Download Openssl (Download von hier ), ich habe für 64-Bit- Betriebssystem heruntergeladen , mehr finden Sie hier
  • Extrahieren Sie die heruntergeladene Zip-Datei nur auf Laufwerk C: \
  • Öffnen Sie die Eingabeaufforderung
  • 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

Mit freundlicher Änderung Aliasname und Schlüsselspeicher mit seinem Weg als Ihre Anforderung.

Hinweis:

Bitte geben Sie Ihre Daten dort an, wo ich zwischen ** ** markiert habe.

Terminal würde fragen , für Kennwort von Schlüsselspeicher. Sie müssen ein Passwort für denselben Keystore angeben .

Endlich würden Sie den Release Hashkey bekommen .

Getan


Wie lautet das Passwort hier?
Akash Bisariya

@AkashBisariya, Passwort des Schlüsselspeichers, das Sie beim Erstellen des Schlüsselspeichers angegeben haben.
Hiren Patel

Wo finde ich den Schlüssel nach erfolgreicher Generierung?
Anand Phadke

11
  • Download OpenSSL für Windows hier finden Sie 64bit und 32bit hier

  • Extrahieren Sie die heruntergeladene Datei

  • Erstellen Sie den Ordnernamen openSSL im Laufwerk C.
  • Kopieren Sie alle extrahierten Elemente in den openSSL-Ordner (bin, include, lib, openssl.cnf).
  • Holen Sie sich Android Debug Keystore, Standard-Speicherort wird sein

C: \ Benutzer \ Benutzername \ .android \ debug.keystore

  • Holen Sie sich jetzt Ihre Eingabeaufforderung und fügen Sie diesen Code ein

keytool -exportcert -alias androiddebugkey -keystore C: \ Benutzer \ Benutzername.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 -binary | "C: \ openSSL \ bin \ openssl" base64

  • Drücken Sie die Eingabetaste und Sie erhalten den 28-stelligen Schlüsselcode

NEIN, es fragt nach dem Passwort. Eingabe androidgibt einen 24-stelligen Hash und Eingabe agibt 28-stelligen Hash. Keine Ahnung warum!
Sud007

schlechte Links! Sie haben überhaupt kein Keytool
KawaiKx

6

Sie müssen einen Keystore mit dem Keytool für signierte Apps für Android erstellen, wie in Android Site beschrieben. Anschließend müssen Sie cygwin installieren und anschließend openssl aus Google-Code installieren. Führen Sie dann einfach den folgenden Befehl aus, und Sie erhalten den Hash Schlüssel für Android und dann diesen Hash-Schlüssel in die von Ihnen erstellte Facebook-Anwendung einfügen. Und dann können Sie über die Android-Anwendung auf die Facebook-Anwendung zugreifen, um eine Wand zu veröffentlichen ("Publish_stream") könnte ein Beispiel sein.

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

Sie müssen den obigen Befehl von cygwin ausführen.


6

Laden Sie openSSL herunter -> Installieren Sie es -> es wird normalerweise in C: \ OpenSSL installiert

Öffnen Sie dann cmd und geben Sie ein

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

java (Enter)

dir (Enter)

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

Um die JDK-Version zu überprüfen, gehen Sie zu 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)

Sie werden nach dem Passwort für Android gefragt.


6
  1. Öffnen Sie einfach Ihre Hauptaktivitätsdatei und erstellen Sie die unten genannte Funktion:

         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 Führen Sie Ihre Anwendung aus. Dadurch wird ein Hash-Schlüssel für Ihre Anwendung generiert.

  1. Öffnen Sie nun log cat und suchen Sie mit "KeyHash" und kopieren Sie den Hash-Schlüssel.

  2. Wenn Sie den Hash-Schlüssel generieren, können Sie diese Funktion entfernen.


5

1) Erstellen Sie einen Schlüssel zum Signieren Ihrer Anwendung und merken Sie sich den Alias.

2) Installieren Sie OpenSSL.

3) Legen Sie den bin-Ordner von OpenSSL in Ihren Pfad.

4) Befolgen Sie die unter "Single Sign-On einrichten" auf der FB-Android-SDK- Seite genannten Schritte und generieren Sie Ihren Hash-Schlüssel. Stellen Sie sicher, dass Sie den richtigen Alias- und Keystore-Dateinamen eingeben.

5) Erstellen Sie eine Anwendung auf Facebok und geben Sie auf der Registerkarte "Mobile Geräte" diesen Hash-Schlüssel ein.


5

Offizielle Dokumentation auf der Facebook-Entwicklerseite :

@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: jederzeit;): P
Hardik Thaker

@HardikThaker Ich habe Ihren Code verwendet, er gibt mir genau den gleichen Keyhash, den ich mit diesem Befehl über das Terminal erhalten habe, keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64und ich erhalte immer noch einen Key-Hash, der keinem gespeicherten Key-Hash entspricht
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

Das hat bei mir funktioniert ...

Schritte:

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

Für Linux

Terminal öffnen:

Für Debug Build

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

Sie werden debug.keystore aus dem Ordner ".android" finden, kopieren Sie es aus und fügen Sie es auf dem Desktop ein und führen Sie den obigen Befehl aus

Zur Veröffentlichung Build

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

HINWEIS: Stellen Sie in beiden Fällen sicher, dass Sie nach dem Passwort gefragt werden müssen. Wenn nicht nach einem Passwort gefragt wird, bedeutet dies, dass im Befehl etwas nicht stimmt.


Ich erhalte unterschiedliche Werte mit unterschiedlichen Aliasnamen. Wie kann ich überprüfen, welcher korrekt ist?
Javal Nanda

fragt es nach einem Passwort mit beiden Aliasnamen?
Biraj Zalavadia

ya und welches Passwort ich auch eingebe, es gibt mir den Hash-Schlüssel. Meine App ist bereits im Play Store und native fb funktioniert jetzt nicht. Ich muss auf jeden Fall einen genauen Schlüssel-Hash für den Release-Build generieren. Entwickler schlagen vor, Code in onCreate in den folgenden Beitrag aufzunehmen, aber ich möchte, dass er ohne App-Update auf playstore stackoverflow.com/questions/15021790/… funktioniert
Javal Nanda

Ja, es gibt ein Problem mit Witwen mit openssl. Sie können mit dem in diesem Beitrag angegebenen Code erreichen.
Biraj Zalavadia

Wenn Sie auf ein Update im Playstore verzichten möchten. 1) Neue Android Demp App erstellen. 2) Fügen Sie diesen Code beim Erstellen ein. 3) Signieren Sie diese Demo-App mit dem gleichen Keystore wie Ihre App im App Store. 4) Führen Sie dann diese signierte Apk aus. 5) Verwenden Sie diesen Hash-Schlüssel schließlich
Biraj Zalavadia

4

Für eine Android-Anwendung

Dieser Code wird verwendet, um den Hash-Schlüssel in Ihrer Android-Anwendung für die Facebook-Integration abzurufen. Ich habe alle Geräte getestet und es funktioniert. Ändern Sie nur den Paketnamen dieses Codes:

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

Als Antwort auf ein ähnliches Problem stellte ich fest, dass dies für mich funktioniert:

  • Kopieren Sie die apkname.apkDatei, deren Hash Sie kennen möchten, in den Ordner ' Java \ jdk1.7.0_79 \ bin '
  • Führen Sie diesen Befehl aus keytool -list -printcert -jarfile apkname.apk
  • Kopieren Sie den SHA1Wert und konvertieren Sie ihn über diese Site
  • Verwenden Sie den konvertierten Keyhash-Wert (z . B. zaHqo1xcaPv6CmvlWnJk3SaNRIQ = ).

3

Die einfachste Lösung:

  1. Fügen Sie nicht den Hash-Schlüssel hinzu, sondern implementieren Sie alles andere
  2. Wenn die Facebook-Anmeldung gedrückt wird, wird die Fehlermeldung "Ungültiger Schlüssel-Hash. Der Schlüssel-Hash" xxx "stimmt mit keinem gespeicherten Schlüssel überein. ..." angezeigt.
  3. Öffnen Sie das Facebook App Dashboard und fügen Sie den Hash "xxx =" hinzu ("xxx" Hash aus dem Fehlerzeichen + "=")

3

Führen Sie den folgenden Befehl unter Mac oder Windows aus, um einen Hash Ihres Release-Schlüssels zu generieren, und ersetzen Sie Ihren Release-Schlüssel-Alias ​​und den Pfad zu Ihrem Keystore.

Verwenden Sie unter Windows:

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

Dieser Befehl sollte eine 28-Zeichen-Zeichenfolge generieren. Denken Sie daran , dass COPY und PASTE diesem Release Key Hash in Ihrem Facebook - App - ID Android - Einstellungen.

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

Siehe unter: https://developers.facebook.com/docs/android/getting-started#release-key-hash und http://note.taable.com


3

Verwenden Sie dies für den Druckschlüssel-Hash in 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

Meins auch in Android Studio gelöst, aber mit etwas anderem Ansatz.

So erhalten Sie den SHA-1-Wert in Android Studio.

  1. Klicken Sie auf Gradle
  2. Klicken Sie auf Bericht signieren
  3. Kopieren Sie SHA-1

Klicken Sie in Android Studio auf das markierte Feld

  1. Der SHA-1-Wert sieht folgendermaßen aus: CD: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    und öffnen Sie http://tomeko.net/online_tools/hex_to_base64.php , um Ihren SHA1-Wert in base64 zu konvertieren. Dies ist, was Facebook benötigt, um den generierten Hash "******************** =" zu erhalten und den Schlüssel-Hash auf die Facebook-App-Konsole zu kopieren.

Ein Teil dieser Antwort stammt von hier Github Link


2

Es gibt zwei Methoden, eine komplexe und eine einfache

Methoden Eins: (kleiner Komplex)

Zunächst müssen Sie ssl herunterladen 64bitoder 32bitentsprechend die Datei mit dem Namen herunterladen, der enach dem Versionscode openssl-0.9.8e_X64.zip enthält ODER openssl-0.9.8e_WIN32.zip nicht mit dem knach dem Versionscode.

und in AndroidStudio / jre / bin Verzeichnis platzieren. Wenn Sie nicht wissen, wo Sie platzieren sollen, können Sie dieses Verzeichnis finden, indem Sie mit der rechten Maustaste auf die Android Studio Verknüpfung klicken als:

Geben Sie hier die Bildbeschreibung ein

Jetzt haben Sie zwei erforderliche Dinge an einem Ort erledigt, aber Sie müssen immer noch den Weg für Ihre finden debug.keystore, der immer in der "C:\Users\yourusernamehere\.android\debug.keystore", zu finden ist.

HINWEIS Wenn Ihre App bereits veröffentlicht ist oder veröffentlicht werden soll, verwenden Sie Ihren Veröffentlichungssignatur-Keystore genau dann, wenn Sie im Entwicklungsmodus testen, als Sie Debug Keysotre verwenden können

Wenn alles eingerichtet ist, ordnen Sie den Befehl an, den Sie für die Hash-Schlüsselgenerierung ausführen möchten base64 format, und Ihr Befehl sieht folgendermaßen aus

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

Sie werden aufgefordert, ein Kennwort für den debug.keystore einzugeben, der standardmäßig Android ist. Wenn Sie Ihren eigenen Schlüssel verwenden, gehört das Passwort auch Ihnen. Die Ausgabe wird so aussehen, wenn alles wie erwartet läuft. Ich hoffe, es kann helfen

Geben Sie hier die Bildbeschreibung ein

Zweite Methode (entsprechend einfach)

Wenn Sie nicht alle oben genannten Schritte ausführen möchten, verwenden Sie einfach die folgende Methode, um den Hashkey zu protokollieren:

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

Ausgabe:

Geben Sie hier die Bildbeschreibung ein


1

Der beste Ansatz ist die Verwendung des folgenden Codes:

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

Aber ich war so frustriert darüber, dass es kein einfaches Tool gibt, um den HashKey für die Facebook-App zu generieren. Jedes Mal musste ich mit Openssl und Keytool spielen oder einen Code verwenden, um den Hash von der Signatur zu erhalten ...

Also habe ich ein einfaches KeyGenTool geschrieben, das diese Arbeit für Sie erledigt : -> KeyGenTool bei Google Play <-

Genießen :)


1

Ich habe einen kleinen Fehler gemacht, der beachtet werden sollte. Wenn Sie Ihren Keystore verwenden, geben Sie Ihren Aliasnamen an, nicht androiddebugkey ...

Ich habe mein Problem gelöst. Wenn nun Facebook auf meinem Gerät installiert ist, erhält meine App immer noch Daten zur Facebook-Login-Integration. Kümmere dich nur um deinen Hash-Schlüssel.

Siehe unten.

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

Drücken EnterSie dann - Sie werden nach dem Passwort gefragt und geben dann Ihr Keystore-Passwort ein, nicht 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());
                }
            }
        });
    }



}

Dieser Code generiert keinen gültigen Hash-Schlüssel für mich. @ Jamshids Antwort funktioniert für mich unter Mac OSX.
Loolooii

0

Kotlin-Code zum Abrufen des Hash-Schlüssels

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

Bitte vergessen Sie nicht, Schlüssel in der Debug- und Release-Umgebung zu generieren, da sie sich gemäß den Build-Einstellungen ändern.


0

Versuche dies :

  • Zwei Möglichkeiten, um den Hash-Schlüsselwert zu erhalten

1) Hash-Schlüssel über die Befehlszeile abrufen (offizielles Dokument: https://developers.facebook.com/docs/android/getting-started )

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

ODER

2) Holen Sie sich den Hash-Schlüssel mit 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());
            }
        }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.