wake-up-neo.net

androider Facebook-Integration ungültiger Schlüsselhash

hallo alle in einer meiner app ich brauche daten von fb ... das mache ich .. 

Ich habe App-ID erstellt, um sich erfolgreich einzuloggen, aber nach dem Abmelden melde ich mich dann an 

screen-shot of invalid key hash error facebook

Was mache ich falsch? Bitte schlagen Sie vor, dass ich Facebook sdk... verwende. Ich habe Facebook in meinem Telefon 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");
        }
157
Android

Der generierte Hash-Schlüssel ist falsch. Sie können den Hash-Schlüssel in zwei Schritten erhalten. Eine erfolgt über die Eingabeaufforderung. Eine andere ist die Codierung. Hash-Schlüssel durch Befehl Die Eingabeaufforderung funktioniert nur beim ersten Mal. Ich kenne den Grund nicht. Ich habe auch das gleiche Problem. Also habe ich es programmatisch durchprobiert.

Folge diesen Schritten:

Fügen Sie den folgenden Code in oncreate() 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) {

}

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

Führen Sie Ihre Anwendung aus. Gehen Sie zu der Aktivität, in der Sie den obigen Code eingefügt haben. Suchen Sie im Logcat nach "KeyHash". Sie können einen Schlüsselhash finden. Kopieren Sie den Schlüsselhash und wechseln Sie zur Dashboard-Seite der Facebook-Anwendung. Gehen Sie zu den Einstellungen und geben Sie die Details wie im folgenden Bild ein.

enter image description here

Sobald Sie den obigen Schritt abgeschlossen haben. Starten Sie die App erneut, und Sie können sich jetzt auf Facebook anmelden. __ Weitere Informationen zu Schlüsselhash finden Sie im Link

Wenn Sie auf der Einstellungsseite falsche Informationen hinzufügen, wird ein Fehler angezeigt. Verwenden Sie also die richtigen Informationen. Und wenn public (außer Ihnen) Ihre Anwendung verwenden muss, müssen Sie die Berechtigung(change "yes" in the "Status & Review" next to setting) aktivieren.

254

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

 enter image description here

Stellen Sie dann sicher, dass Ihre App live eingeschaltet ist 

developer.facebook.com

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

 enter image description here

Wenn dies nicht der Fall ist, befolgen Sie diese beiden Schritte, um Ihre App live zu machen 

Schritt 1 Gehen Sie zu Ihrer Anwendung -> Einstellung => und Kontakt-E-Mail hinzufügen und speichern Sie die Änderungen

Setp 2 Dann gehen Sie zu App Review und stellen Sie sicher, dass diese Option Ja ist. Ich habe einen Screenshot hinzugefügt

 enter image description here

Note: Wenn Sie den Hashschlüssel kopieren möchten, überprüfen Sie die BlueServiceQueue in Logcat.

106
Arpit Patel

Wenn Sie Google Play App Signing verwenden:

Öffnen Sie den Abschnitt "App-Signatur" in der Google Play Console, und erhalten Sie SHA1 von App-Signaturzertifikat. Konvertieren Sie es in base64, beispielsweise mit diesem Tool: http://tomeko.net/online_tools/hex_to_base64.php?lang=de

 console screenshot

 convert to base64 screenshot

106
Rafal Malek

Ich hatte das gleiche Problem. Ich war mir sicher, dass es an einem sehr kleinen Fehler lag und es war ein Problem. Ich fand die Lösung.

Beim Generieren vondebughash key in meinem Computer habe ich das Passwort meines Systems eingegeben. Aber das Passwort sollte folgendes sein:
Geben Sie das Keystore-Passwort ein: "Android"
Dies war das einzige Problem in meinem Fall.

----- Verwenden Sie diesen Befehl, umDebugkey-Hash zu generieren -

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

Geben Sie das Keystore-Passwort ein: "Android" 

----- Verwenden Sie diesen Befehl, umReleasekey zu erstellen: -

keytool -exportcert -alias "Alias ​​des Keystores" -keystore "Der Pfad zum Keystore beim Signieren der App" | openssl sha1 -binary | openssl base64

Geben Sie Ihr Keystore-Kennwort ein, nachdem Sie diesen Befehl ausgeführt haben.

