即使我将该密钥散列放在 Facebook 中(在 Facebook 设置中添加了散列键),也会收到错误的无效密钥散列

Getting error invalid key hash even though i put that key hash in Facebook (hash keys added in Facebook settings)

我正在制作一个 android 应用程序,用户可以在其中使用 Facebook 登录(通过 Firebase 和 FirebaseUI)。我是 android 开发和 Facebook android 身份验证的新手。使用电子邮件、gmail 和 twitter 登录都可以,但是使用 Facebook 登录不行,因为我需要这个哈希密钥...

当我设置 Facebook 身份验证并单击使用 Facebook 登录时,出现以下错误。

Invalid key hash. The key hash `[keyhash1=]` does not match any stored key hashes. Configure your app key hashes at https://developers.facebook.com/apps/[app id].

请注意,它们显示的 [keyhash1=] 与我在命令行 运行 中获得的密钥哈希不同 [keyhash2=]:

keytool -exportcert -alias androiddebugkey -keystore [my name]\.android\debug.keystore | “C:\Users\[my name]\openssl\bin\openssl” sha1 -binary | “C:\Users\[my name]\openssl\bin\openssl” base64

当我将 debug.keystore 文件放入这个很酷的程序中以获取 Facebook 的哈希键时,我也得到了相同的哈希键 [keyhash2=] (https://www.androidfilehost.com/?fid=95864024717072835)。所以我得到的钥匙一定是好的...

所以我输入 https://developers.facebook.com/apps/[my app id]/settings/ hash key [keyhash2=] 仍然出现上述错误。我什至放了两个哈希键,一个是我用 cmd 得到的,另一个是我在错误中看到的(包括 = 符号),但我仍然有同样的错误。有谁知道为什么?

我在 facebook 中也看到它被命名为 key hash,在 cmd 中它被命名为 hash key。我想这是同一回事...

解决方法:1.从windows生成的密钥不正确,要么使用FB在错误中使用的密钥散列,或者使用我在下面粘贴的代码获得相同的密钥哈希 + 2. 如果您使用 Firebase,则需要引入来自 Firebase 的 OAuth 重定向 URI(转到您的Firebase 项目,然后是身份验证、登录方法,然后是 Facebook,您会在那里找到这个 URL)。然后转到 developers.facebook.com 到您的帐户,然后添加一个新产品,然后选择 Facebook 登录,在其中添加来自 Firebase 的 link 和 设置嵌入式浏览器 OAuth 登录(非常重要 - 这是我失败的原因)

private void printKeyHash() {
    // Add code to print out the key hash
    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());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.e("KeyHash:", e.toString());
    } catch (NoSuchAlgorithmException e) {
        Log.e("KeyHash:", e.toString());
    }
}

不要忘记从您的 MainActivity class 调用 printKeyHash()。然后您的代码将显示在 adb logcat 中。