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 控制台 => 设置 => 基本 => 密钥哈希
我正在使用新的 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 控制台 => 设置 => 基本 => 密钥哈希