如何创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:
- 打开命令提示符并粘贴下面的命令
keytool -exportcert -alias androiddebugkey -keystore%HOMEPATH%.android \ debug.keystore | openssl sha1 -binary | openssl base64
-
input密码:android – >按回车
-
复制生成的哈希键 – >用您的开发人员帐户loginFacebook
-
转到您的Facebook应用程序 – >设置 – >在“密钥散列”选项中粘贴哈希键 – >保存更改。
-
现在用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) } }