![](/img/trans.png)
[英]Key hash for Android-Facebook app in Kotlin Programmatically
[英]Key hash for Android-Facebook app
我正在開發一個 Android 應用程序,我想在其中集成 Facebook 發布功能。 我下載了 Facebook-Android SDK,並在其中獲得了 readme.md(文本文件),其中提到了為 Android 生成密鑰哈希。 我如何生成它?
以下是步驟-
從Google 代碼下載 openssl(如果您有 64 位機器,則必須下載 openssl-0.9.8e X64不是最新版本)
提取它。 在 C:/ 中創建一個文件夾 - OpenSSL 並在此處復制提取的代碼。
檢測 debug.keystore 文件路徑。 如果您沒有找到,則在 C:/ 中進行搜索,並在下一步中使用命令中的路徑。
檢測您的 keytool.exe 路徑並在命令提示符中轉到該 dir/ 並在 1 行中運行此命令-
$ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
欲了解更多信息,請訪問這里
[編輯 2020]-> 現在我完全推薦這里的答案,使用 android studio 更容易,速度更快,無需編寫任何代碼 - 下面的代碼回到了日食時代:) -。
您可以在任何活動中使用此代碼。 它將在 logcat 中記錄 hashkey,這是調試鍵。 這很容易,而且比使用 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());
}
您可以在知道密鑰后刪除代碼;)
我為 Windows 和 Mac OS X 創建了一個小工具。只需放入密鑰存儲文件,並獲取哈希密鑰。
如果您想要默認的 debug.keystore 文件,請使用默認別名和密碼。 否則,請使用您自己的密鑰庫文件和值。
檢查一下,下載 Windows 版本或下載 Mac OS X 版本(Dev-Host 有時可能會關閉......所以如果鏈接斷開,請 PM 我,我會修復它)。
我希望對你們有幫助...
2014 年 12 月 31 日 - 編輯:將主機更改為 AFH。 請讓我知道鏈接是否損壞
2013 年 11 月 21 日 - 編輯:
根據用戶的要求,我添加了一個默認的密鑰庫位置和一個DONATE 按鈕。 如果我幫助了你,請隨意使用它。 :)
目前Facebook 的 Android 教程中的說明在Windows下效果不佳。 他們的示例顯示了如何將 keytool 輸出通過管道傳輸到 openssl,但如果您在 Windows 下嘗試此操作,則輸出由於某種原因無效。 我發現我必須使用中間文件才能使其正常工作。 以下是對我有用的步驟:
首先從 Google 下載適用於 Windows 的 openssl 。
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
運行這些命令后,有效的哈希存儲在文件 base64.txt 中。 將其復制並粘貼到您在 Facebook 上的應用設置中。
這是在Facebook 的官方頁面上給出的:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
讓我把這個命令分解成片段。
尋找"keytool.exe"
。 您可以在 C: 驅動器上搜索。 您可以在"java jdk"
或"java jre"
中找到它。 如果您安裝了多個版本,請選擇任何一個。
打開 CMD 提示符並轉到上面找到"keytool.exe"
的目錄。
剪輯“exe`”並粘貼Facebook頁面上提供的上述命令。
輸入此內容時您將收到一個錯誤,即 OpenSSL 在輸入輸出命令中未被識別。 解決方案:從OpenSSL下載“Openssl”(如果您有 64 位機器,則必須下載 openssl-0.9.8e X64 )。 解壓並保存在任何地方...我將它保存在 C: 驅動器的OpenSSl
文件夾中
將上述命令中的 openssl 替換為“C:\OpenSSL\bin\openssl”在管道“|”之后的兩個位置出現 OpenSSL 錯誤。
如果提示輸入密碼,請輸入android
。
你會得到你的哈希鍵。 有關進一步的步驟,請再次參閱 Facebook 頁面。
您可以從 SHA-1 密鑰獲取密鑰哈希。 它非常簡單,您需要從 Play 商店獲取您的 SHA-1(簽名 APK)密鑰,檢查下圖。
現在復制該 SHA-1 密鑰並將其粘貼到此網站http://tomeko.net中,同時檢查下圖以獲取您的密鑰哈希。
將此代碼添加到您的活動的onCreate
中,它將在您的 logCat 中的KeyHash標記下打印哈希
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) {
}
您可以為您的帳戶添加多個哈希鍵,因此如果您一直在調試中運行,請不要忘記在發布模式下再次運行它。
要獲取 Android 密鑰哈希碼,請執行以下步驟:
cd C:\Program Files\Java\jdk1.6.0_26\bin
keytool -export -alias myAlias -keystore C:\Users\
你的用戶名\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
我發現的最簡單的解決方案是:
在日志中查找如下所示的行:
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
復制“abcdefgHIJKLMN+OPqrstuvwzyz”並將其粘貼到 Facebook Android Key Hash 區域。
我已經通過這種方式為Linux OS & Windows OS完成了:
keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64
請根據您的要求使用其路徑更改別名名稱和密鑰庫。
終端會要求輸入密鑰庫的密碼。 您必須為相同的Keystore提供密碼。
所以最后你會得到Release Hashkey 。
釋放哈希鍵的步驟:
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
請根據您的要求使用其路徑更改別名名稱和密鑰庫。
終端會要求輸入密鑰庫的密碼。 您必須為相同的Keystore提供密碼。
所以最后你會得到Release Hashkey 。
完畢
在此處下載適用於 Windows 的 openSSL,您可以在此處找到 64 位和 32 位
解壓下載的文件
C:\Users\用戶名\.android\debug.keystore
keytool -exportcert -alias androiddebugkey -keystore C:\Users\username.android\debug.keystore | "C:\openSSL\bin\openssl" sha1 -binary | "C:\openSSL\bin\openssl" base64
下載 openSSL ->安裝它->它通常會安裝在C:\OpenSSL
然后打開cmd並輸入
cd../../Program Files (Enter)
java (Enter)
dir (Enter)
cd jdk1.6.0_17 (varies with jdk versions) (Enter)
要檢查 jdk 版本,請轉到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)
它會要求您輸入密碼,即android。
只需打開您的主活動文件並創建以下提及的功能:
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 運行你的應用程序,這將為你的應用程序生成一個哈希鍵。
現在,打開 log cat 並使用“KeyHash”搜索並復制哈希鍵。
生成哈希鍵后,您可以刪除此功能。
您需要通過keytool為Android簽名應用程序創建一個密鑰庫,如Android站點中描述的過程,然后您必須安裝cygwin,然后您需要從google代碼安裝openssl,然后只需執行以下命令,您將獲得哈希android 的密鑰,然后將該哈希密鑰放入您創建的 facebook 應用程序中。 然后您可以通過 Android 應用程序訪問 facebook 應用程序以發布牆(“publish_stream”)就是一個例子。
$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -二進制 | openssl base64
您需要從 cygwin 執行上述命令。
facebook 開發者網站上的官方文檔:
@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) {
}
對於 Android 應用程序
此代碼用於在您的 Android 應用程序中獲取用於 Facebook 集成的哈希鍵。 我已經測試了所有設備並且它正在工作。 僅更改此代碼的包名稱:
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) {
}
}
1) 創建一個密鑰來簽署您的應用程序,並記住別名。
2) 安裝 OpenSSL。
3)將OpenSSL的bin文件夾放在你的路徑中。
4) 按照 FB-Android-SDK頁面上“設置單點登錄”中提到的步驟,生成您的哈希密鑰。 確保輸入正確的別名和密鑰庫文件名。
5) 在 Facebok 上創建一個應用程序,並在移動設備選項卡下,輸入此哈希鍵。
有兩種方法可用,一種是復雜的,一種是簡單的
方法一:(小復雜)
首先你必須相應地下載64bit
或32bit
的ssl ,記住在版本代碼openssl-0.9.8e_X64.zip或openssl-0.9.8e_WIN32.zip后下載名稱包含e
的文件,而不是版本代碼后的k
,
並放在 AndroidStudio/jre/bin 目錄下,如果你不知道放在哪里,你可以通過右鍵單擊 android studio 快捷方式找到這個目錄:
現在您已經在一個地方管理了兩個必需的東西,但是您仍然必須找到debug.keystore
的路徑,該路徑始終可以在"C:\Users\yourusernamehere\.android\debug.keystore"
中找到,
注意如果您的應用程序已經發布或即將發布,則使用您的發布簽名密鑰庫,當且僅當您在開發模式下進行測試時才可以使用 debug,keysotre
一切都設置好后,讓我們安排您想要執行的命令以生成base64 format
的哈希密鑰,您的命令將如下所示
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
它會提示您輸入 debug.keystore 的密碼,默認為 android。 如果您使用自己的密鑰,那么密碼也將是您的。 如果一切順利,輸出將如下所示,希望對您有所幫助
第二種方法(分別是簡單的一種)
如果您不想完成上述所有過程,則只需使用以下方法記錄haskey:
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());
}
}
輸出:
keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64
這對我有用...
腳步:
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
對於 Linux
打開終端:
用於調試構建
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
你會從“.android”文件夾中找到debug.keystore復制它並粘貼到桌面上並運行上面的命令
對於發布構建
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
注意:確保在這兩種情況下都必須要求輸入密碼。 如果它不要求輸入密碼,則意味着命令有問題。
最簡單的解決方案:
要生成發布密鑰的哈希,請在 Mac 或 Windows 上運行以下命令,替換您的發布密鑰別名和密鑰庫的路徑。
在 Windows 上,使用:
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
此命令應生成 28 個字符的字符串。 請記住,將此 Release Key Hash復制並粘貼到您的 Facebook App ID 的 Android 設置中。
圖片:fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png
參考: https ://developers.facebook.com/docs/android/getting-started#release-key-hash 和http://note.taable.com
將此用於 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){
}
在 Android Studio 中也解決了我的問題,但方法略有不同。
在 Android Studio 中獲取 SHA-1 值。
SHA-1 值如下所示 CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84
並打開http://tomeko.net/online_tools/hex_to_base64.php將您的 SHA1 值轉換為 base64。 這就是 Facebook 需要獲取生成的哈希“ ********************= ”並將密鑰哈希復制到 facebook 應用程序控制台的內容。
這個答案的一部分取自這里Github Link
在 Android Studio 中,只需單擊右側邊欄面板“Gradle”以顯示 gardel 面板然后:-YOURAPPNAME --Task ---Android ----(雙擊)signingReport(啟動 Gradle Daemon)
然后你會看到結果:
Config: debug
Store: C:\Users\username\.android\debug.keystore
Alias: AndroidDebugKey
MD5: C8:46:01:EA:36:02:D1:21:1B:23:19:91:D4:32:CB:AC
SHA1: 38:AB:4C:01:01:D7:62:E0:61:D1:9F:52:04:0C:E5:07:4E:E4:9B:39
SHA-256: 1B:8C:DC:35:48:10:01:2C:1F:BD:01:64:F1:01:06:01:60:01:A6:8B:10:15:2E:BF:7B:C4:FD:38:4C:C1:74:01
Valid until: Saturday, February 12, 2050
復制 SHA1:
38:AB:4C:01:01:D7:62:E0:68:D1:9F:52:04:0C:E5:07:4E:E4:9B:39
轉到此頁
粘貼 SHA1 並生成您的 Facebook 密鑰哈希碼。
我犯了一個小錯誤,應該牢記在心。 如果您使用的是您的密鑰庫,請提供您的別名,而不是 androiddebugkey ...
我解決了我的問題。 現在,如果我的設備中安裝了 Facebook,那么我的應用程序仍在獲取 Facebook 登錄集成的數據。 只關心你的哈希鍵。
請看下文。
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
然后按Enter - 它會要求您輸入密碼,然后輸入您的密鑰庫密碼,而不是 Android。
涼爽的。
最好的方法是使用以下代碼:
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();
}
}
但令我非常沮喪的是,沒有簡單的工具可以為 Facebook 應用程序生成 HashKey。 每次我不得不使用 Openssl 和 Keytool 或使用代碼從簽名中獲取哈希...
所以我寫了一個簡單的 KeyGenTool 可以為你工作: -> Google Play 上的 KeyGenTool <-
享受 :)
這是 Xamarin 版本
private void printKeyHash()
{
try
{
PackageInfo info = PackageManager.GetPackageInfo(PackageName, PackageInfoFlags.Signatures);
foreach (var signature in info.Signatures)
{
MessageDigest md = MessageDigest.GetInstance("SHA1");
md.Update(signature.ToByteArray());
var hash = Base64.EncodeToString(md.Digest(), Base64Flags.Default);
Log.Debug("KeyHash:", hash);
}
}
catch (PackageManager.NameNotFoundException e)
{
}
catch (NoSuchAlgorithmException e)
{
}
}
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());
}
}
});
}
}
Kotlin 代碼獲取哈希鍵
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());
}
}
請不要忘記在調試和發布環境中生成密鑰,因為它們會根據構建設置進行更改。
嘗試這個 :
1)使用命令行獲取哈希鍵(官方文檔: https ://developers.facebook.com/docs/android/getting-started)
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64
或者
2)使用代碼獲取哈希鍵
@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());
}
}
我只是為此目的制作了一個工具,即https://keyhash.vaibhavpandey.com/ 。 它比其他任何東西都簡單,因為它需要您瀏覽計算機上的密鑰庫並輸入密碼以分別為 Google 和 Facebook 生成SHA-1 Hex和Base64版本。
不要擔心密鑰庫或密碼短語,因為這項工作完全在瀏覽器中完成,您可以在https://github.com/vaibhavpandeyvpz/keyhash檢查網絡選項卡並且該工具也是開源的。
This required no coding input. Go to Android Studio->
Click on Right side panel "Gradle"=>
*Your App Name =>
*Your App Name(root)=>
*Tasks=>
*android =>
*Double click on **signinReport**=>
Will get
example :
SHA1: [![6A:DE:ED:5A:9F:0B:19:47:38:DC:DE:3B:7B:A2:D7:4C:6C:0A:24:70][1]][1]
Go to
http://fbkeyhash.com/index.php
Paste your SHA-1
您可以從 Java/Kotlin Activity 打印哈希鍵。 部分代碼已棄用,但這是包含新舊代碼的完整解決方案。
private fun printHashKey(context: Context) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val packageInfo: PackageInfo = context.packageManager.getPackageInfo(
context.packageName,
PackageManager.GET_SIGNING_CERTIFICATES
)
for (signature in packageInfo.signingInfo.apkContentsSigners) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))
}
} else {
val packageInfo: PackageInfo = context.packageManager.getPackageInfo(
context.packageName,
PackageManager.GET_SIGNATURES
)
for (signature in packageInfo.signatures) {
val md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT))
}
}
} catch (e: PackageManager.NameNotFoundException) {
Log.d(TAG, "printHashKey: PackageManager.NameNotFoundException -> $e")
} catch (e: NoSuchAlgorithmException) {
Log.d(TAG, "printHashKey: NoSuchAlgorithmException -> $e")
}
}
這是對我有用的方法以及我所做的一些觀察:
每個 SHA1 密鑰都有一個對應的密鑰哈希,長度為 28 個字符,並以 '=' 結尾
我已經嘗試使用在線工具從我的 SHA1 中獲取散列密鑰,但該密鑰散列從未對我有用。
如果您在 Windows 上,請從此處安裝 open-ssl:Open ssl
我已經在我擁有的所有密鑰庫文件上使用了這個 keytool 命令,即暫存、調試和發布。
keytool -exportcert -alias my_alias_name -keystore "C:\Users\...my_filename.jks" | "C:\Openssl\bin\openssl.exe" sha1 -binary | "C:\Openssl\bin\openssl.exe" base64
注意:即使您錯誤地填寫了任何參數,上述方法也會始終為您提供密鑰哈希。 知道您是否獲得正確的哈希密鑰的技巧是 - 在運行此命令后,如果提示您輸入密碼,則意味着后續密鑰是正確的。
不要使用my_filename.keystore而是使用my_filename.jks 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.