为什么我会为注册Facebook应用程序获得不同的密钥?

时间:2013-01-18 00:37:18

标签: android facebook

我试过了

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

3 个答案:

答案 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:

  1. https://stackoverflow.com/a/13283088/450534
  2. https://stackoverflow.com/a/13343529/450534
  3. https://stackoverflow.com/a/10516629/450534(解决方案在此评论中)
  4. 所以,总结一下:

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

      修改

      正如已经指出的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