android Google Play应用签名- KeyHash不匹配

o75abkj4  于 11个月前  发布在  Android
关注(0)|答案(6)|浏览(253)

我正在使用新的Google Play应用签名来签名我的应用程序,但存在不匹配的密钥哈希。
我在我的应用程序中集成了Facebook登录,它说keyhash无效。我的APK的keyhash版本与Google Play应用签名过程创建的keyhash版本不同。
编辑:步骤我做了:
1)创建了一个jks密钥库文件。
2)创建了一个apk发行版,使用jks文件签名。
3)在Google Console Developer中导入APK,并订阅Google Play应用签名,修改签名密钥。
4)一旦上线,我下载并打开应用程序,Facebook初始化说:无效的密钥哈希
当我通过下面的代码检查应用程序中的hashkey时,hashkey与Facebook所说的无效hashkey不同:

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 Jmeter 板,它不工作.似乎Google Play应用签名修改hashkey在签名过程中.你有一个想法来解决它?

nxowjjhe

nxowjjhe1#

你必须使用谷歌生成的SHA-1密钥。以下步骤将修复它。
1).转到Google控制台=>您的项目=>设置=>应用程序完整性=>应用程序签名密钥证书
2).从那里复制SHA-1证书,因为它是 * 十六进制 ,因为Facebook需要它在 base64,所以使用 * 步骤3 中显示的命令
3).echo * 来自步骤2的SHA-1密钥(十六进制)*| xxd -r -p| openssl base64
此命令在
命令提示符下不起作用在windows上使用bashgit bash**。
4).粘贴 *base64密钥 * 在Facebook控制台=>设置=>基本=>密钥哈希

eyh26e7m

eyh26e7m2#

您可以使用下一个命令(可能在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

q9yhzks0

q9yhzks03#

我有同样的问题,它似乎正如你所说,Google Play商店重新签署您的apk与一个新的关键,这是你必须提供给Facebook的关键哈希(不是使用keytool生成的).
这个答案的后半部分https://stackoverflow.com/a/44448437/2640599是有用的。
基本上,你需要向Facebook提供基于谷歌生成的SHA-1应用签名证书的哈希值,而不是使用keytool和你的本地密钥(现在似乎只是用于上传到谷歌)。

nr9pn0ug

nr9pn0ug4#

上面的大多数答案都是正确的,但是有一个很好的工具来代替运行hash命令,所以我将使用@neeraj的答案作为基本答案重新陈述步骤:

步骤3是唯一更改的项目

你必须使用谷歌生成的SHA-1密钥。以下步骤将修复它。
1).转到Google控制台=> Release Management => App signing => App signing certificate。
2).从那里复制SHA-1证书,因为它是十六进制的,因为Facebook需要base64,所以使用第3步中显示的在线工具
3).到https://base64.guru/converter/encode/hex转换十六进制到base64
4).在Facebook控制台中粘贴base64密钥=>设置=>基本=>密钥哈希

sg3maiej

sg3maiej5#

对我来说,这一切都不起作用。起作用的是以下步骤:
1.从Google Play控制台上的应用登录中下载DER文件。
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
1.修改com. yourrappid并运行:
keytool -exportcert -alias PlayDeploymentCert -keystore temporary.keystore| xxd -p| tr -d“[:space:]”|echo -n com. yourrappid cat| sha256sum| tr -d“[:space:]-”|xxd -r -p| base64|切割-c1-11

kb5ga3dv

kb5ga3dv6#

我猜您可能正在使用为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应用控制台中,如this.


3.用你的jks签名apk。下载并安装到你的手机上进行测试。
试试这个,让我知道。一切顺利。:)

相关问题