68
Akash Bisariya

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

  • Während der ersten Ausführung einer neuen Facebook-App ist die Verbindung/Anmeldung möglich auch 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 gab. 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, die Existenz des Schlüsselspeichers usw. Möglicherweise müssen Sie auch ein Kennwort eingeben.

  • 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 höchstwahrscheinlich der Schlüssel-Hash, den Sie auf dem Bildschirm sehen, Ihr real one. Wenn nichts anderes funktioniert, geben Sie es in Facebook ein.

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

21
Martin Doychev

Gemäß Facebook-Login für Android müssen Sie den Key-Hash-Wert angeben. Um es zu erhalten, benötigen Sie die Taste , mit der Ihre Bewerbung unterschrieben wird.

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

Ich habe alles ausprobiert und nichts half meinem Fall bei meinen Kunden! Dann erinnerte sich mein Kunde daran, dass er die Facebook-App auf seinem Gerät installiert hatte ..__ geändert und ich habe die alten Hash-Schlüssel in der Facebook Developers Console durch den Schlüssel (wie oben vorgeschlagen) ersetzt, und es funktioniert! Die Facebook-App selbst könnte das Problem sein, also sollten Sie dies besser herausfinden Gerät mit installierter Facebook-App und auf einem Gerät mit nicht installierter Facebook-App. Beide Fälle werden behandelt.

7
Matan Dahan

Sie müssen zwei Schlüsselhashes für Debug und für Release erstellen.

Für Debug - Schlüsselhash:

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-Hash-Quelle

Für Release - Tastenhash:

Führen Sie unter OS X Folgendes aus: (Ersetzen Sie das, was zwischen <> durch Ihre Werte steht.)

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

Verwenden Sie unter Windows: (Ersetzen Sie das, was zwischen <> durch Ihre Werte steht.)

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

Schlüsselhashes Quelle freigeben

6
MBH

Ich hatte das gleiche Problem. Erstes Login, gut, aber dann ungültiger Schlüsselhash.

Auch wenn dies kein Unity-Thread ist, habe ich hier meine Antwort gefunden. Also werde ich meine Antwort hinterlassen, nur für den Fall, dass ein anderer (so verirrt wie ich) darüber stolpert.

Facebook SDK für Unity erhält den falschen Schlüsselhash. Es erhält den Schlüssel von "C:\Users \" Ihrem Benutzer ".Android\debug.keystore" und sollte es in einer perfekten Welt von dem Keystore erhalten, den Sie in Ihrem Projekt erstellt haben. Deshalb sagt es Ihnen, dass der Schlüsselhash nicht registriert ist.

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

Nach langer Forschung haben wir eine Lösung gefunden.

Wir hatten Berechtigungen gesetzt als:

loginButton.setReadPermissions (E-Mail mit öffentlichem Profil);

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

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

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

Und es hat wie ein Glück funktioniert!

Hoffentlich hilft das jemandem.

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

2
user3663906

Dieser Code gibt Ihnen Ihren Hash für Facebook, aber Sie müssen diesen Schritten folgen, um den Freigabebedingungs-Hash zu erhalten .. 1. Kopieren Sie diesen Code in Ihre Hauptaktivität

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

}
  1. signierte apk generieren.
  2. verbinden Sie Ihr Telefon mit dem Laptop und stellen Sie sicher, dass es verbunden bleibt.
  3. installieren und führen Sie die APK in Ihrem Telefon aus, indem Sie die Release-APK manuell auf Ihr Telefon verschieben.

  4. nun schau dir Android Logcat an (benutze den Filter KeyHash:). Du solltest deinen Release-Hash-Schlüssel für Facebook sehen. Kopieren Sie es einfach in Ihre https://developers.facebook.com/apps es ist unter Einstellungen.

  5. jetzt können Sie die App testen, sie sollte einwandfrei funktionieren.

    viel Glück. 

2
abdul jalil

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 Protokoll-Katze und wählen Sie Debug-Suche hier. Dann finden Sie den Hash-Schlüssel. Kopieren Sie nun diesen Hash-Schlüssel und wechseln Sie zur Website developer.facebook.app_id. Bearbeiten Sie dann den Hash-Schlüssel und drücken Sie dann auf Speichern. Führen Sie jetzt Ihr Android-Projekt erneut aus. Ich denke, das Problem wird gelöst.

1
pavel_coder

Nach so vielen Versuchen bin ich auf eine Lösung gestoßen. Ich habe sowohl Debug- als auch Freigabeschlüssel für die Facebook-Entwicklerkonsole generiert und hinzugefügt, und der Fehler wird weiterhin angezeigt.

Die einzige Lösung, die für mich funktionierte, war, das OpenSSL-Programm von Google zu deinstallieren und von http://slproweb.com/products/Win32OpenSSL.html herunterzuladen.

