Android Facebook-Integration mit ungültigem Schlüssel-Hash


194

In einer meiner Apps muss ich Daten von Facebook erhalten ... Ich mache das:

Ich habe eine App-ID erstellt . Es meldet sich erfolgreich an, aber nach dem Abmelden melde ich mich an und dann bekomme ich:

Screenshot des ungültigen Key-Hash-Fehlers Facebook

Was ist falsch ich mache? Ich verwende das Facebook SDK ... Ich habe Facebook auf meinem Handy installiert ... Es läuft gut in einem Emulator, aber auf dem ist die eingebaute Facebook-Anwendung nicht installiert.

Das ist mein Code:

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}

12
aber es läuft gut zum ersten Mal ligin es funktioniert nicht, wenn ich nach dem Abmelden angemeldet bin
Android

1
Ja, ich habe ... erstellt mit try {PackageInfo info = getPackageManager (). getPackageInfo ("com.facebook.samples.hellofacebook", PackageManager.GET_SIGNATURES); für (Signatursignatur: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (Signatur.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); }
Android

1
Ich habe dieses Problem hier gelöst! Hier verstanden cool! [ Stackoverflow.com/questions/5306009/… ] [1]
Madi

3
@ Android Obwohl das alt ist, sollte ich das erwähnen. Dies geschieht nicht, wenn sich ein Benutzer abmeldet und dann anmeldet. Dies geschieht, wenn Sie das zweite Mal debuggen, dh die App während des Debuggens neu installieren. Somit ändert sich der Hash. Dies passiert nicht im Fall einer signierten App (produktionsbereit)
Nilay Vishwakarma

1
Erhalten Sie den gleichen Fehler, wenn Sie die Facebook-App deinstallieren? Ich habe von zwei Telefonen aus getestet und dieser Fehler tritt nur auf, wenn die Facebook-App installiert ist.
Jaime Montoya

Antworten:


274

Der generierte Hash-Schlüssel ist falsch. Sie können den Hash-Schlüssel in zwei Schritten erhalten.

Einer ist über eine Eingabeaufforderung. Ein anderer ist durch Codierung. Der Hash-Schlüssel über eine Eingabeaufforderung funktioniert nur beim ersten Mal. Ich kenne den Grund nicht. Ich habe auch das gleiche Problem. Also habe ich es programmatisch ausprobiert.

Folge diesen Schritten:

Fügen Sie den folgenden Code ein oncreate().

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

Ändern Sie "com.example.packagename" mit Ihrem Paketnamen in der obigen Codierung (Sie finden Ihren Paketnamen möglicherweise in der Android-Manifestdatei).

Führen Sie Ihre Anwendung aus. Gehen Sie zu der Aktivität, in die Sie den obigen Code eingefügt haben. Suchen Sie in der LogCat-Datei nach "KeyHash". Möglicherweise finden Sie einen Schlüssel-Hash. Kopieren Sie den Schlüssel-Hash und rufen Sie die Dashboard-Seite der Facebook-Anwendung auf. Gehen Sie zu den Einstellungen und geben Sie die Details wie im folgenden Bild ein.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie den obigen Schritt abgeschlossen haben, starten Sie die App erneut. Sie können sich jetzt bei Facebook anmelden. Weitere Informationen zum Schlüssel-Hash finden Sie unter dem Link .

Wenn Sie auf der Einstellungsseite falsche Informationen hinzufügen, bedeutet dies, dass ein Fehler auftritt. Verwenden Sie dort also die richtigen Informationen. Und auch wenn die Öffentlichkeit (außer Ihnen) Ihre Anwendung verwenden muss, müssen Sie die Berechtigung aktivieren (ändern Sie "Ja" in "Status & Überprüfung" neben der Einstellung) .


20
Auf diese Weise haben Sie höchstwahrscheinlich einen Schlüssel-Hash für den Debug-Keystore erhalten. Es funktioniert für Sie im Entwicklungsmodus, nicht unbedingt für Ihren Produktionsmodus. Zumindest funktioniert es nicht für meine Produktions-App.
Liangjun

3
danke du hast mir viel zeit gespart ... facebook offizielles doc sollte nicht lesen es ist bullshit
djP

Vielen Dank, Alter!
KinGPinG

Hey durch diesen Code PackageInfo info = getPackageManager (). GetPackageInfo ("com.example.packagename", PackageManager.GET_SIGNATURES); für (Signatursignatur: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (Signatur.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); Ein anderer Hash-Schlüssel wird gesendet, als ich den Befehl in cmd unter Windows ausführte, war mein Hash-Schlüssel anders und ich habe ihn in FB hinzugefügt, aber das Protokoll zeigt immer noch den Hash des Programmcodes
Sagar Devanga

1
Hat mir viel Zeit gespart. Immer noch das Beste. Überprüfen Sie die Ausführlichkeit für den Keyhash und kopieren Sie ihn und fügen Sie ihn in die Facebook-Entwicklerseite ein. Machen Sie nicht den Fehler, es manuell einzugeben! Beachten Sie auch, dass sich der Keyhash bei jeder Deinstallation und Installation der App ändert.
Sanjeev

188

Wenn Sie die Google Play App-Signatur verwenden:

Öffnen Sie den App-Signaturbereich in der Google Play Console und rufen Sie den SHA-1-Hash unter App-Signaturzertifikat ab . Konvertieren Sie es dann in Base64 , zum Beispiel mit diesem Tool: Hexadezimal -> base64 String-Decoder

Konsolen-Screenshot

In Base64-Screenshot konvertieren


14
Herr! Du bist ein Lebensretter! Viele Liebe. Ich habe die Signatur des Play Store verwendet, während ich die Hashes meiner lokalen Release-Schlüssel in der Facebook-Konsole abgelegt hatte.
Taha Rushain

4
Sie retten mein Leben, ich benutze reagieren, niemand erwähnt über Play Store App Signing
TomSawyer

7
Danke dir! Es klappt! Sie können auch den Terminalbefehl dafür verwenden: echo YOUR_SHA1_CERTIFICATE_COPIED_FROM_GOOGLE_PLAY | sed s/\://g | xxd -r -p | base64
Yuriy Seredyuk

4
Dies muss für die Produktionsumgebung getan werden !!! Daumen hoch!
Bikey

Genau das, was ich wissen wollte. Hashkey ändert sich beim Debuggen jedes Mal, wenn Sie die App deinstallieren und installieren. Für signierte apk ist dies die beste Lösung! Sie machen das Leben leichter, danke!
Sanjeev

122

Wenn Sie mit diesem Problem konfrontiert sind, geben Sie diesen Schlüssel in Ihrem developer.facebook.com ein :

Geben Sie hier die Bildbeschreibung ein

Stellen Sie dann sicher, dass Ihre App auf developer.facebook.com live ist .

Dieser grüne Kreis zeigt an, dass die App live ist:

Geben Sie hier die Bildbeschreibung ein

Wenn dies nicht der Fall ist, führen Sie die folgenden zwei Schritte aus, um Ihre App live zu schalten:

Schritt 1 Gehen Sie zu Ihrer Anwendung → EinstellungKontakt-E-Mail hinzufügen und wenden Sie Änderungen speichern an.

Schritt 2 Gehen Sie zur Option App Review und stellen Sie sicher, dass diese Option Ja ist . Ich habe einen Screenshot hinzugefügt:

Geben Sie hier die Bildbeschreibung ein

Hinweis: Wenn Sie den Hashkey kopieren möchten, überprüfen Sie die BlueServiceQueue in LogCat .


5
Gibt es eine einfache Möglichkeit, diesen Hash vom Telefon zu kopieren?
Daniel Shatz

4
@ DanielShatz erscheint in logcat. Ich fand es erst heraus, nachdem ich es Buchstabe für Buchstabe kopiert hatte.
Alaa M.

4
@ DanielShatz Suchen Sie nach Tag BlueServiceQueuein Logcat
Alaa M.

4
Diese Antwort hat bei mir funktioniert. Nach einigen Versuchen, Hash manuell einzugeben, gab es den gleichen Fehler. Das Problem war, dass ich Großbuchstaben i "I" anstelle von Kleinbuchstaben L "l" eingab. Ich habe einige Zeit gebraucht, um das zu realisieren.
Markus

1
Das funktioniert, aber ich frage mich, woher FB diesen Hash-Schlüssel hat? Niemand wundert sich? Der Fehler war das Anzeigen des gut funktionierenden Hash-Schlüssels, aber selbst mit allen Befehlen oder das Erhalten von sha1 zu base64 durch das Signieren der Google App gab mir den Schlüssel, den FB im Fehler zeigte ...
Trotzdem

82

Ich habe das gleiche Problem. Ich war mir sicher, dass es an einem sehr kleinen Fehler lag und ja, das war es!

Ich habe die Lösung gefunden:

Beim Generieren des Debug- Hash-Schlüssels in meinem Computer habe ich das Kennwort meines Systems eingegeben. Das Passwort sollte jedoch wie folgt lauten:

Geben Sie das Keystore-Passwort ein: "android". Dies war das einzige Problem in meinem Fall.

----- Verwenden Sie zum Generieren des Debug- Schlüssel-Hash diesen Befehl -

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

Geben Sie das Keystore-Passwort ein: 'android'

----- Verwenden Sie diesen Befehl, um einen Release- Schlüssel-Hash zu generieren. -

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

Geben Sie nach Ausführung dieses Befehls Ihr Schlüsselspeicherkennwort ein.


5
Die Verwendung von "Android" als Passwort funktioniert für mich. das ist rätselhaft.
Adbie

3
Verwenden Sie dieses "Android" als Passwort, wenn Sie einen Hash-Schlüssel generieren.
Akash Bisariya

2
Stellen Sie auf einem Windows-Computer sicher, dass die Pfadvariable für die Ordner openssl \ bin und java .. \ bin richtig eingestellt ist. Setzen Sie auch die Variable HOMEPATH, um Befehle von Facebook verwenden zu können.
KawaiKx

1
Zumindest auf dem Mac musste ich das Java JDK installieren, damit dies funktioniert. Andernfalls generiert der obige Debug-Befehl immer noch einen Hash, aber der Hash funktioniert nicht und Sie werden nicht zur Eingabe eines Kennworts aufgefordert. Mit JDK funktionierte dies wie ein Zauber.
Lejonl

1
Diese Antwort sollte die RICHTIGE ANTWORT sein
Evan Ngo

20

Ich hatte das gleiche Problem. Ich habe kurz nach den möglichen Gründen für dieses seltsame Verhalten gesucht und Folgendes festgestellt:

  • Während der ersten Ausführung einer neuen Facebook-App wird die Verbindung / Anmeldung auch dann ermöglicht , wenn Sie keine Schlüssel-Hashes angeben.

  • Für mich hat das von Facebook bereitgestellte Tutorial nicht den richtigen Schlüssel-Hash generiert, da es die falsche Konfiguration ergab . Bei der Ausführung:

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

Stellen Sie sicher, dass Sie alle Eigenschaften überprüfen - das HOMEPATH, das Vorhandensein des Schlüsselspeichers usw. Möglicherweise müssen Sie auch ein Kennwort angeben.

  • Was die richtige Konfiguration erzeugte, war die von @Mahendran vorgeschlagene Lösung .

  • Wenn Sie den ursprünglich veröffentlichten Fehler sehen ( http://i.stack.imgur.com/58q3v.png ), ist der Schlüssel-Hash, den Sie auf dem Bildschirm sehen , höchstwahrscheinlich Ihr echter. Wenn nichts anderes funktioniert, geben Sie es in Facebook ein.

Ich habe all diese Ergebnisse erhalten mit: Windows 7 64-Bit-Edition, Android Studio 1.2.2, JDK 7.


2
Linux-Version: `keytool -exportcert -alias androiddebugkey -keystore $ HOME / .android / debug.keystore | openssl sha1 -binary | openssl base64`
ruX

1
Geben Sie einfach ein, was Facebook auf dem Gerätebildschirm anzeigt, das sollte funktionieren. Vielen Dank für den Hinweis @Martin
Ralphgabb

14

Laut Facebook Login für Android müssen Sie den Schlüssel-Hash-Wert angeben. Um es zu erhalten, benötigen Sie den Schlüssel , mit dem Sie Ihre Bewerbung signieren.

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64

1
Wenn Sie nur einen Kommentar hinzufügen möchten, verwenden Sie Ihren Produktionsschlüsselspeicher.
Liangjun

2
@Liangjun Eigentlich sollten Sie alle Ihre Schlüssel verwenden, da Sie sonst Facbeook Login nicht in der Debug-Umgebung testen können.
Pijusn

2
@ Pius, ja, ich benutze tatsächlich beide Schlüssel. Ich hätte es klar sagen sollen.
Liangjun

Ich erhalte eine Fehlermeldung für diesen Befehl (Keine Java-Laufzeit vorhanden, Anforderung der Installation), erhalte aber immer noch einen Schlüssel, ist jedoch ungültig und kopiere einfach den von logcat, der mir mitteilt, dass er nicht erkannt wird.
Cristi Băluță

8

Sie müssen zwei Schlüssel-Hashes erstellen, einen für Debug und einen für Release.

Für den Debug- Schlüssel-Hash:

Führen Sie unter OS X Folgendes aus:

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

Führen Sie unter Windows Folgendes aus:

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

Debug-Key-Hashes-Quelle

Für den Release- Schlüssel-Hash:

Führen Sie unter OS X Folgendes aus (ersetzen Sie die dazwischen liegenden <>Werte durch Ihre Werte) :

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

Verwenden Sie unter Windows (ersetzen Sie das, was dazwischen liegt, <>durch Ihre Werte) :

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

Geben Sie die Quelle der Schlüssel-Hashes frei


Ich erhalte eine Fehlermeldung für diesen Befehl (Keine Java-Laufzeit vorhanden, Anforderung der Installation), erhalte aber auch einen Schlüssel, der jedoch ungültig ist. Damit er funktioniert, kopiere ich einfach den von logcat
Cristi Băluță

Vielleicht haben Sie den PFAD Ihres Java- und Keytools nicht in der Befehlszeile festgelegt? @ CristiBăluță
MBH

7

Ich habe alle vorherigen Antworten ausprobiert und nichts hat meinem Fall bei meinen Kunden geholfen!

Dann erinnerte sich mein Kunde, dass er die Facebook-App auf seinem Gerät installiert hatte. Nachdem er es entfernt hat. Das Login hat perfekt funktioniert.

Der Hashkey wurde geändert und ich habe die alten Hash-Schlüssel in der Facebook Developers Console durch den Schlüssel aus dem Fehler (wie oben vorgeschlagen) ersetzt, und es funktioniert!

Die Facebook-App selbst könnte das Problem sein. Sie sollten dies also besser auf einem Gerät mit installierter Facebook-App und auf einem Gerät mit nicht installierter Facebook-App herausfinden und beide Fälle behandeln ...


Ja, hier habe ich diesen Fehler nach der Installation der Facebook-App auf dem Gerät erhalten. Also habe ich momentan 2 Hash-Schlüssel in die Facebook-Entwicklereinstellungen eingefügt.
Stuckedoverflow

3
Ich habe eine sehr ähnliche Situation wie Sie. Das, was mir geholfen hat, ist, auf Ihre FB-Seite zu gehen - Einstellungen - Apps - Entfernen Sie die App aus der Liste. Ändern Sie den Hash-Schlüssel und installieren Sie die fb-App und Ihre App neu. Und jetzt funktioniert es ...
anna_manzhula

4

So habe ich dieses Problem gelöst:

Zuerst müssen Sie den SHA-1-Wert erhalten. Dafür gibt es zwei Möglichkeiten.

Um den SHA-1-Wert in Android Studio zu erhalten.

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

ODER

Abrufen des SHA-1-Werts aus der Keystore- Datei.

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

Kopieren Sie den SHA-1- Wert folgendermaßen in Ihre Zwischenablage:

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

Öffnen Sie den Hexadezimal -> Base64-Stringdecoder , um Ihren SHA-1-Wert in Base64 zu konvertieren.

Dies ist, was Facebook benötigt.

Holen Sie sich den generierten Hash "******************** =" und kopieren Sie den Schlüssel-Hash in die Facebook-App.


3

Ich hatte das gleiche Problem. Melden Sie sich zuerst an, ganz gut, aber dann ein ungültiger Schlüssel-Hash.

Das Facebook SDK für Unity erhält den falschen Schlüssel-Hash. Es erhält den Schlüssel von "C: \ Users \" your user ".android \ debug.keystore" und sollte in einer perfekten Welt von dem Keystore stammen, den Sie in Ihrem Projekt erstellt haben. Aus diesem Grund wird Ihnen mitgeteilt, dass der Schlüssel-Hash nicht registriert ist.

Wie von Madi vorgeschlagen , können Sie den Schritten unter diesem Link folgen , um den richtigen Schlüssel zu finden. Stellen Sie einfach sicher, dass Sie sie auf den Schlüsselspeicher in Ihrem Projekt verweisen. Andernfalls erhalten Sie nicht den richtigen Schlüssel.


3

Der folgende Code gibt Ihnen Ihren Hash für Facebook, aber Sie müssen diese Schritte ausführen, um den Release Candidate-Hash zu erhalten.

  1. Kopieren Sie diesen Code und fügen Sie ihn in Ihre Hauptaktivität ein

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                               "com.example.packagename",
                               PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    }
    catch (NameNotFoundException e) {
    }
    catch (NoSuchAlgorithmException e) {
    }
  2. Generieren Sie eine signierte APK- Datei.

  3. Schließen Sie Ihr Telefon an einen Laptop an und stellen Sie sicher, dass es verbunden bleibt.
  4. Installieren Sie die APK-Datei und führen Sie sie auf Ihrem Telefon aus, indem Sie die freigegebene APK manuell auf Ihr Telefon verschieben.
  5. Schauen Sie sich jetzt Android LogCat an (verwenden Sie den Filter KeyHash :) . Sie sollten Ihren Release-Hash-Schlüssel für Facebook sehen. Kopieren Sie es einfach und fügen Sie es in Ihre ein https://developers.facebook.com/apps. Es ist unter Einstellungen.
  6. Jetzt können Sie die App testen, sie sollte einwandfrei funktionieren.

Beachten Sie, dass der Code nur funktioniert, wenn Sie signierte apk generieren. sonst wird es nur für frei apk geben Sie APK Hash debuggen , die nutzlos ist
abdul jalil

Hallo, als ich der Facebook-App einen generierten Hashkey gegeben habe, funktioniert er einwandfrei, aber wenn ich versuche, ihn auf einem anderen Gerät auszuführen, wird erneut "UNGÜLTIGER HASH-SCHLÜSSEL" angezeigt. Wie kann ich den Hash-Schlüssel für den Facebook-Inhalt für die Arbeit auf allen Geräten festlegen?
Deepak

2

Nach langer Recherche haben wir eine Lösung gefunden.

Wir hatten Berechtigungen festgelegt als:

loginButton.setReadPermissions(public_profile email);

Dies funktionierte zum ersten Mal, aber als wir uns erneut bei Facebook anmeldeten, gab es den ungültigen Hash-Fehler .

Die einfache Lösung bestand darin, die obige Zeile zu ändern in:

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

Und es hat wie eine Glückseligkeit funktioniert!

Facebook sollte die richtige Ausnahme anstelle des irreführenden ungültigen Hash-Schlüsselfehlers zurückgeben.


Ich habe das gleiche Problem. Ich habe Ihre Lösung ausprobiert, kann mein Problem aber immer noch nicht lösen @ user3663906
BekaKK

2

Nach so vielen Versuchen bin ich auf eine Lösung gestoßen. Ich habe sowohl Debug- als auch Release-Schlüssel generiert und zur Facebook-Entwicklerkonsole hinzugefügt und trotzdem den Fehler erhalten.

Die einzige Lösung, die für mich funktioniert hat, war, das OpenSSL-Programm von Google zu deinstallieren und von Win32 / Win64 OpenSSL Installer für Windows herunterzuladen

Es funktioniert wirklich wie Magie.


2

Obwohl diese Frage auf viele hilfreiche Arten beantwortet wurde, wollte ich nur hinzufügen, dass ich, als ich der Antwort von Rafal Maleks folgte (mithilfe der Hash-Tasten in der Google Play Console) , den SHA1-Schlüssel für die App- Signierung NICHT verwenden konnte und trotzdem die generische Version erhielt Fehler von Facebook. Stattdessen musste ich den Fingerabdruck des SHA-1-Zertifikats aus dem Teil " Zertifikat hochladen" verwenden (direkt unter dem Teil "App-Signierung" in der Google Play Console). Gleicher Prozess sonst;

  1. Kopieren Sie den Fingerabdruck des SHA-1-Zertifikats aus dem Abschnitt " Zertifikat hochladen " in der Google Play Console

  2. Konvertieren Sie den SHA-1 mit: http://tomeko.net/online_tools/hex_to_base64.php und kopieren Sie die Ausgabe (base64)

  3. Fügen Sie es in die Eingabe von Key Hashes auf developer.facebook.com ein und speichern Sie die Änderungen.

Hoffentlich ist diese Antwort nicht zu redundant und hilft jemandem, der sie nicht mit dem App Signing-Zertifikat zum Laufen bringen kann.

Jetzt funktioniert die Facebook-Anmeldung in meiner App sowohl im Debug- als auch im Release-Modus.


1

Fügen Sie den folgenden Code in Ihre OnCreate-Methode ein:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (NameNotFoundException e) {
    e.printStackTrace();
}
catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

Ändern Sie einfach den Paketnamen. Gehen Sie dann zu Ihrer LogCat-Datei und wählen Sie hier Debug-Suche. Dann finden Sie den Hash-Schlüssel. Kopieren Sie nun diesen Hash-Schlüssel und rufen Sie die Website developer.facebook.app_id auf, bearbeiten Sie Ihren Hash-Schlüssel und drücken Sie Save. Führen Sie nun Ihr Android-Projekt erneut aus. Ich denke, das Problem wird gelöst.


7
Wiederholung des anderen
Beto Caldas

1

Dies kann jemandem mit dem gleichen Problem helfen.

  1. Generieren Sie den Schlüssel-Hash mit dem folgenden Code

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

    Verwendung von Keytool

  2. Fügen Sie es in das gewünschte Feld im Facebook-Entwickler ein

  3. In Android Studio das Menü DateiProjektstruktur

    Geben Sie hier die Bildbeschreibung ein

    Signaturparameter hinzufügen.

  4. Wählen Sie Aromen

    Geben Sie hier die Bildbeschreibung ein

    Wählen Sie die von uns erstellte Signaturkonfiguration aus.

  5. Build-Typ auswählen

    Geben Sie hier die Bildbeschreibung ein

  6. Wählen Sie die Build-Variante und erstellen Sie sie

    Geben Sie hier die Bildbeschreibung ein


1

Ich hatte das gleiche Problem beim Debuggen meiner App. Ich habe den Hash, den Sie im angehängten Bild durchgestrichen haben (der von Facebook als ungültig bezeichnet wird), neu geschrieben und in der Entwicklerkonsole von Facebook zu wichtigen Hashes hinzugefügt. Pass nur auf Tippfehler auf.

Diese Lösung ist eher eine einfache Problemumgehung als eine richtige Lösung.


1

Wenn Sie den Keyhash manuell eingeben (z. B. vom Handy zum Facebook-Dashboard), müssen Sie zwischen kleinem L und Großbuchstaben I unterscheiden.


1
try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "www.icognix.infomedia",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (PackageManager.NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

0

Was Facebook verwendet, ist nicht das Standardkennwort und der Alias ​​für das Debuggen. Sie müssen es im Folgenden ändern und es wird funktionieren.

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Wenn Sie nichts mit dem Standardkennwort geändert haben, sollte es "android" sein .

Sie können es auch in der Datei build.gradle konfigurieren. Für die Generierung des Hashs sollte jedoch dasselbe Alias-Passwort verwendet werden:

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

0

Hier sind viele richtige Antworten. Nur eine Sache:

Fügen Sie den empfangenen Hash in AnwendungEinstellungenHaupt ein , nicht über das Schnellstart-Tutorial.


0

Ich hatte das gleiche Problem.

Stellen Sie sicher, dass Sie die APK-Datei mit demselben Gerät erstellen, auf dem der Hashkey generiert wurde, der im Bereich für Facebook-Entwickler gespeichert ist.


0

Ich habe dies behoben, indem ich Folgendes hinzugefügt habe MainApplication.onCreate:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.genolingo.genolingo",
                           PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
        KeyHash.addKeyHash(hash);
    }
}
catch (PackageManager.NameNotFoundException e) {
    Log.e("PackageInfoError:", "NameNotFoundException");
}
catch (NoSuchAlgorithmException e) {
    Log.e("PackageInfoError:", "NoSuchAlgorithmException");
}

Ich habe dies dann auf die Google-Entwicklerkonsole hochgeladen und dann die abgeleitete APK heruntergeladen , die aus irgendeinem Grund einen völlig anderen Schlüssel-Hash hat.

Ich habe dann LogCat verwendet, um den neuen Schlüssel-Hash zu ermitteln, und ihn Facebook hinzugefügt, wie andere Benutzer beschrieben haben.


0

Wenn Sie Release-Key-Hashes generieren, stellen Sie sicher, dass Sie das tatsächliche Kennwort Ihres Keystores eingeben und nicht "android".

Das war mein Problem. Die Debug-Version funktionierte, die APK-Version jedoch nicht.


-1

Verwenden Sie den folgenden Code in der onCreate () -Methode Ihrer Aktivität:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "your application package name",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

Führen Sie diesen Code aus. Dadurch wird der Hash-Schlüssel generiert. Kopieren Sie diesen KeyHash in die Facebook-Anwendungseinstellung und speichern Sie die Änderungen. Dann melden Sie sich bei Ihrer Anwendung an. Dies wird auch in Zukunft perfekt funktionieren.


3
Wiederholung des anderen
Beto Caldas
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.