我正在尝试创建一个集成Facebook的Android应用程序,我已经看了文档中生成密钥散列文件的部分,它指定运行以下代码:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
当我在终端中运行时,出现密钥库篡改或密码不正确的错误,
我只想生成我的键哈希
有人能指点我正确的方向吗?
我正在尝试创建一个集成Facebook的Android应用程序,我已经看了文档中生成密钥散列文件的部分,它指定运行以下代码:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
当我在终端中运行时,出现密钥库篡改或密码不正确的错误,
我只想生成我的键哈希
有人能指点我正确的方向吗?
1)从这里下载Openssl。
2)在C驱动器中创建一个名为openssl的文件夹。
3)将Zip文件解压缩到在C驱动器中创建的openssl文件夹中。
4)将debug.keystore文件从.android文件夹复制并粘贴到JDK bin文件夹中。在我的情况下为(C:\Users\SYSTEM.android),粘贴到JDK bin文件夹中,在我的情况下为(C:\Program Files\Java\jdk1.6.0_05\bin)。
5)打开命令提示符并给出JDK Bin文件夹的路径,在我的情况下为(C:\Program Files\Java\jdk1.6.0_05\bin)。
6)复制以下代码并按Enter键。
keytool -exportcert -alias androiddebugkey -keystore debug.keystore > c:\openssl\bin\debug.txt
7)现在您需要输入密码,密码为 android。
8)如果您在openssl Bin文件夹中查看,您将得到一个名为debug.txt的文件。
9)现在您可以重新启动命令提示符或继续使用现有命令提示符。
10)回到C驱动器,然后给出openssl Bin文件夹的路径。
11)复制以下代码并粘贴。
openssl sha1 -binary debug.txt > debug_sha.txt
12)您将在openssl bin文件夹中获得debug_sha.txt。
13)再次复制以下代码并粘贴。
openssl base64 -in debug_sha.txt > debug_base64.txt
14)您将在openssl bin文件夹中获得debug_base64.txt。
15) 打开 debug_base64.txt 文件,这里将会展示你的密钥哈希。
生成哈希密钥的最简单方法。
要求:SHA1密钥
有两种方法可以从密钥库文件中获取SHA1密钥
1) 找到您的密钥库文件,在该位置打开命令提示符,然后使用以下命令。
keytool -list -v -keystore {keystore_name} -alias {alias_name}
然后输入您的密码,它将返回md5、sha1和sha256密钥。
或者
2) 运行 signingReport
请参阅下面的图片。
运行文件后,将生成包含所需的sha1密钥的输出。
获取所需的SHA1密钥后
然后去
http://tomeko.net/online_tools/hex_to_base64.php
并粘贴您的SHA1密钥
最终您将获得所需的HashKey,可以将其用于应用于Facebook。
echo 30:F1:74:91:D8:17:41:4D:31:EA:B8:A8:02:E1:63:74:2E:8D:26:9B | xxd -r -p | openssl base64
- AZR34L在Linux和Mac OS X中,您可以在~/.android/debug.keystore下删除调试证书;在Windows中,该目录类似于%USERHOME%/.android。
当您下次尝试构建调试包时,Eclipse插件应该会生成一个新的证书。
如果这样无效,请告诉我。
如果使用Facebook SDK 3.0及以上版本,可以通过向应用程序本身添加以下代码来获得正确的密钥哈希(此方法有效):
try {
PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
将com.package.mypackage替换为您的包名
I. 为Facebook创建密钥哈希调试
添加代码打印出Facebook的密钥哈希。
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.google.shoppingvn", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.i("KeyHash:",
Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
II. 为 Facebook 创建密钥哈希发布版
在 C 盘中创建一个 openssl 文件夹
将 Zip 文件解压缩到 openssl 文件夹中
开始 -> 运行:cmd (按回车键)
(按下)cd C:\Program Files\Java\jdk1.6.0_45\bin。注意:C:\Program Files\Java\jdk1.6.0_45\bin 是您计算机中 jdk 文件夹的路径。
(按下)keytool -exportcert -alias gci -keystore D:\folder\keystorerelease | C:\openssl\bin\openssl sha1 -binary | C:\openssl\bin\openssl base64。注意:D:\folder\keystorerelease 是您的 keystorerelease 的路径。
输入 keystore 密码:这是注册 keystorerelease 时的密码。
然后,您将获得一个密钥哈希值:jDehABCDIQEDWAYz5Ow4sjsxLSw=
登录 Facebook。访问“管理应用程序”。将密钥哈希粘贴到 developers.facebook.com 上的应用程序中。
我已经遇到了这个问题两个月了。我的密钥散列一直堆积到9。今天,我终于找到了简单的解决方法:
步骤1:
在手机上安装从Facebook开发者页面下载的Facebook SDK,不要安装普通的Facebook应用程序。确保您可以登录Facebook。然后退出登录。
步骤2:
使用您的最终发布密钥将应用程序导出为apk文件,就像上传到Play商店一样。
步骤3:
通过USB电缆或USB驱动器将Apk文件放入手机中。
步骤4:
使用文件管理器安装您的应用程序:示例
步骤5:
启动您的应用程序并尝试使用Facebook登录。一个对话框会弹出并告诉您:“在Facebook开发者控制台中未找到密钥YOURHASHKEY”
步骤6:
记下密钥。
第七步:
将其放入您的Facebook开发者控制台并保存。现在您完成了。使用先前使用的密钥库发布的应用程序的任何人都可以登录Facebook。
享受吧!
如果你要发布应用程序,请使用你之前导出应用程序所使用的keystore,而不是debug.keystore。
Add this code to your main activity, after you set layout.
try {
PackageInfo info = getPackageManager().getPackageInfo("PROJECTNAME", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
//textInstructionsOrLink = (TextView)findViewById(R.id.textstring);
//textInstructionsOrLink.setText(sign);
Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
Log.d("nope","nope");
} catch (NoSuchAlgorithmException e) {
}
Change PROJECTNAME to your package name!
调试证书的密码是android,而不是Android。
一行代码生成Facebook分享链接的解决方案
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64