【问题标题】:Facebook key hash does not match any stored key hashesFacebook 密钥哈希与任何存储的密钥哈希不匹配
【发布时间】:2013-12-16 13:13:55
【问题描述】:

Facebook 哈希键确实有问题。 我在我的 Eclipse 中生成了它.. 证明:

然后我去https://developers.facebook.com/注册了一个新应用。

最后,我在 Facebook 开发人员的设置中设置了我的 hashkey:

但不管我做什么,我都会收到相同的错误日志: “密钥哈希 B5dWUEYfZJL/............jyA= 不匹配任何存储的密钥哈希”

有谁知道我做错了什么或如何解决这个问题? 如果我在自己的应用程序中使用 HelloFacebookSample 中的 ID 和名称,一切正常。 所以它与我最有可能在某处设置的密钥哈希、id 或名称有关..

谢谢, 延特

【问题讨论】:

  • 显示密钥哈希设置的屏幕截图位置错误。 “示例应用程序设置”仅适用于 SDK 附带的示例应用程序的密钥哈希(因此您可以在本地构建它们)。您应该将密钥哈希值放在应用设置中的“Android”选项卡下。
  • 是的,我知道你的意思,那是我最初的错。然后我将其移至 Android 选项卡,但都没有成功。在一切开始工作之前,我必须手动删除我的哈希键并生成一个新的。
  • 从developers.facebook.com 中删除您的应用并尝试stackoverflow.com/questions/4388992/…
  • 在 android studio 中生成 SHA1 并从这里转换为哈希:fbkeyhash.com/index.php

标签: android facebook facebook-android-sdk facebook-sharer


【解决方案1】:

每次我获得支持时都会更新日期,因为我知道它仍然有效

日期:2022 年 1 月 1 日 (2022 年 1 月 1 日)

这就是我解决这个问题的方法

  1. 我从signingReport 得到了 SHA1

(在 gradle-->app/Tasks/android/signingReport 中找到)

将 SHA1 值复制到剪贴板

喜欢这个XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

  1. Facebook sdk 要求它在 base64 哈希键中,所以我们打开 http://tomeko.net/online_tools/hex_to_base64.php

将您的 SHA1 值转换为 base64。

这就是 Facebook 的要求 获取生成的哈希“********************=”

  1. 打开https://developers.facebook.com/

  2. 选择您的项目 在设置选项卡中,basic/Key Hashes 添加生成的密钥。

  3. 不要忘记保存更改。

【讨论】:

  • 在我的项目文件夹中的任何地方都看不到app/Tasks/android/signingReport
  • @AntonDuzenko 在右侧你会看到 gradle 标签打开它然后去 app/tasks/android/signingReport 或者看到这个答案stackoverflow.com/a/68587380/9138982
【解决方案2】:

对我来说,最终起作用的是使用存储在 android/app 文件夹中的 debug.keystore。所以基本上像这样从 app 文件夹运行 keytool 命令:

keytool -exportcert -alias androiddebugkey -keystore android/app/debug.keystore | openssl sha1 -binary | openssl base64

密码是:android

