键哈希值......与任何存储的键哈希值都不匹配

时间:2015-04-10 05:56:47

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

当我即将在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时,我收到了错误。

  5. 为什么会出现这种症状?

    我尝试使用以下命令生成密钥哈希。

    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进行发布。

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

1 个答案:

答案 0 :(得分:0)

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

/**
 * 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。

  3. 在这两种情况下,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

    我希望这可以帮助你或其他人。