如何创buildAndroid Facebook密钥哈希?

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

这是你需要做的 –

从代码下载openSSl提取它。 在C:/创build一个文件夹 – OpenSSL,并在这里复制提取的代码。

检测debug.keystore文件path。 如果你没有find,那么在C:/中进行search,然后在下一步的命令中使用Path。

检测您的keytool.exepath,然后转到该命令提示符下的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

开放terminal:

对于debugging版本

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

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

用于发布构build

 keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64 

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

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

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

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

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

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

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

把它和复制到您的应用程序在Facebook上的喜好内的android key hash字段。 要到达那里,请转到developers.facebook.com/apps ,select您的应用程序,转到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); } } 

要在本地计算机上生成密钥散列,请在Androiddebugging密钥库中运行Java的keytool实用程序(应位于控制台的path上)。 这是,默认情况下,在你的家.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. input密码:android – >按回车

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

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

  4. 现在用Facebooklogin/共享等testing你的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(); } 

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

下载打开ssl :

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

我的电脑 – >属性 – >高级configuration – >高级 – >系统variables – >在系统variables下查找path,并将其添加到它的结尾处:; 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位长号码。

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

这里下载openssl

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

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

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

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

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

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

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

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

在这里输入图像描述

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

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

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

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

 cd YourJDKLocationFromStep4 

在我的情况

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

7.现在构build下面的命令

 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 

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

 Enter keystore password: android 

多数民众赞成,你会得到密钥哈希,只是复制它,并使用它

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

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

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

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

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

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

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