1

我试过了

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

我得到一个 keyhash 1knQ67Fx4PUOYXggSe+mnzqaTL8=

但是谷歌自己的文档也提出了另一种选择

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。所以另外问:我应该在应用程序中使用哪一个?我当然可以尝试,但也欢迎回答。

4

3 回答 3

4

您的应用程序基本上需要至少 2 个密钥哈希。这是假设,您只在一台计算机上工作。对于额外的计算机,您需要在开发者控制台中为您的应用设置生成并添加一个密钥哈希。

解释:

当您测试您的应用程序时,eclipse(与 ADT / SDK 结合使用)将始终使用 将debug.keystore应用程序推送到设备或模拟器。发布应用程序时,您使用为应用程序生成的密钥库(用于发布到 Google Play)。

Facebook 需要 debug.keystore 和您自己的密钥库的密钥哈希。

为了解决您使用 2 种不同方法获得不同密钥哈希的担忧,这是我在开始使用 Facebook Android SDK 时遇到的问题。为了避免这种情况,我找到了一个始终有效且始终精确的解决方案。您可以按照这些答案中的步骤进行操作(它们几乎相同),您的 Key Hash 将立即工作:

  1. https://stackoverflow.com/a/13283088/450534
  2. https://stackoverflow.com/a/13343529/450534
  3. https://stackoverflow.com/a/10516629/450534(解决方案在此评论中)

所以,总结一下:

  1. 尝试使用上面提供的链接中的步骤,让 Facebook SDK 告诉您正确的密钥哈希。
  2. 至于要使用哪个 Key Hash:您不必决定。由于您已经将两个密钥哈希都添加到了开发者控制台,因此 Facebook 将自动使用适当的一个。
  3. 我不知道需要将密钥哈希添加到Manifest文件中。这可能是 Facebook SDK v3 的要求。在这种情况下,在测试时,使用使用创建的 Key Hash debug.keystore,当您准备发布应用程序时,更改为使用您的发布密钥库创建的 Key Hash 。

希望这能解决您的问题。

编辑

正如已经指出的 Offbeatmammal 一样,您可以向开发者控制台添加多个密钥哈希。因此,您不必担心存储和使用多个 Key Hash。

于 2013-01-18T02:25:53.410 回答
1

我一直使用 keytool 签名。好消息是您注册签名的 Facebook 表单支持多个签名(如果您要处理多个应用程序,或者需要支持多个应用程序商店并最终得到不同的哈希值,这很方便)

于 2013-01-18T00:40:05.270 回答
1

我遇到了同样的问题。但最后我通过指定存储密码得到了相同的密钥哈希

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

于 2017-09-13T02:43:00.193 回答