我正在使用新的Google Play应用程序签名来签署我的应用程序,并且存在不匹配的密钥哈希。
我在我的应用程序中集成了Facebook登录,它说keyhash无效。 我的APK的keyhash版本与Google Play App Signing流程创建的keyhash版本不同。
编辑:我做的第一步:
1)创建了一个jks密钥库文件。
2)创建了一个用jks文件签名的apk版本。
3)在Google控制台开发人员中导入APK,订阅Google Play App Signing即可修改签名密钥。
4)一旦上线,我下载并打开应用程序,Facebook初始化说:无效密钥哈希
当我通过下面的代码检查应用程序中的hashkey时,哈希键与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上的哈希键放在Facebook仪表板中,它也行不通。 似乎Google Play App Signing在签名过程中修改了hashkey。 你有想法解决它吗?
答案 0 :(得分:18)
我遇到了同样的问题,看起来正如你所说,Google Play商店用新密钥重新签名你的apk,这就是你必须提供给Facebook作为密钥哈希(不是使用keytool生成的密钥)
这个答案的后半部分https://stackoverflow.com/a/44448437/2640599很有用。
基本上,您需要根据Google生成的SHA-1 App签名证书向Facebook提供哈希值,而不是使用keytool和您的本地密钥(现在它似乎只用于上传到Google)。
答案 1 :(得分:18)
您必须使用Google生成的SHA-1密钥。请按照以下步骤进行修复。
1)。转到Google控制台=> 发布管理 => 应用签名 => 应用签名证书。
2)。从那里复制SHA-1证书,因为它在十六进制中,并且因为Facebook在 base64 中需要它,所以请使用第3步中显示的命令>
3)。从步骤2(十六进制)中回显 SHA-1键 | xxd -r -p | openssl base64
此命令在命令提示符中不起作用,请使用 bash on Windows 或 git cli 。
4)。将 base64键粘贴到 Facebook控制台 => 设置 => 基本 => 键散列
答案 2 :(得分:3)
您可以使用下一条命令(可能在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应用程序时可以使用此哈希。 Answer Source
答案 3 :(得分:0)
我猜你可能正在使用为debug.keystore
生成的密钥哈希。
您必须遵循的步骤
1.生成发布证书的密钥哈希值。
转到命令行并执行此命令。将<*..*>
中的占位符替换为适当的值。
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.复制上述命令生成的密钥哈希并将其粘贴到您的Facebook应用控制台中。。
3.用你的jk签名apk。下载并安装到手机上进行测试。
试试这个并告诉我。祝一切顺利。 :)
答案 4 :(得分:0)
上面的大多数答案都是正确的,但不是运行 hash 命令,而是有一个很好的工具,所以我将使用@neeraj 的答案作为基本答案重新说明这些步骤:
第 3 步是唯一更改的项目
您必须使用 Google 生成的 SHA-1 密钥。以下步骤将修复它。
1)。转到 Google 控制台 => 发布管理 => 应用签名 => 应用签名证书。
2)。从那里复制 SHA-1 证书,因为它是十六进制的,而且由于 Facebook 需要它在 base64 中,因此请使用步骤 3 中显示的在线工具
3)。转到 https://base64.guru/converter/encode/hex 将十六进制转换为 base64
4)。在 Facebook 控制台中粘贴 base64 密钥 => 设置 => 基本 => 密钥哈希