如何创建Android Facebook密钥哈希?

我根本不理解这个过程。 我已经能够导航到Java SDK中包含keytool的文件夹。 虽然我不断收到错误openssl不被识别为内部或外部命令。 问题是,即使我可以得到这个工作,我会做什么和事后呢?

这是你需要做的 –

从代码下载openSSl提取它。 在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 

它会要求密码,把所有的android。 你会得到一个密钥哈希

对于Linux

开放终端:

对于调试版本

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

您将在“.android”文件夹中finddebug.keystore 。 将其复制并粘贴到桌面上,然后运行上述命令。

用于发布构建

 keytool -exportcert -alias  -keystore  | openssl sha1 -binary | openssl base64 

注意:确保在这两种情况下都要求输入密码。 如果不要求输入密码,则意味着命令中出现了错误。 debug.keystore的密码是android ,对于发行版,您必须输入您在创建密钥库期间设置的密码。

OpenSSL:如果您的操作系统没有预安装,则必须安装(例如,Windows没有预安装) 。 如何安装取决于您的操作系统(对于Windows,请查看coder_For_Life22提供的链接 )。

如果你在Windows上,最简单的方法就是将openssl.exe二进制文件复制到你的keytool路径中。 如果你不想这样做,你必须把它添加到你的PATH环境variables中。 然后执行文档中提供的命令。

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

请注意, -keystore之后的参数指向您的调试密钥库。 这个位置也取决于您的操作系统。 应该在以下位置之一:

  • Windows Vista或7 – C:\ Users \ .android \ debug.keystore
  • Windows XP – C:\ Documents and Settings \ .android \ debug.keystore
  • OS X和Linux – 〜/ .android / debug.keystore

如果你做的一切正确,你应该被提示输入密码。 这是android的调试证书。 如果密码是正确的,控制台打印一个散列(有点随机的字符和数字)。

把它和复制到您的应用程序在Facebook上的喜好内的android key hash字段。 要到达那里,请转到developers.facebook.com/apps ,选择您的应用程序,转到Edit settings并向下滚动。 之后,等待几分钟,直到更改生效。

请试试这个:

 public static void printHashKey(Context pContext) { try { PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String hashKey = new String(Base64.encode(md.digest(), 0)); Log.i(TAG, "printHashKey() Hash Key: " + hashKey); } } catch (NoSuchAlgorithmException e) { Log.e(TAG, "printHashKey()", e); } catch (Exception e) { Log.e(TAG, "printHashKey()", e); } } 

要在本地计算机上生成密钥散列,请在Android调试密钥库中运行Java的keytool实用程序(应位于控制台的路径上)。 这是,默认情况下,在你的家.android目录)。 在OS X上,运行:

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

在Windows上,使用: –

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

希望对你有帮助

参考 – 开发人员的网站

对于Windows:

  1. 打开命令提示符并粘贴下面的命令

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

  1. 输入密码:android – >按回车

  2. 复制生成的哈希键 – >用您的开发人员帐户登录Facebook

  3. 转到您的Facebook应用程序 – >设置 – >在“密钥散列”选项中粘贴哈希键 – >保存更改。

  4. 现在用Facebook登录/共享等测试你的Android应用程序