Es funktioniert wirklich wie Magie

1
Uchenna Nnodim

Wenn Sie den Keyhash manuell eingeben (z. B. von Mobile in das Facebook-Dashboard), müssen Sie unbedingt zwischen kleinem L und Kapital I unterscheiden.

1
Kashif Nazar

Ich hatte das gleiche Problem beim Debuggen meiner App. Ich habe den Hash, den Sie in dem angefügten Bild durchgestrichen haben (das von Facebook als ungültig gilt) neu geschrieben und in der Entwicklerkonsole von Facebook Schlüssel-Hashes hinzugefügt. Seien Sie vorsichtig bei Tippfehlern. 

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

1
Piotr Sagalara

Dies kann jemandem mit dem gleichen Problem helfen 

  1. Generieren Sie den Schlüsselhash mit dem folgenden Code 

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

wie benutze ich keytool

2.Paste es in das erforderliche Feld in facebook developer

3.In Android Studio Datei-> Projektstruktur  enter image description here

fügen Sie Signaturparameter hinzu

4. Flavours auswählen  enter image description here

wählen Sie die von uns erstellte Signierungskonfiguration aus

5. Wählen Sie den Build-Typ aus  enter image description here

6. Wählen Sie Build Varient aus und bauen Sie es auf

 enter image description here

1
CLIFFORD P Y

Hatte dasselbe Problem ... Stellen Sie sicher, dass Sie das APK mit demselben Gerät erstellen, mit dem der Hashschlüssel generiert wurde, der im Facebook-Entwicklerbereich gespeichert ist.

0
genericname

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

      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 dieses dann auf die Google-Entwicklerkonsole hochgeladen und dann das abgeleitete APK heruntergeladen, das aus irgendeinem Grund einen völlig anderen Schlüsselhash hat.

Ich habe dann logcat verwendet, um den neuen Schlüsselhash zu ermitteln, und fügte Facebook hinzu, wie andere Benutzer es beschrieben haben.

0
Michael

Was von Facebook verwendet wurde, ist nicht das Standardkennwort und der Aliasname für das Debuggen. Sie müssen es anschließend ä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 mit dem Standardkennwort nichts geändert haben, sollte es Android ..__ sein. Sie können es auch in der Datei build.gradle konfigurieren. Es sollte jedoch das gleiche Alias-Passwort zum Generieren von Hash verwendet werden.

Android{
    signingConfigs {
        release {
            storeFile file("~/.Android/debug.keystore")
            storePassword "Android"
            keyAlias "androiddebugkey"
            keyPassword "Android"
        }
    }
}
0
abhi shukla
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
ZafarHussain

Jungs hier gibt es viele richtige Antworten. Nur eine Sache. Einfügen des empfangenen Hashes in Anwendung -> Einstellungen -> Haupt nicht über das Schnellstart-Tutorial.

0
Chuck

Das hat bei mir funktioniert.

Kopieren Sie das APK auf Ihren PC im Ordner Programme\Java\jdkX.X.X_XXX\bin

In meinem Fall ist es C:\Programme\Java\jdk1.8.0_191\bin

Öffnen Sie CMD in diesem Verzeichnis und geben Sie Folgendes ein

keytool -list -printcert -jarfile YOUR_APK_NAME.apk

Kopieren Sie den SHA1-Wert in Ihre Zwischenablage Es wird ungefähr so ​​aussehen: 79:D0:E6:80:4E:28:1E:D1:88:28:CB:D7:E6:BE:2E:0C:FB:24:98:52

Gehen Sie dann zu http://tomeko.net/online_tools/hex_to_base64.php , um Ihren SHA1-Wert in base64 zu konvertieren.

Dies ist, was Facebook erfordert Holen Sie sich den generierten Hash "******************* =" und kopieren Sie den Schlüssel-Hash in die Einstellungen Ihrer Facebook-Entwickler-App.

0
Muhammad Ovi

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

  1. Klicken Sie auf Gradle
  2. Klicken Sie auf Signing Report
  3. Kopieren Sie den SHA-1-Wert

ODER -> Um den SHA-1-Wert aus der Datei keystore abzurufen.

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

Kopieren Sie den SHA1 -Wert in Ihre Zwischenablagewie 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 verlangt
Holen Sie sich den generierten Hash "*******************" und kopieren Sie den Schlüssel-Hash in die Facebook-App.

0
Sajid Zeb