Facebook android app error : Invalid key hash

Facebook android app error : Invalid key hash

我已将 Facebook SDK 导入到我的 android 项目中,第一次从我的 android 应用程序登录 Facebook 时它工作正常,但第二次出现此错误:

Invalid key hash. The key hash "..." does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/..

我也尝试输入他们在此错误中提供的密钥,但没有成功。

编辑: 我使用了它生成密钥的 cmd 命令并要求输入密码 "android"

添加您的应用程序中提供的密钥

http://developers.facebook.com/apps/

此外,在最后添加"="符号

例如。你得到 2jmj7l5rSw0yVb/vlWAYkK/Y 比在 Facebook 页面上, 添加 2jmj7l5rSw0yVb/vlWAYkK/Y= 最后一个 "=" 标志很重要。

我花了一个小时生成密钥哈希,然后尝试了这个技巧。

Keyhashes 与从不同系统生成的 .apk 文件不同。所以最好的解决方案是 - 当你得到错误

"Invalid key hash. The key hash "<KEYHASH>" does not match any..."

然后写入或复制 "<KEYHASH>",然后转到 apps-> settings-> android 将其放入 Facebook 开发者页面。如果不起作用,则将 "=" 放在您从错误中复制的 keyhash 之后,然后重试。并且不要忘记实施您的项目。

据我所知,您已经获得了密钥哈希,但我仍然会在此处放置用于在控制台中获取它的代码。

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.your.project.package", PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String something = new String(Base64.encode(md.digest(), 0));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (PackageManager.NameNotFoundException e1) {
    Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
    Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
    Log.e("exception", e.toString());
}

其中"com.your.project.package"是你项目的包=)

接下来,不要删除以前的密钥哈希,我认为它们不会冲突。例如,我的 Facebook 应用程序中有 2 个密钥哈希。

还有最近的事情,我想这就是问题所在。在 developers.facebook 转到您的应用程序的状态和审核。并将您的应用程序切换到 public。

有两种可能的解决方案可能会有所帮助,每一种都在不同的场合为我完成了,所以我们开始吧。

(假设您输入了应用程序告诉您的哈希键但没有起作用)

  1. 你应该删除通常位于“C:\Users\yourUserName.android”的debug.keystore文件,然后重新编译工程,然后使用新的 debug.keyhash 获取新的哈希键(如 here 所述)。那么这些新的密钥哈希应该可以工作。

2.These 有点棘手。也许即使您输入了您的 Facebook 开发人员仪表板密钥哈希也不起作用的原因,是因为您的 Facebook 应用程序 ID 在您构建 apk 的那一刻发生了变化(这发生在我身上,因为我有我的应用程序的以前版本并且它给了我过去的 ID,即使我在 config.xml 中指定了它)。所以,在我的例子中,我有一个 cordova 项目,所以我去了“C:your_CordovaProject\platforms\android\res\values\facebookconnect.xml”并打开文件,在这里你要检查是否fb_app_id 与您在 Facebook 仪表板中的相同。如果不是(在我的情况下不是)你要做的是 --删除你的 facebook 插件, --再次添加并 -- 像这样再次指定您的应用程序 ID 和名称:

cordova 插件添加 cordova-plugin-facebook4 --save --variable APP_ID="123456789" --variable APP_NAME="myApplication"

然后我又做了一次散列键处理,它成功了。希望对你有帮助

您应该获得新密钥;

第 1 步。如果您没有 OpenSSL 库,请下载 here

第2步,解压。 在 C:/ 中创建一个文件夹 - OpenSSL 并将提取的代码复制到此处。

第 3 步。然后打开 cmd 并转到 C:\Program Files\Java\jdk1.7.0_79\bin

第四步,执行这条命令-

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64

第 5 步。获取密钥并访问开发者 facebook 网站

第六步。将密钥添加到您的项目。

就是这样。

这对我有用。

将 APK 复制到您的 PC 程序 Files\java\jdkX.X.X_XXX\bin 文件夹

在我的例子中是 C:\Program Files\Java\jdk1.8.0_191\bin

在此目录中打开CMD并输入以下内容

keytool -list -printcert -jarfile YOUR_APK_NAME.apk

将 SHA1 值复制到剪贴板它将是这样的:79:D0:E6:80:4E:28:1E:D1:88:28:CB:D7:E6:BE:2E:0C:FB:24:98:52

然后转到 http://tomeko.net/online_tools/hex_to_base64.php 将您的 SHA1 值转换为 base64。

这就是 Facebook 要求获取生成的哈希“********************=”并将密钥哈希复制到您的 Facebook 开发人员应用程序设置中。