这就是我得到我的:

 private class SessionStatusCallback implements Session.StatusCallback { @Override public void call(Session session, SessionState state, Exception exception) { if (exception != null) { new AlertDialog.Builder(FriendActivity.this) .setTitle(R.string.login_failed_dialog_title) .setMessage(exception.getMessage()) .setPositiveButton(R.string.ok_button, null) .show(); } 

所以当你试图在没有密钥的情况下输入时,就会发生exception。 Facebook将RIGHT键放入此例外。 所有你需要做的就是复制它。

为了便于video教程链接生成KeyHash Here

这里下载openssl

对于像我这样的人是完整的细节(对于Windows)

1.根据您的系统32位或64位,下载OpenSSl 1st或2nd。

2.解压C目录下的zip文件

3.打开提取的文件夹到bin并复制路径,它应该像C:\openssl-0.9.8k_X64\bin\openssl (在末尾添加\ openssl)

4. (获取Jdk bin文件夹的路径,如果你知道如何,忽略这个)。

打开android studio〜file〜Project Structure(ctrl + alt + shift + s),在左侧面板中选择SDK位置,复制JDK位置并添加/ bin到它

因此,最终的JDK位置将如C:\Program Files\Android\Android Studio\jre\bin

我们正在按照这个方法来获取Jdk的位置,因为你可能会使用像我这样的嵌入式jdk

在这里输入图像说明

现在您拥有OpenSSl位置和JDK位置

5.现在我们需要调试keystore的位置,对于那个打开C〜> Users〜> YourUserName〜> .android的应该有一个文件名debug.keystore,现在复制路径位置,应该是有点像

C:\Users\Redman\.android\debug.keystore

6.现在打开命令提示符并输入命令

 cd YourJDKLocationFromStep4 

在我的情况

  cd C:\Program Files\Android\Android Studio\jre\bin 

7.现在构建下面的命令

 keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64 

在我的情况下,命令将如下所示

 keytool -exportcert -alias androiddebugkey -keystore C:\Users\Redman\.android\debug.keystore | C:\openssl-0.9.8k_X64\bin\openssl sha1 -binary | C:\openssl-0.9.8k_X64\bin\openssl base64 

现在在命令提示符下输入这个命令,如果你做的事情正确,你会被要求输入密码(密码是android)

 Enter keystore password: android 

多数民众赞成在它,你将被授予密钥哈希,只是复制它,并使用它

下载打开ssl :

然后将openssl \ bin添加到路径系统variables中:

我的电脑 – >属性 – >高级配置 – >高级 – >系统variables – >在系统variables下查找路径,并将其添加到它的结尾处:; yourFullOpenSSLDir \ bin

现在在你的jdk \ bin文件夹C:\ Program Files \ Java \ jdk1.8.0_40 \ bin上打开一个命令行(在windows上按住shift并右键单击 – >在这里打开命令行)并使用:

 keytool -exportcert -alias keystorealias -keystore C:\yourkeystore\folder\keystore.jks | openssl sha1 -binary | openssl base64 

在给出密码后复制它生成的28位长号码。

您可以从https://console.developers.google.com/projectselector/apis/credentials获取所有指纹
并使用此Kotlin代码将其转换为keyhash:

 fun main(args: Array) { listOf("", "", "") .map { it.split(":") } .map { it.map { it.toInt(16).toByte() }.toByteArray() } .map { String(Base64.getEncoder().encode(it)) } .forEach { println(it) } } 

我find了最简单的工具,并多次使用它,它是完美的工作。 检查出来,这将有所帮助。

检查这个答案的更多细节。

我有同样的确切的问题,我没有被要求输入密码,似乎我有错误的密钥库文件的路径。

事实上,如果keytool没有find你设置的keystore,它将创建一个,并给你错误的键,因为它没有使用正确的。

一般的规则是,如果你没有被要求输入密码,那么你的密钥被生成了。

你可以使用这个apk

 1.first install the app from the Google play store 2.install the above apk 3.launch the apk and input the package name of your app 4.then you will get the hash code you want 

在你的应用程序中运行这个:

 FacebookSdk.sdkInitialize(getApplicationContext()); Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"="); 

或这个:

 public static void printHashKey(Context context) { try { final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); for (android.content.pm.Signature signature : info.signatures) { final MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); final String hashKey = new String(Base64.encode(md.digest(), 0)); Log.i("AppLog", "key:" + hashKey + "="); } } catch (Exception e) { Log.e("AppLog", "error:", e); } } 

然后看看日志。

结果应以“=”结尾。

解决方案基于这里这里

也有一个简短的解决方案。 在你的应用程序中运行这个:

 FacebookSdk.sdkInitialize(getApplicationContext()); Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)); 

较长的一个不需要FB SDK(基于这里的解决方案):

 public static void printHashKey(Context context) { try { final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); for (android.content.pm.Signature signature : info.signatures) { final MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); final String hashKey = new String(Base64.encode(md.digest(), 0)); Log.i("AppLog", "key:" + hashKey + "="); } } catch (Exception e) { Log.e("AppLog", "error:", e); } } 

结果应以“=”结尾。