17

我的应用程序使用简单的 facebook 登录。我已经在我的应用仪表板 key_hash 部分中输入了 keyhash,并且我能够成功登录。现在我已经发布了应用程序并尝试登录,但它在 webview 上显示一条错误消息,说明

"Invalid android_key parameter. The key rX6qeRitkFCWui3de74rxB_qc1s does not match any allowed key. Configure your app key hashes at http://developers.facebook.com/apps/<my_fb_app_id>". 

实际上 rX6qeRitkFCWui3de74rxB_qc1s 不是我在本机应用程序中拥有的密钥哈希。它来自哪里?无论如何,我也在本机应用程序中输入了此密钥哈希,但收到相同的错误消息并且仍然无法登录。我哪里错了?请帮我。

4

9 回答 9

26

您可以通过编码生成哈希键,您只需做一件事。将此代码粘贴到主类(第一类)中,然后运行应用程序并检查 logcat,您将在其中找到哈希键。

还有一件事,用你的包名替换这个包名“com.example.creeper”:

try{
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.example.creeper", 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) {

}
于 2013-05-27T07:53:02.450 回答
12

如果您遇到此问题,请将此密钥放入您的developer.facebook.com

在此处输入图像描述

然后确保您的应用在 developer.facebook.com上上线

这个绿色圆圈表示该应用程序已上线 在此处输入图像描述

如果不是,请按照这两个步骤使您的应用程序上线

第 1 步转到您的应用程序 -> 设置并添加联系人电子邮件,然后应用保存更改

Setp 2然后转到 Status&Review 选项并确保此切换为 Yes 我添加了屏幕截图

在此处输入图像描述

于 2016-01-23T08:16:03.057 回答
5

尝试使用用于签署已发布应用程序的应用程序密钥库文件生成新的密钥哈希。此问题可能是由于提供了由调试密钥库生成的密钥哈希,该密钥仅适用于未签名的 apk 文件。请参阅以下链接的第 5 步以了解如何生成密钥哈希 https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

并使用 facebook 的应用程序设置页面进行更新。

还要检查你的包名和类名是否正确。

于 2013-05-27T11:50:05.190 回答
3

使用 .android 文件夹中包含 android 的 debug.keystore 的调试密钥库会产生一个奇怪的问题;使用 android 应用程序上的 facebook 登录按钮登录将第一次完美地发生。但是当我退出并尝试登录时,它会抛出一个错误说:这个应用程序没有配置 android key hashes。请访问 http:// ....

使用 keytool 命令创建密钥库(keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -sigalg SHA1withRSA -keysize 2048 -validity 10000)并将此密钥库放在我的项目最顶层的父文件夹中并制作项目 build.gradle 文件中的以下条目解决了该问题:

 signingConfigs {
        release {
            storeFile file("my-release-key.keystore")
            storePassword "passpass"
            keyAlias "alias_name"
            keyPassword "passpass"
        }    }

请注意,您始终在您的 android 活动的 onCreate() 中使用以下方法来获取密钥哈希值(在您的应用程序的 developer.facebook.com 站点中注册),而不是使用命令行(keytool -exportcert -alias -keystore | openssl sha1 -binary | openssl base64) 生成哈希值作为命令行在某些情况下可能会输出错误的密钥哈希:

    public  void showHashKey(Context context) {
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo("com.superreceptionist",
                    PackageManager.GET_SIGNATURES);
            for (android.content.pm.Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());

                 String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
                Log.e("KeyHash:", sign);
                //  Toast.makeText(getApplicationContext(),sign,     Toast.LENGTH_LONG).show();
            }
            Log.d("KeyHash:", "****------------***");
        } catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
e.printStackTrace();
        }
    }
于 2015-04-18T13:35:45.237 回答
2

您需要从 debug.keystore 中获取密钥哈希,或者如果您使用发布密钥对其进行签名,而不是使用它。确保您的别名也是正确的。这对您的密钥哈希有影响。

看看这个: 如何创建 Facebook 密钥哈希?

于 2013-05-27T07:25:33.280 回答
2

例如,错误中提供的键是"rX6qeRitkFCWui3de74rxB_qc1s",然后是 Facebook 中的哈希码列表,您尝试将此代码放在最后"="获取的末尾rX6qeRitkFCWui3de74rxB_qc1s=,看看它是否有效。

于 2014-08-22T17:47:50.907 回答
1

尝试生成新的密钥哈希并在 facebook 开发人员中对其进行编辑,然后再次使用新的密钥哈希注册应用程序。

于 2013-05-27T09:11:28.637 回答
1

这是 C# 版本,供任何试图让 Xamarin 示例工作的人受益。

    public  void showHashKey(Context context) 
    {
        try {
            PackageInfo info = context.PackageManager.GetPackageInfo("com.facebook.samples.hellofacebook", PackageInfoFlags.Signatures);
            foreach (Android.Content.PM.Signature signature in info.Signatures) {
                MessageDigest md = MessageDigest.GetInstance("SHA");
                md.Update(signature.ToByteArray());

                var sign = Base64.EncodeToString(md.Digest(), Base64Flags.Default);
                Log.Info("KeyHash:", sign);
            }
            Log..Info("KeyHash:", "****------------***");
        } catch (PackageManager.NameNotFoundException e) {
            e.PrintStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.PrintStackTrace();
        }
    }
于 2015-07-27T14:15:14.700 回答
0

对我来说,当我运行 keytool 命令并提示我输入密码时,我将其解释为我需要为哈希选择一个密码。事实上,您需要向他们提供密钥库(保存哈希的位置)的密码。有趣的是(不好笑,“哈哈”),它会接受任何密码并为你输出一个哈希值。这导致我的哈希不匹配。幸运的是,我很久以前就将密码存储在 OS X 钥匙串中,所以我发现了它的真正含义。我尝试了正确的密码并得到了一个不同的哈希值。请注意,默认密钥库密码是android,因此请尝试一下,这可能是您所缺少的。

我真的认为一个错误的密码应该拒绝你而不是输出一个哈希,我想知道这是否是一个错误——如果是这样,请在评论中留下一个错误报告链接。

于 2017-01-24T19:04:30.783 回答