it-swarm.com.de

Android Facebook SDK: Freigabeschlüsselhash generieren

Ich baue eine App, in der sich Benutzer mit Facebook anmelden können.

Ich habe die Hash-Schlüssel wie folgt erstellt:

try {
         PackageInfo info = getPackageManager().getPackageInfo(
         "com.app.package",
         PackageManager.GET_SIGNATURES);
         for (Signature signature : info.signatures) {
         MessageDigest md = MessageDigest.getInstance("SHA");
         md.update(signature.toByteArray());
         Log.d("KeyHash", "KeyHash:"+ Base64.encodeToString(md.digest(),
         Base64.DEFAULT));
         Toast.makeText(getApplicationContext(), Base64.encodeToString(md.digest(),
                 Base64.DEFAULT), Toast.LENGTH_LONG).show();
         }
         } catch (NameNotFoundException e) {

         } catch (NoSuchAlgorithmException e) {

         }

Im Debug-Modus funktioniert alles gut. 

Wenn ich das Projekt zur Freigabe exportiere, wird folgende Fehlermeldung angezeigt:

"Invalid key hash. The key hash ****************** does not match any stored key hashes"

Ich füge den im Facebook Developer Dashboard gedruckten Schlüssel ein, aber die Anwendung gibt mir immer noch diesen Fehler.

Das komplette Paket meiner Aktivität ist "com.app.package.views" und ich habe versucht, dieses Paket (als Google Play-Paketname) im Dashboard zu verwenden, aber es hat sich nichts geändert.

Wie kann ich es lösen? Wie kann ich den richtigen Freigabeschlüsselhash generieren?

30

Sie haben die Schritte befolgt, die Facebook für die Erstellung einer Anmeldeanwendung bietet.

Sie benötigen einen 'Produktions-Keyhash', den Sie beim Start Ihres Release-Keystores erhalten:

Von der Kommandolinie:

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

Fügen Sie diesen Schlüssel zu den Optionen der Facebook-App-Seite hinzu.

Weitere Informationen: https://developers.facebook.com/docs/Android/getting-started/

44
Abhi

Ich finde eine Lösung. für MAC

Verwenden Sie diese, um YOUR_RELEASE_KEY_ALIAS zu erhalten:

keytool -list -keystore /Users/***/Documents/keystore/***.jks

und dieses, um dein Release Keyhash zu bekommen:

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore /Users/***/Documents/keystore/***.jks | openssl sha1 -binary | openssl base64

Für mich geht das. 

33
Rahim Rahimov

Die einfachste Lösung.

1) Unterschreiben Sie Ihren Apk.

2) Verbinden Sie Ihr Gerät mit der Maschine und installieren Sie die signierte APK auf einem echten Gerät.

3) Wenn das Facebook-Login gedrückt wird, erhalten Sie die Fehlermeldung "Ungültiger Schlüsselhash. Der Schlüsselhash" xxx "stimmt mit keinem gespeicherten Schlüssel überein ..." in Ihrem Logcat.

4) Kopieren Sie den logcat-Hash-Schlüssel und geben Sie diesen Schlüssel an Developers.facebook.com/apps/104...../settings/

24
Bharat Hangarge

Wir müssen das Wort "openssl" durch den Pfad einer Datei in der openssl-Struktur ersetzen.

Mein CMD-Befehl lautet also:

C:\Program Files\Java\jre1.8.0_45\bin>keytool -exportcert -alias Informatheus -keystore C:\Users\Atendimento\Dropbox\AndroidKeystore\Keystore | C:\Users\Atendimento\Desktop\openssl\bin\openssl sha1 -binary | C:\Users\Atendimento\Desktop\openssl\bin\openssl base64

Es funktionierte.

7
Informatheus

// Fügen Sie diese Methode Ihrer ersten Aktivität hinzu, öffnen Sie das Protokoll und suchen Sie nach dem Base64-Tag 

public void getHashkey(){
    try {
        PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());

            Log.i("Base64", Base64.encodeToString(md.digest(),Base64.NO_WRAP));
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.d("Name not found", e.getMessage(), e);

    } catch (NoSuchAlgorithmException e) {
        Log.d("Error", e.getMessage(), e);
    }
}
3

Facebook SDK verwendet zwei verschiedene Schlüssel, einen ist der Debug-Schlüssel, den Sie während Ihrer Entwicklungsphase verwenden können, und der andere ist der Freigabeschlüssel, der verwendet wird, wenn Sie ein signiertes Anwendungspaket erstellen. Hier finden Sie einen Link zum Erstellen von Debug- und Freigabeschlüsseln.

Developer.Facebook

Checke auch this SO aus. 

1
MajorGeek

Der einfachste Weg, um freigegebene Hash-Schlüssel zu erhalten, lautet: Holen Sie den SHA1-Schlüssel der freigegebenen apk-Datei mit folgendem Befehl:

keytool -list -v -keystore keystore_path.jks -alias keystoreAlias

Dann erhalten Sie den SHA1-Schlüssel. Kopieren Sie diesen Schlüssel und generieren Sie den Hash-Schlüssel mithilfe der folgenden Site:

Link zum Hash-Schlüssel erhalten

Sie erhalten eine Ausgabe (base64): Kopieren Sie sie und verwenden Sie, wo Sie wollen ..

0
Pratibha Sarode

Wenn Sie Ihre App bereits im Play Store haben, haben Sie folgende Möglichkeiten: 

  1. Gehe zu Release Management 

  2. App Signing in Release Management auswählen 

  3. Sie können den SHA1-Schlüssel im Hex-Format App signing certificate sehen. 

  4. Kopieren Sie den SHA1 im Hex-Format und konvertieren Sie ihn in das Base64-Format. Sie können dieses link ohne den SHA1:-Teil des Hexes verwenden.

  5. Gehen Sie zur Facebook-Entwicklerkonsole und fügen Sie den Schlüssel (nach der Umwandlung in Basis 64) im settings —> basic –> key hashes hinzu.

0
Nadhir Falta