我试过了
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
我得到了一个keyhash 1knQ67Fx4PUOYXggSe+mnzqaTL8=
。
但是google's own documentation suggests an alternative too。
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) {
}
但这会产生UR02fNgzyMOjpWCxUnjGZ4ctF6Y=
。我已经加倍验证了这一点,并且我将这两个值与各自的方法保持一致。
他们为什么不同?我应该在developers.facebook.com注册哪一个?看来文档不是很清楚。
修改:
正如Offbeatmammal所说,我可以在facebook网站注册多个密钥。所以没关系。但我还应该在应用程序清单文件中指定keyhash。 另外问:我应该在应用程序中使用哪一个?我当然可以尝试一下,但也欢迎回答。
答案 0 :(得分:4)
您的应用程序基本上至少需要2个Key Hashes。这是假设,您只在一台计算机上工作。对于其他计算机,您需要在开发者控制台中为应用程序的设置生成并添加一个Key Hash。
<强>解释强>
在测试应用程序时,eclipse(与ADT / SDK一起使用)将始终使用 debug.keystore
将应用程序推送到设备或模拟器。发布应用时,您使用为应用生成的密钥库(用于发布到Google Play)。
Facebook需要debug.keystore以及您自己的密钥库的密钥哈希值。
为了解决您使用2种不同方法获得不同Key Hashes的担忧,这是我开始使用Facebook Android SDK时遇到的问题。为了避免这种情况,我找到了一种始终有效并始终精确的解决方案。您可以按照这些答案中的步骤(它们几乎相同),您将立即使用Key Hash:
所以,总结一下:
Manifest
文件中。它可能是Facebook SDK v3的要求。在这种情况下,在测试时,请使用通过 debug.keystore
创建的Key Hash,当您准备发布应用时,请更改为使用发布密钥库创建的Key Hash 即可。希望这能解决你的问题。
修改强>
正如已经指出的Offbeatmammal,您可以向开发者控制台添加多个Key Hashes。因此,存储和使用多个Key Hashes是您不必担心的事情。
答案 1 :(得分:1)
我一直使用keytool签名。好的一点是,您注册签名的Facebook表单支持多个签名(如果您要么处理多个应用程序,或者需要支持多个应用程序商店并最终得到不同的哈希值,那么这将非常方便)
答案 2 :(得分:1)
我遇到了同样的问题。 但最后我通过指定商店密码
得到了相同的密钥哈希
keytool -exportcert -alias androiddebugkey -keystore keystore/debug.keystore -storepass yourstorepass | openssl sha1 -binary | openssl base64