我正在使用Facebook登录集成到我的应用程序中。我为已签名的APK配置了哈希密钥Facebook并成功运行。但有时,当我发布一个新的APK文件时,哈希密钥不再有效("无效密钥哈希FacebookAndroid与任何存储的都不匹配")。
我阅读了下面的链接,发现"此外,根据电脑的不同,有时密钥可能会更改,如果是这样,哈希也会更改,你只需要适应它"安卓哈希密钥
你能帮我解释一下吗?签名APK的哈希密钥Facebook有时会更改吗?应用程序何时上传到play商店怎么样?
非常感谢。
切换电脑时,调试密钥哈希会发生变化,因为每台电脑都有不同的Debug.keystore文件。当您使用release.keystore文件获取release-keyhash时,即使您切换PC,它也不会更改。在这种情况下,您使用的是相同的release.kkeystore文件。
您需要在facebook上注册开发人员哈希密钥(与您的计算机相关)和生产哈希密钥(与其签名版本相关)。为了确保你有正确的密钥,在你的代码中运行这个并复制输出:
try {
PackageInfo info = getPackageManager().getPackageInfo(
"Your package name",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
System.out.println(Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
无论何时您的应用程序正在开发中,调试哈希密钥都用于facebook集成。调试哈希密钥是特定于机器的(即您正在使用的PC)
而发布散列密钥与调试密钥不同(它不会改变)。当你生成一个签名的apk进行上传时,必须更新一个发布哈希密钥,以便与你的应用程序进行Facebook集成。
阅读此以更好地理解如何为facebook创建发布哈希密钥
您可以使用以下代码检查您的密钥哈希:
// Add code to print out the key hash
try {
String PACKAGE_NAME=getApplicationContext().getPackageName();;
PackageInfo info = getPackageManager().getPackageInfo(
PACKAGE_NAME,
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) {
}