签名APK的Android Facebook哈希键有时会更改

签名APK的Android Facebook哈希键有时会更改,android,facebook,Android,Facebook,我正在使用Facebook登录集成到我的应用程序。我为已签名的APK配置了哈希键Facebook并成功运行。但有时,当我发布一个新的APK文件时,散列键不再有效(“无效的散列键与存储的任何文件都不匹配”) 我阅读了下面的链接,发现“而且,根据电脑的不同,有时密钥可能会发生变化,如果是这样,哈希值也会发生变化,你必须适应这种变化” 你能告诉我关于这件事的更多细节吗? 签名APK的哈希键Facebook有时会更改吗?该应用程序何时上载到play store 非常感谢。切换电脑时,调试密钥散列会更改

我正在使用Facebook登录集成到我的应用程序。我为已签名的APK配置了哈希键Facebook并成功运行。但有时,当我发布一个新的APK文件时,散列键不再有效(“无效的散列键与存储的任何文件都不匹配”)

我阅读了下面的链接,发现“而且,根据电脑的不同,有时密钥可能会发生变化,如果是这样,哈希值也会发生变化,你必须适应这种变化”

你能告诉我关于这件事的更多细节吗? 签名APK的哈希键Facebook有时会更改吗?该应用程序何时上载到play store


非常感谢。

切换电脑时,调试密钥散列会更改,因为每台电脑都有不同的Debug.keystore文件。当您使用release.keystore文件获取release.keystore时,即使您切换PC,它也不会更改。在这种情况下,您使用的是相同的release.keystore文件。

每当您的应用程序正在开发时,调试哈希键都会用于facebook集成。调试哈希键是特定于机器的(即您正在使用的PC)

而release散列键与debug键不同(它不会改变)。当您生成用于上载的已签名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) {

    }       

您需要在facebook上注册开发者hashkey(与您的计算机相关)和生产hashkey(与签名版本相关)。 要确保使用正确的密钥,请在代码中运行此命令并复制输出:

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) {

    }

我也面临同样的问题,在调试签名apk时我得到了散列密钥。该密钥对我有效。在发布模式下发布apk时,你需要在facebook开发者控制台注册散列密钥!在facebook应用程序设置页面中,有一个添加多个散列值的选项…如果您使用android studio,您可以通过直接从右侧窗口的gradle任务列表中运行“signingReport”任务,轻松获取签名构建的散列值…感谢您的回复。正如我所指出的,我使用签名的APK为Facebook使用哈希键成功运行,但有时当我生成一个新的APK文件进行测试时,哈希键不再有效。我只用一台电脑就可以做到这一点。在你的评论中,这意味着当我们生成一个新的APK文件时,哈希键可以更改,对吗?@DinhThang你更改了包名吗?还是项目名称?@DinhThang我添加了代码,在运行应用程序时,会在logcat中显示您的密钥哈希。您可以将其与存储在facebook开发者控制台中的密钥散列进行比较,如果不同,请添加密钥散列。@DinhThang您是否尝试比较从logcat收到的密钥散列以及保存在facebook开发者控制台中的密钥散列?谢谢Arshak。对不起,我的问题不清楚。我知道获取散列密钥的方法。我在这里担心的是与APK文件一起使用的哈希键,但有时它是无效的,尽管我在同一台机器上生成了APK文件,这导致生成Facebook登录函数时出现错误。根据您的评论,这意味着如果我们只使用一个文件版本,哈希键永远不会更改。keystore,不是吗?是的。。它不会根据facebook的开发者文档进行更改。如果它正在更改,请确保您使用的是相同的文件,并且添加到facebook开发者控制台的keyhash是正确的。我建议您使用logcat获取keyhash,不要使用命令行工具,因为它很混乱。您可以使用@user3793589的答案。生成已签名的apk并在您的设备上运行,检查logcat并获取您的发布密钥哈希。