Google Play 应用签名 - KeyHash 不匹配

Google Play App Signing - KeyHash Mismatch

我正在使用新的 Google Play App Signing 来签署我的应用程序,但存在不匹配的密钥哈希。

我在我的应用程序中集成了 Facebook 登录,它说 keyhash 无效。 我的 APK 的 keyhash 版本与 Google Play App Signing 过程创建的 keyhash 版本不同。

编辑:我做的步骤:

1) 创建了一个 jks 密钥库文件。

2) 创建了一个使用 jks 文件签名的 apk 版本。

3) 在 Google Console Developer 中导入 APK,订阅 Google Play App Signing 修改签名密钥。

4) 在线后,我下载并打开应用程序,Facebook 初始化提示:无效的密钥哈希

当我通过以下代码检查应用程序中的哈希键时,哈希键与 Facebook 所说的无效哈希键不同:

  try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.package",
                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 (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

即使我将 Facebook 所说的 hashkey 放在 Facebook 仪表板中,它也不起作用。 似乎 Google Play App Signing 在签名过程中修改了 hashkey。 你有解决办法吗?

我猜您可能正在使用为 debug.keystore 生成的密钥散列。

您必须遵循的步骤

1.Generate 发布证书的密钥哈希。

转到命令行并执行此命令。用适当的值替换 <*..*> 中的占位符。

keytool -exportcert -alias <*provide an alias here. I recommend to use the same alias that you use for google play app signing*> -keystore _<*your path to the jks certificate*> | openssl sha1 -binary | openssl base64

此命令将生成密钥哈希。

2.Copy 上述命令生成的密钥散列,并将其粘贴到您的 Facebook 应用程序控制台中。

3.Sign 带有你的 jks 的 apk。下载并安装到您的 phone 上进行测试。

试试这个,然后告诉我。祝一切顺利。 :)

我遇到了同样的问题,看来正如您所说,Google Play 商店使用新密钥重新签署了您的 apk,这是您必须提供给 Facebook 的密钥散列(不是使用 keytool 生成的那个)。

这个答案的后半部分 很有用。

基本上,您需要向 Facebook 提供基于生成的 SHA-1 应用程序签名证书 Google 的哈希值,而不是使用 keytool 和您的本地密钥(现在看来只用于上传到 Google).

您必须使用 Google 生成的 SHA-1 密钥。以下步骤将修复它。

1).转到 Google 控制台 => 发布管理 => 应用程序签名 => 应用程序签名证书.

2).从那里复制 SHA-1 证书,因为它是 hexadecimal,因为 Facebook 在 base64 中需要它,所以使用 中显示的命令第 3 步

3).echo 步骤 2 中的 SHA-1 密钥(十六进制) | xxd -r -p | openssl base64
此命令在 命令提示符 中不起作用 在 windows 或 [=55 上使用 bash =] cli

4).将 base64 密钥 粘贴到 Facebook 控制台 => 设置 => 基本 => 密钥哈希

您可以使用下一个命令(可能在 Git Bash 上)将十六进制格式的 SHA-1 哈希(在 Play 控制台中找到)转换为 base64 哈希:

echo 33:4E:48:84:19:50:3A:1F:63:A6:0F:F6:A1:C2:31:E5:01:38:55:2E | xxd -r -p | openssl base64

输出:

M05IhBlQOh9jpg/2ocIx5QE4VS4=

例如,在设置 Facebook 应用程序时可以使用此哈希。

上面的大部分答案都是正确的,但是有一个很好的工具可以代替 运行 哈希命令,所以我将使用@neeraj 的答案作为基本答案来重述这些步骤:

第 3 步是唯一更改的项目

您必须使用 Google 生成的 SHA-1 密钥。以下步骤将修复它。

1).转到 Google 控制台 => 发布管理 => 应用程序签名 => 应用程序签名证书。

2).从那里复制 SHA-1 证书,因为它是十六进制的,因为 Facebook 需要它在 base64 中,所以使用步骤 3 中显示的在线工具

3).转到 https://base64.guru/converter/encode/hex 将十六进制转换为 base64

4).将 base64 密钥粘贴到 Facebook 控制台 => 设置 => 基本 => 密钥哈希