【讨论】:

    【解决方案3】:

    为了签署开发者构建,您将使用 Android Studio 生成的密钥库和密钥。您可以使用以下命令检索它:

    keytool -exportcert -storepass android -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

    谢谢

    【讨论】:

    • 感谢您的回答。密码才是关键。
    【解决方案4】:

    仅适用于 Windows:

    起初我使用“openssl-0.9.8k_X64.zip”来生成密钥哈希。出现这个问题。

    然后我在 windows 中使用了 openssl 版本“openssl-0.9.8e_X64.zip”。然后问题就解决了。

    https://code.google.com/archive/p/openssl-for-windows/downloads

    我想我们大多数人都有同样的问题。

    【讨论】:

    • 你怎么知道的。谢谢它解决了我的问题。
    • 这就是 2022 年对我有用的方法,感谢您的帮助!
    【解决方案5】:

    最好的解决方案是获取您的 APK 文件, 使用 keytool 获取您应用的签名,如下所示:

    C:\Program Files\Android\jdk\microsoft_dist_openjdk_1.8.0.25\bin> ./keytool -list -printcert -jarfile myapp.coolapp.apk
    

    就我而言,我的 apk 与 keytool 放在同一目录中,后来我将其删除。 运行上述命令后,你有一个密钥列表,复制 SHA1 密钥 使用 this tool 将其转换为 base64 复制Base64转换, 转到 facebook 开发门户,导航到您的应用程序,然后“设置/基本” 然后转到密钥哈希部分。 将 Base64 哈希粘贴到那里,Facebook 登录就可以正常工作了。

    Here is an article that explains这些步骤详细:

    【讨论】:

      【解决方案6】:

      什么在我的案例中起作用:

      【讨论】:

        【解决方案7】:

        我在进行 facebook 集成时遇到了同样的问题,我通过以下步骤解决了这个错误:

        1. 在你的flutter项目中打开android文件夹(File/open/yourFlutterProject/android)
        2. 现在您可以在右侧顶部的 penal 中看到 gradle 字段 --------
        3. 执行此步骤(gradle/android/app/tasks/android/signingReport)并点击它。
        4. 现在您可以看到您的项目 SHA-1 密钥,请注意。
        5. 现在打开此站点 (Site Link) 并将 SHA-1 转换为 keyhash 即可获得您的 keyhash 值,请注意。
        6. 不要在您的 developer.facebook 控制台中使用当前 keyhash 更新/更改此 keyhash
        7. 现在运行完美。

        【讨论】:

          【解决方案8】:

          只需运行命令adb logcat | grep hash 并查找类似Key hash ABCDEFGH1234= does not match any stored key 的内容。现在将此哈希保存在您的 fb 开发者控制台上。

          【讨论】:

            【解决方案9】:

            生成释放哈希键时,注意这一点

            适用于 Windows

            在生产环境生成hash key时需要在windows上使用openssl-0.9.8e_X64.zip,不能​​使用openssl-0.9.8k_X64.zip

            这些版本产生不同的哈希键,由于某种原因 9.8k 不能正常工作...... 9.8e 可以。

            使用下面的流程

            我就是这样解决这个问题的在你的cmd中复制以下命令

            keytool -list -printcert -jarfile yourapkname.apk
            

            将 SHA1 值复制到剪贴板,如下所示 CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44 :84 并打开 http://tomeko.net/online_tools/hex_to_base64.php 将您的 SHA1 值转换为 base64。

            对于 MAC

            第 1 步:

            使用以下命令生成 SHA1 密钥
            keytool -list -v -keystore 密钥库路径
            输入密钥库密码。
            复制 SHA1 密钥。

            第 2 步:
            打开此链接 - http://tomeko.net/online_tools/hex_to_base64.php
            将 SHA1 密钥粘贴到十六进制字符串中
            点击转换按钮
            获取输出值中的 Release Keyhash

            【讨论】:

            • 这解决了我的问题keytool -list -printcert -jarfile yourapkname.apk :)
            【解决方案10】:

            调试中

            在 OnCreate 方法中复制粘贴这段代码

                   try {
                        PackageInfo info = getPackageManager().getPackageInfo(
                                getApplication().getPackageName(),
                                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.d("KeyHash e1",e.getLocalizedMessage() +"");
                    } catch (NoSuchAlgorithmException e) {
                        Log.d("KeyHash e2", e.getLocalizedMessage() +"");
                    }
            

            打开 Logcat 并过滤/查找 'D/KeyHash:'

            D/KeyHash: D5uFR+65hafzotdih/dOfp14FpE=
            

            然后打开 https://developers.facebook.com/ 并打开 YourApp/Setting/Basic
            向下滚动到 Android 部分,然后粘贴密钥哈希并保存

            【讨论】:

              【解决方案11】:

              在 Android Studio 的右侧,转到 Gradle -> Tasks -> android -> signingReport 并运行它。 复制 SHA-1 密钥并使用 this 将其转换为 base64,然后在 Facebook 开发者控制台中将转换后的 base64 哈希添加到您的应用程序中。 如果您想使用发布哈希,请在命令行中运行:keytool -exportcert -alias YOUR_KEYSTORE_ALIAS -keystore YOUR_KEYSTORE | openssl sha1 -binary | openssl base64 其中YOUR_KEYSTORE 是您在发布变体中用作signinConfig.keystore.jks 的路径,YOUR_KEYSTORE_ALIAS 是您在创建密钥库时提供的别名。如果您不记得别名,您可以运行 keytool -v -list -keystore YOUR_KEYSTORE 并查看有关密钥库的所有信息

              【讨论】:

                【解决方案12】:

                这是一个可能发生的情况,解决了我的错误:

                https://developers.facebook.com/quickstarts之后运行

                OSX/Linux:

                keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
                

                Windows:

                keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
                

                当询问Enter keystore password:您可能不小心输入了错误的密码,默认密码为“android”。键入任何其他密码将为您提供不同/错误的哈希键。在app pageKey Hashes 字段中粘贴正确的哈希键

                这解决了我的问题,希望这对犯我这个特殊错误的人有所帮助

                【讨论】:

                • 是否可以更改默认密码?如果是的话怎么\在哪里?
                • @Coder123 只需在另一个目录中使用不同的密码和密钥创建您自己的debugAlt.jks 并将其放入您的signingConfigs { debug { storeFile file(new File('../debugKey.jks')) storePassword "Qwerty123" keyAlias "debug" keyPassword "Qwerty123" } }
                • 你的意思是我们应该强制使用“android”作为密码?写在哪里?
                • @user1090751 单击我的答案中的“android”链接以获取更多详细信息。您可以创建自己的密码,如上一条评论中指出的那样
                • 感谢您提供此密码!这为我解决了!
                【解决方案13】:

                这对我有用

                1. 转到 Google Play 管理中心
                2. 选择发布管理
                3. 选择应用签名
                4. 使用此工具将应用签名证书 SHA-1 转换为 Base64(这将不同于您当前的上传证书):http://tomeko.net/online_tools/hex_to_base64.php?lang=en
                5. 将 Base64 转换后的 SHA-1 输入到您的 Facebook 开发人员仪表板设置中,然后重试。

                【讨论】:

                • 先生,您拯救了我的一天。为什么文档中没有提到像这样的一个关键细节?难以置信。
                【解决方案14】:

                我已经尝试了此页面上的所有内容,但没有成功,直到我休息一下,然后当我继续工作时,不做任何更改,它突然起作用了。也许(只是也许)facebook 需要时间来注册密钥

                【讨论】:

                  【解决方案15】:

                  @Ketan Ramani 的回答帮助了我,但就我而言,我没有使用 LoginManager,而是在图像上注册回调,如果您在任何图像上使用 registerCallback 并使其成为登录按钮使用下面的代码

                   loginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);
                  

                  【讨论】:

                    【解决方案16】:

                    当用户尝试使用 Facebook 登录时,我也遇到了同样的问题。

                    不工作:Facebook 应用程序已安装在设备中。

                    正在运行:Facebook 应用未安装

                    因此,以下代码解决了 Facebook 应用安装在设备中的问题。

                    LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY); //This Line Solved Issue
                    LoginManager.getInstance().logInWithReadPermissions(context, Arrays.asList("public_profile", "email")); 
                    

                    【讨论】:

                    • 节省了我的时间..!!
                    【解决方案17】:

                    按照这些步骤来生成正确的密钥哈希。

                    1. 在 android studio 中打开您的项目并运行该项目。
                    2. 点击 Gradle 菜单。
                    3. 选择您的应用并展开任务树。
                    4. 双击android -> signingReport 看看神奇
                    5. 点击上方标签后的结果
                    6. 复制SHA1密钥并浏览SHA1 key to key hash
                    7. 将 SHA1 密钥转换为密钥哈希后,复制新的密钥哈希并将其粘贴到 facebook 控制台中。这将像魅力一样发挥作用。

                    【讨论】:

                    • 不错的简单解决方案,只需确保从正确的 Variant 复制 sha1,在我的情况下它是 release。
                    【解决方案18】:

                    ---2019-----这就是我解决这个问题的方法

                    1. 在右侧面板中的 android studio Gradle>App>android>signingReport 复制 SHA1
                    2. 并打开http://tomeko.net/online_tools/hex_to_base64.php进行转换 将 SHA1 值转换为 base64。

                    这就是 Facebook 的要求 获取生成的哈希“********************=”并将密钥哈希复制到 facebook 应用程序。

                    【讨论】:

                    • 谢谢,这解决了我的问题。为什么 keytool 版本不起作用很有趣
                    【解决方案19】:

                    我的问题可能是由于openssl本身错误地生成了哈希,如果有人使用facebook android指南本身提供的方法遇到类似问题。

                    解决这个问题的一种方法是:

                    1. 使用此工具获取您的 sha1:

                    keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v

                    1. 使用此工具将其转换为 base64

                    http://tomeko.net/online_tools/hex_to_base64.php

                    学分:

                    https://github.com/facebook/react-native-fbsdk/issues/424#issuecomment-469047955

                    【讨论】:

                    • 是的,我也一样。我做对了,但 openssl 做了一些事情,但这是不正确的。我花了 6 个小时。
                    【解决方案20】:

                    我发现用于签署要上传到 Google Playstore 的应用程序的 SHA-1 不正确。我意识到我的应用程序正在由 Google Play 商店使用不同的令牌进行签名。我按照以下步骤操作:

                    1. 转到 Google Play 控制台
                    2. 点击发布管理
                    3. 点击应用签名
                    4. 将应用签名证书 SHA-1 转换为 Base64(这将不同于您当前的上传证书)
                    5. 将 Base64 转换后的 SHA-1 输入我的 Facebook 开发者仪表板 设置

                      我现在可以在 Android 设备上下载 Facebook 后登录我的应用程序。

                    【讨论】:

                      【解决方案21】:

                      您可能使用了错误的密码,调试密钥库的默认密码是 android

                      【讨论】:

                        【解决方案22】:

                        我遇到了同样的问题。我发现我使用了错误的哈希键。 keytool 打印了错误的 hashkey,因为我使用错误的别名运行命令。
                        请再次检查您的命令。它将解决您的问题

                        keytool -exportcert -alias "test fb sdk" -storepass android -keypass android -keystore "C:\keystore.keystore" | openssl sha1 -binary | openssl base64
                        

                        【讨论】:

                          【解决方案23】:

                          我遇到了类似的问题。在将我的应用程序签名并发布到谷歌 PlayStore 后,哈希值似乎发生了变化。 我在 developer.facebook.com/app//settings 上的我的应用程序中向密钥哈希发送消息的 Facebook 中添加了新的哈希(如前所述)。现在它又可以工作了。

                          【讨论】:

                            【解决方案24】:

                            检查您的 google-services.json 。可能是不一样的。下载最新的 google-services.json,然后运行该应用程序。希望对您有所帮助。

                            【讨论】:

                              【解决方案25】:

                              看起来很疯狂,但确实有效

                              真正的问题是因为你的私人 facebook 帐户得到了这个应用程序,这个帐户的哈希键不具有可比性

                              但是你不能在真实用户面前遇到这个错误。但我不确定

                              最终进行下一步:

                              1. 转到您尝试登录的私人 Facebook 帐户
                              2. 然后点击应用目录中的更多

                              1. 点击设置

                              然后点击十字

                              现在您可以使用 facebook 登录。但是下次如果您注销并且再次尝试登录,您将面临同样的问题...

                              也很奇怪……

                              但我不相信 facebook 不知道这件事......

                              【讨论】:

                                【解决方案26】:

                                我遇到了类似的问题。解决方案非常简单。

                                错误信息如下所示:

                                07-05 ...... Invalid key hash. The key hash sL1***************VY= does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/150*******778
                                07-05 ......     at com.facebook.login.LoginManager.onActivityResult(LoginManager.java:191)
                                

                                只需登录https://developers.facebook.com,选择“设置”选项卡,然后将密钥哈希“sL1***************VY=”添加到已保存的密钥哈希列表中Android 面板。

                                【讨论】:

                                • 这是最好的答案。
                                • 这是一个完美的答案
                                • 并且,当询问您从未设置的调试密钥密码时,请输入 android 并稍后感谢我 :)
                                • 异常不再返回密钥哈希
                                • 即使这对我不起作用,我卸载了 facebook 应用程序,它的工作原理与另一个答案中提到的一样
                                【解决方案27】:
                                1. 检查您的密钥哈希值。
                                2. 从您的手机中卸载 Facebook 应用程序。
                                3. 然后使用 SDK 重试。

                                这解决了我的问题。

                                【讨论】:

                                • 卸载 FB 应用解决了问题!!谢谢你:)
                                • @Rezaul Karim 它可以工作,但是如果我想让它在不安装 fb 应用程序的情况下工作怎么办?
                                • 清除 facebook 应用程序上的存储对我有用。
                                【解决方案28】:

                                如果您的登录在未安装 facebook 应用程序的情况下正常工作,并且由于错误“哈希键不匹配”而在安装 facebook 应用程序时无法正常工作,请执行以下步骤

                                1 ) 启动您的应用程序并尝试使用 facebook 登录。将打开一个对话框并告诉您:“在 facebook 开发人员控制台中未找到该密钥,并显示哈希密钥。

                                2 ) 记下该哈希键。

                                3 ) 将其放入您的 facebook 开发人员控制台中,您首先在其中生成 api 密钥,然后使用 new 删除哈希密钥并保存。现在你完成了。任何下载您的应用程序并使用之前使用的密钥库发布的人都可以登录 facebook。

                                【讨论】:

                                • 谢谢。像魅力一样工作。
                                • 不,对我不起作用。没有 facebook 应用程序它仍然可以正常工作,但如果安装了 fb 应用程序,它会给我同样的错误
                                • 非常感谢朋友!
                                • 释放密钥哈希对我不起作用,但调试密钥哈希工作正常
                                • 您能否告诉我关于 keyhashes 的概念,它实际上是什么以及这些生成的标准是什么?
                                【解决方案29】:

                                使用 .android 文件夹中包含 android 的 debug.keystore 的 Debug 密钥存储会产生一个奇怪的问题;使用 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 站点中注册),而不是使用命令行生成哈希值在某些情况下,命令行可能会输出错误的密钥哈希:

                                    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();
                                        }
                                    }
                                

                                【讨论】:

                                • showHashKey 函数就像获取密钥的魅力一样,tnx
                                【解决方案30】:

                                我已经有这个问题两个月了。我的密钥哈希值一直高达 9。 今天我终于找到了简单的解决方案:

                                第 1 步:

                                在手机上安装从 facebook 开发者页面下载的 facebook sdk。不要安装普通的 facebook 应用程序。确保您可以登录 facebook。然后退出。

                                第 2 步:

                                使用您的最终发布密钥将您的应用导出为 apk,就像您将其上传到 Playstore 时一样。

                                第 3 步:

                                通过 USB 数据线或 USB 棒将 Apk 文件放在手机上。

                                第 4 步:

                                使用文件管理器安装您的应用程序:例如 https://play.google.com/store/apps/details?id=com.rhmsoft.fm

                                第 5 步:

                                启动您的应用并尝试使用 facebook 登录。 将打开一个对话框并告诉您:“在 facebook 开发人员控制台中找不到密钥

                                第 6 步:

                                写下钥匙。

                                第 7 步:

                                将其放入您的 facebook 开发者控制台并保存。 现在你完成了。 任何下载您的应用程序并使用之前使用的密钥库发布的人都可以登录 facebook。

                                享受

                                【讨论】:

                                • 我正在放弃您的提示,将 facebook-universalsignin.apk 粘贴到移动设备并安装它。然后我的应用程序安装并在这种情况下运行,facebook 弹出窗口也打开登录没有其他对话框出现请帮助我
                                • 您是否从开发者页面安装了 facebook sdk 并从 playstore 卸载了普通的 facebook 应用程序?
                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2022-10-14
                                • 2014-08-10
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多