Ich arbeite an einer Android-App, in die ich eine Facebook-Posting-Funktion integrieren möchte. Ich habe das Facebook-Android-SDK heruntergeladen und bekam dort die Readme.md (Textdatei), in der es erwähnt ist, den Schlüsselhash für Android zu erzeugen. Wie generiere ich es?
Hier sind die Schritte
Laden Sie openssl von Google code herunter (Wenn Sie eine 64-Bit-Maschine haben, müssen Sie openssl-0.9.8e X64 nicht die neueste Version herunterladen).
Extrahieren Sie es. Erstellen Sie einen Ordner - OpenSSL in C:/und kopieren Sie den extrahierten Code hier.
debug.keystore-Dateipfad erkennen. Wenn Sie nicht gefunden haben, führen Sie eine Suche in C:/aus und verwenden Sie im nächsten Schritt den Befehl Pfad.
ermitteln Sie den Pfad der keytool.exe und wechseln Sie zu diesem Befehl in/Eingabeaufforderung. 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
Für mehr Info Besuch hier
Sie können diesen Code in jeder Aktivität verwenden. Es wird den Hash-Schlüssel im Logcat, dem Debug-Schlüssel, protokolliert. Dies ist einfach und erleichtert 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;)
Ich habe ein kleines Tool für Windows und Mac OS X erstellt. Werfen Sie einfach die Schlüsselspeicherdatei ein, und rufen Sie den Hash-Schlüssel ab.
Wenn Sie die Standarddatei debug.keystore verwenden möchten, verwenden Sie den Standardaliasnamen und das Kennwort. Verwenden Sie andernfalls Ihre eigene Keystore-Datei und Werte.
Schauen Sie sich die Datei an, laden Sie die Windows-Version herunter oder laden Sie die Mac OS X-Version herunter (Der Dev-Host ist manchmal inaktiv ... Wenn also der Link unterbrochen wird, PM mich und ich werde es reparieren).
Ich hoffe das hilft euch Jungs ...
31.12.2014 - EDIT: Host in AFH geändert Bitte lassen Sie mich wissen, wenn die Links beschädigt sind
21. November 2013 - EDIT:
Als Benutzer nachgefragt, fügte ich einen Standardspeicherort für den Keystore und einen DONATE-Button. Fühlen Sie sich frei, ihn zu verwenden ein, wenn ich Ihnen geholfen habe. :)
Die Anweisungen in das Android-Tutorial von Facebook funktionieren nicht gut unter Windows. Ihr Beispiel zeigt, wie die keytool-Ausgabe an openssl übergeben 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 funktioniert. Hier sind die Schritte, die für mich gearbeitet haben:
Beginnen Sie mit dem Herunterladen von openssl für Windows von 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
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 bei Facebook ein.
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 aufteilen.
Suchen Sie nach "keytool.exe"
. Sie können das auf Laufwerk C: suchen. Sie finden es in "Java jdk"
oder "Java jre"
. Wenn Sie mehrere Versionen installiert haben, wählen Sie eine aus.
Öffnen Sie eine CMD-Eingabeaufforderung und wechseln Sie in das Verzeichnis, in dem Sie "keytool.exe"
gefunden haben.
Schneiden Sie das "exe" ab und fügen Sie den obigen Befehl auf der Facebook-Seite ein.
Bei der Eingabe dieses Befehls wird ein Fehler angezeigt, dass OpenSSL nicht wie im Eingabe-Ausgabebefehl erkannt wird .. Lösung: Laden Sie "Openssl" von OpenSSL herunter (wenn Sie eine 64-Bit-Maschine haben, müssen Sie herunterladen openssl-0.9.8e X64 ). Entpacke und speichere es überall ... Ich habe es auf dem Laufwerk C: im Ordner OpenSSl
gespeichert
Ersetzen Sie das openssl im obigen Befehl, in dem Sie einen Fehler von OpenSSL erhalten haben, durch "C:\OpenSSL\bin\openssl" an beiden Stellen nach der Pipe "|".
Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie Android
ein.
Und Sie erhalten Ihren Hash-Schlüssel. Weitere Schritte finden Sie erneut auf der Facebook-Seite.
Wenn Sie diesen Code zu onCreate
Ihrer Aktivität hinzufügen, wird der Hash unter dem Tag KeyHash in Ihrem 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 mehrere Hashkeys für Ihr Konto hinzufügen. Wenn Sie also im Debug-Modus ausgeführt haben vergessen Sie nicht, dies im Release-Modus erneut auszuführen.
Gehen Sie folgendermaßen vor, um den Android-Schlüssel-Hashcode zu erhalten:
cd C:\Program Files\Java\jdk1.6.0_26\bin
keytool -export -alias myAlias -keystore C:\Users\
ihr Benutzername \.Android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
ein. Die einfachste Lösung, die ich gefunden habe, ist folgende:
Suchen Sie nach der Zeile im Protokoll, 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
Kopiere "abcdefgHIJKLMN + OPqrstuvwzyz" und füge es in den Facebook Android Key Hash-Bereich ein.
Ich habe dies für Linux OS & Windows OS getan:
keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64
Bitte ändern Sie Aliasname und Keystore mit dem Pfad als Anforderung.
Das Terminal würde ask für Passwort des Keystore eingeben. Sie müssen Kennwort angeben für dasselbe Keystore eingeben.
So erhalten Sie schließlich den Release Hashkey.
Schritte für ReleaseHashkey:
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
Bitte ändern Sie Aliasname und Keystore mit dem Pfad als Anforderung.
Das Terminal würde ask für Passwort des Keystore eingeben. Sie müssen Kennwort angeben für dasselbe Keystore eingeben.
So erhalten Sie schließlich den Release Hashkey.
Erledigt
laden Sie hier openSSL für Windows herunter 64bit und 32bit finden Sie hier
extrahiere die heruntergeladene Datei
C:\Benutzer\Benutzername\.Android\debug.keystore
keytool -exportcert -alias androiddebugkey -keystore C:\Benutzer\Benutzername.Android\debug.keystore | "C:\openSSL\bin\openssl" sha1 -binary | "C:\openSSL\bin\openssl" base64
Sie müssen einen Schlüsselspeicher 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 von google code installieren Wenn Sie den folgenden Befehl ausführen, erhalten Sie den Hash-Schlüssel für Android und geben diesen Hash-Schlüssel in die von Ihnen erstellte Facebook-Anwendung ein. Und dann können Sie auf die Facebook-Anwendung über die Android-Anwendung zugreifen, um eine Pinnwand ("publish_stream") zu erstellen.
$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64
Sie müssen den obigen Befehl von cygwin ausführen.
Öffnen Sie einfach Ihre Hauptaktivitätsdatei und erstellen Sie die unten genannte Erwähnungsfunktion:
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.
Öffnen Sie nun log cat und suchen Sie mit "KeyHash" und kopieren Sie den Hash-Schlüssel.
Wenn Sie den Hash-Schlüssel generieren, können Sie diese Funktion entfernen.
Laden Sie openSSL -> Install it -> herunter, das normalerweise inC installiert wird:\OpenSSL
dann öffne cmd und tippe
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 einem Kennwort gefragt, bei dem es sich um Android handelt.
1) Erstellen Sie einen Schlüssel zum Signieren Ihrer Anwendung und merken Sie sich den Alias.
2) Installieren Sie OpenSSL.
3) Fügen Sie den bin-Ordner von OpenSSL in Ihren Pfad ein.
4) Folgen Sie den Schritten unter "Single Sign-On einrichten" auf dem FB-Android-SDK Seite und generieren Sie Ihren Hash-Schlüssel. Vergewissern Sie sich, dass Sie den korrekten Alias- und Keystore-Dateinamen eingeben.
5) Erstellen Sie eine Anwendung auf Facebok und geben Sie auf der Registerkarte Mobile Devices diesen Hash-Schlüssel ein.
Offizielle Dokumentation auf 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) {
}
Für Linux
Offenes Terminal:
Für Debug Build
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
sie finden den Ordner debug.keystore aus dem Ordner ".Android", kopieren ihn und fügen ihn auf dem Desktop ein
Für Release Build
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
HINWEIS: Stellen Sie sicher, dass in beiden Fällen das Kennwort abgefragt werden muss. Wenn Sie nicht nach einem Kennwort gefragt werden, bedeutet dies, dass der Befehl fehlerhaft ist.
keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.Android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64
Das hat für mich 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
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) {
}
}
Als antwortete zu einem ähnlichen Thema habe ich festgestellt, dass dies für mich arbeitet:
apkname.apk
-Datei, von der Sie den Hash erfahren möchten, in den Ordner "Java\jdk1.7.0_79\bin"keytool -list -printcert -jarfile apkname.apk
SHA1
-Wert und konvertieren Sie ihn mithilfe dieser siteUm einen Hash des Freigabeschlüssels zu generieren, führen Sie den folgenden Befehl unter Mac oder Windows aus, wobei Sie den Freigabeschlüsselaliasnamen und den Pfad zum Keystore verwenden.
Verwenden Sie unter Windows:
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Dieser Befehl sollte eine Zeichenkette mit 28 Zeichen erzeugen. Denken Sie daran, dass COPY und PASTE diesen Freigabeschlüssel in die Android-Einstellungen Ihrer Facebook-App-ID einbinden.
image: 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
Die einfachste Lösung:
Am besten verwenden Sie den folgenden Code:
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();
}
}
Ich war jedoch so frustrierend, dass es kein einfaches Werkzeug 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 bekommen ...
Also habe ich ein einfaches KeyGenTool geschrieben, das diese Arbeit für Sie erledigt: -> KeyGenTool bei Google Play <-
Genießen :)
Verwenden Sie diesen Befehl, wenn Sie ssl im Laufwerk c und im Ordner openssl geöffnet halten.
keytool -exportcert -alias androiddebugkey -keystore "C:\Users\AJAY SUNDRIYAL.Android\debug.keystore" | openssl sha1 -binary | openssl base64
Ich habe einen kleinen Fehler gemacht, den man sich merken sollte. Wenn Sie Ihren Keystore verwenden, geben Sie Ihren Aliasnamen an, nicht androiddebugkey ...
Ich habe mein Problem gelöst. Wenn jetzt 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
Dann drücken Enter - Es fragt Sie nach dem Passwort und gibt dann Ihr Keystore-Passwort ein, nicht Android.
Cool.
Für Leute, die nicht wissen, wie man schreibt, ist AivarsDas wichtigstes Gen-Tool für Google Play die einfachste Lösung. Holen Sie sich einfach den Hash-Schlüssel und kopieren Sie ihn in die Facebook-App-Einstellungen. Die Freigabe des Keygen-Tools führt dazu, dass meine App auf meinem Handy abstürzt. Daher habe ich sie einfach manuell in den Editor eingegeben und in fb kopiert. Endlich diesen Schritt nach Tagen der Frustration hinter sich
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());
}
}
});
}
}
Für Windows:-
1.Download openssl(openssl-for-windows)
2.Copy and Paste openssl folder into c drive.
3.C:\Android\.Android\debug.keystore => Debug Keystore path
4.C:\Program Files\Java\jdk1.8.0_181 => JDK PATH
5.Go to jdkpath=>Enter the below command. (keytool inside Debug keystore path)
keytool -exportcert -alias androiddebugkey -keystore C:\Android.android\debug.keystore | "C:\openSSL\bin\openssl" sha1 -binary | "C:\openSSL\bin\openssl" base64
Ich habe versucht, den Key Hash mit keytool
zu generieren, und irgendwie ist der generierte Hash nicht der gültige.
Sie sparen Zeit und Mühe, wenn Sie es nur von packageManager
selbst bekommen können.
try {
val info = this.packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
for (signature in info.signatures) {
MessageDigest.getInstance("SHA").apply {
update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(digest(), Base64.DEFAULT))
}
}
} catch (e: PackageManager.NameNotFoundException) {
Log.d("KeyHash Exception:", "${e.message}")
} catch (e: NoSuchAlgorithmException) {
Log.d("KeyHash Exception:", "${e.message}")
}
Um Ihren Schlüssel-Hash auf Ihrem lokalen Computer zu generieren, führen Sie zunächst das Java-Hilfsprogramm keytool (das sich im Pfad Ihrer Konsole befindet) mit dem Android-Debug-Keystore aus. Dies ist standardmäßig in Ihrem Home-Verzeichnis .Android).
auf Ubuntu, es wacht in meinem Computer
keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64
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){
}