【问题标题】:The key hash ...... does not match any stored key hashes密钥哈希......与任何存储的密钥哈希不匹配
【发布时间】:2015-04-10 05:56:46
【问题描述】:

当我准备在 facebook 上发布消息时,我在 facebook 登录页面上收到了以下错误消息。

'Invalid key hash. The key hash ...... does not match any stored key hashes'

我正在使用各种 Android 设备。

  1. 当我使用 Galaxy s3 时,我没有收到错误。

  2. 但是当我使用 Galaxy s4 时,我得到了错误。

  3. 当我使用 Nexus 5 时,我没有收到错误提示

  4. 但是当我使用 Xperia A 时,我得到了错误。

为什么会出现这种症状?

我尝试了以下命令来生成密钥哈希。

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

但显示相同的错误。我还尝试将哈希键输入到 facebook 开发者网站。哈希键在错误消息中。但它没有用。

我找到了一个解决方案。

当我删除我的应用程序和 Facebook 之间的连接时,我可以发布一条消息。

但我认为删除连接是不寻常的解决方案。 此外,即使我可以使用 Galaxy s4 发布,我也无法使用 Xperia A 发布。 即使我可以使用 Xperia A 发布,我也无法使用 Galaxy s4 发布。

我应该如何解决这个问题?如果有人知道答案,请告诉我解决方案。

【问题讨论】:

  • 您应该始终从应用程序代码中创建密钥散列吗?你做到了吗?
  • 感谢您的回答。我从来没有尝试过。但是如何将我从应用程序内部创建的哈希键动态注册到开发人员站点?
  • 我可以为您提供只能为您的应用创建 keyhash 的代码,无论它当前使用的密钥是调试密钥还是签名密钥。一旦你得到那个keyhash,你必须在facebook的开发者网站上手动上传那个key。无法动态上传 keyhash。
  • 我明白了。所以请教我如何创建正确的密钥

标签: android facebook hash key facebook-android-sdk


【解决方案1】:

您可以使用以下代码生成 keyhash 以上传到 facebook 开发者网站:

/**
 * generates key hash for facebbok
 */
private void GetKeyHash()
{

    PackageInfo info;
    try
    {
        info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md;
            md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String keyhash = new String(Base64.encode(md.digest(), 0));
            // String something = new String(Base64.encodeBytes(md.digest()));
            Log.e("keyhash", "keyhash= " + keyhash);
            System.out.println("keyhash= " + keyhash);
        }
    }
    catch (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());
    }

}

尝试将此代码放在应用的第一个屏幕中。

  1. 运行您的应用程序,然后检查 logcat 以获取查找调试密钥哈希。

  2. 要获取签名密钥哈希,创建签名 APK,在设备中安装并打开应用程序,然后检查该设备的 logcat。

在这两种情况下,logcat 都会显示如下内容:

04-10 12:07:33.710: E/keyhash(362): keyhash= ncoE5ojihY80FbI23/xEAdSfeS0=
04-10 12:07:33.710: I/System.out(362): keyhash= ncoE5ojihY80FbI23/xEAdSfeS0=

一旦您获得这些密钥哈希(调试和签名),将它们上传到 facebook 开发者网站,然后做任何您想做的事情。

参考link

我希望这可能对您或其他人有所帮助。

【讨论】:

  • 感谢您的详细解答!我有一点我不知道。我不知道如何很好地创建签名的 APK。创建签名的 APK 时是否必须包含您的代码?我不知道如何将创建的签名 APK 安装到我的设备上。我可以使用终端吗?
  • 天啊!!你完全是android的新手
  • @AmrutBidri 我使用了你的代码,它给了我与我通过这个命令使用终端得到的完全相同的 keyhash keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
  • 我仍然得到密钥哈希不匹配
猜你喜欢
  • 2014-08-10
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多