Facebook密钥哈希与任何存储的密钥哈希都不匹配


73

我真的在使用Facebook哈希键遇到麻烦。我在Eclipse中生成了它。

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

最后,我将哈希密钥设置为Facebook开发人员的设置:

但是我仍然没有得到相同的错误日志:“密钥哈希B5dWUEYfZJL / ........... jyA =与任何存储的密钥哈希都不匹配”

有人知道我做错了什么或如何解决这个问题?如果我在自己的应用程序中使用HelloFacebookSample的ID和名称,则一切正常。因此,它与我最有可能设置的键哈希,ID或名称有关。

谢谢你,恩特


1
显示关键哈希设置的屏幕截图位置不正确。“示例应用程序设置”仅适用于SDK附带的示例应用程序的关键哈希值(因此您可以在本地构建它们)。您应该在应用程序设置的“ Android”标签下放置密钥哈希。
Ming Li

是的,我知道您的意思,那是我最初的错。然后,我将其移至“ Android”选项卡,但这都不成功。我必须手动删除我的哈希密钥并生成一个新的哈希密钥,然后所有密钥才能开始工作。
Yenthe 2013年

从developers.facebook.com删除您的应用程序,并尝试这个stackoverflow.com/questions/4388992/...
辛格帕尔

Answers:


78

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

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

2)记下该哈希键。

3)将其放入您的Facebook开发者控制台中,在此您首先生成api密钥,并使用new和save删除哈希密钥。现在您完成了。下载了使用较早使用的密钥库发布的应用程序的任何人都可以登录Facebook。


谢谢。像魅力一样工作。
Rajan Maurya

不,对我没用。在没有facebook应用程序的情况下,它仍然可以正常工作,但是如果安装了fb应用程序,则会给我同样的错误
Ahsan

非常感谢队友!
阿桑(Ahsan)

发行密钥哈希对我不起作用,但是调试密钥哈希可以正常工作
Konstantin Konopko,

您能告诉我有关密钥哈希的概念吗,它实际上是什么,以及根据什么标准生成的?
B.shruti

44

经过数小时的尝试,我终于找到了解决方案。

  1. 删除Facebook网站(developers.facebook.com)上的任何应用
  2. 删除下面的文件debug.keystore C:\Users\yourUserName\.android
  3. 生成新密钥(通过再次运行您的应用程序)
  4. 在developers.facebook.com上创建一个新应用,并添加新的哈希键
  5. 重新运行您的应用
  6. 成功!

谢谢!这确实有效,但是如果我在Facebook的Developers网站上注册了几个应用程序,并且这个问题不时地反复出现怎么办?

@Yulian我不确定,这听起来像是一个非常烦人的问题。.我不确定,因为我在Developers网站上只有一个应用程序。抱歉!
Yenthe 2015年

86
现在,如果我们已经有成千上万的用户,该怎么办,仅仅重新创建应用程序并不是一个好主意。
业余爱好者

6
删除的应用程序是不是一种选择,这个问题解决了github.com/AntonioCuevaUrraco/nativescript-facebook-login/...
穆斯塔法Magdy

1
再生debug.keystore可以使问题复杂化,如果你是使用火力与谷歌登录在它将作为一个新的SHA-1键不再工作将产生,你会在你的火力应用页面进行更新
Kewal沙阿

35

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

错误消息如下所示:

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面板中的键哈希。


2
这是最好的答案。
abelabbesnabi

它是一个完美的答案
Sushin Pv

并且,当询问您从未设置的调试密钥密码时,请键入android并稍后再感谢我:)
touhid udoy

4
异常不会再返回键哈希
塔米姆Attafi

即使这对我也不起作用,我卸载了Facebook应用,并按另一个答案中的方式进行了工作
jayasurya_j

34

在开发过程中,我遇到了相同的问题,需要获取哈希键来测试在Facebook上的共享,在解决此问题时,我经历了几个问题

1- Facebook提供的通过使用openSSL命令获取哈希密钥的命令没有给我正确的哈希,该哈希是我从带有代码的Package info中提取签名所获得的。通过第二种方式获取哈希是正确的。

2-由于某种原因,在文档中,他们告诉您进入开发人员设置并在其中添加“示例应用程序”的哈希键,我以为开发人员的每个哈希键都应该存在,那是我的错误,每个应用程序都有它要添加的自己的哈希键字段,请转到您的app / settings / android。

在此处输入图片说明

好吧..对于我在Windows 7 x64位上使用openssl-0.9.8k_X64的记录,它只是生成了错误的哈希,我不知道为什么

我使用以下代码获取哈希值:

private void printKeyHash() {
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo("YOUR PACKAGE NAME", 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) {
        Log.e("KeyHash:", e.toString());
    } catch (NoSuchAlgorithmException e) {
        Log.e("KeyHash:", e.toString());
    }
}

但请注意,在调试时,至少在我的设备和机器上,这也可能无法在日志中打印出正确的哈希值,在手表中,它在打印日志之前就显示了正确的哈希值,但是在日志中却显示了另一个哈希值,并且第一个是正确的。

无论如何,您也可以使用命令或日食查看密钥的SHA十六进制序列并将其在线转换为以64为基数,有些网站可能会有所帮助 http://tomeko.net/online_tools/hex_to_base64.php?lang=en

祝好运


这个为我做到了!谢谢哥们!我将该代码添加到我的mainactivity的oncreate函数中,并在logcat控制台中检查了结果,并通过“ KeyHash”过滤,并将该密钥粘贴到了我的应用程序仪表板中,它运行良好!
佛高

我将我的应用程序发送给了一位朋友,而他也遇到了同样的问题……这对我来说很麻烦,但他无法登录!这是为什么?
佛高

32

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

运行后 在https://developers.facebook.com/quickstarts中

OSX / Linux:

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

视窗:

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

Enter keystore password:系统提示您输入错误密码时,默认密码为“ android ”。键入任何其他密码将为您提供不同/错误的哈希键。将正确的哈希键粘贴到Key Hashes您的应用页面上的字段中

这解决了我的问题,希望这对谁犯了我犯的这个错误有帮助


可以更改默认密码吗?如果是,如何\在哪里?
Coder123

@ Coder123只是debugAlt.jks使用不同的密码和密钥在另一个目录中创建自己的目录,并将其放在您的目录中signingConfigs { debug { storeFile file(new File('../debugKey.jks')) storePassword "Qwerty123" keyAlias "debug" keyPassword "Qwerty123" } }
Variag

您的意思是我们应该强制使用“ android”作为密码?它写在哪里?
user1090751

@ user1090751单击我的答案中的“ android”链接以获取更多详细信息。您可以创建您自己的密码,如先前评论中所述
Kewal Shah

谢谢您的密码!那为我解决了!
ljubiccica

24

每当我知道它仍然有效时,我都会对其进行更新

日期:06/01/2021 (2021年1月6日)

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

  1. 我有SHA1 signingReport

(在gradle中找到-> 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. 在“设置”选项卡中选择您的项目,“基本/密钥哈希”将添加生成的密钥。

  3. 不要忘记保存更改。


1
经过18个小时的工作,此问题得以解决。
Grant Singleton

希望它对您有所帮助
Moustafa EL-Saghier

17

仅在FB上创建应用程序时,从Eclipse / keytool中添加SHA1键对我有帮助,然后在重建之后,我总是会收到OP错误。

解决我问题的方法是将错误消息中的密钥添加到Facebook仪表板设置中。


3
对于调试键,但是如何从apk安装的应用程序中了解错误消息?
kostyabakay

15

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

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

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


谢谢,这解决了我的问题。为什么keytool版本无法正常工作很有趣
Nijat Aliyev

9

请按照以下步骤以生成正确的密钥哈希。

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

1
不错的简单解决方案,只需确保您从正确的Variant中复制了sha1,就我而言,它是发布的。
弗朗西斯·马洛赫

9

在生成发布哈希密钥时,请注意此

对于Windows

在生成用于生产的哈希密钥时,需要在Windows上使用openssl-0.9.8e_X64.zip,而不能使用openssl-0.9.8k_X64.zip

这些版本会产生不同的哈希键,由于某些原因9.8k无法正常工作,而9.8e则可以。

要么

在下面的流程中使用

这是我解决此问题的方法,在我的情况下,将APK下载到Java jdk \ bin文件夹中的PC中:C:\ Program Files \ Java \ jdk1.7.0_121 \ bin转到Java jdk \ bin文件夹并运行cmd,然后复制以下内容在您的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键
点击转换按钮
获取发行Keyhash产值


1
这解决了我的问题keytool -list -printcert -jarfile yourapkname.apk:)


7

我已经有两个月了。我的主要哈希值一直达到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上并进行了移动。然后在这种情况下安装并运行了我的应用程序,也打开了popup进行登录,没有其他对话框出现,请帮助我
Harsha

您是否在开发者页面上安装了Facebook SDK,并从Playstore卸载了普通Facebook应用程序?
萨克拉曼多

6

看起来很疯狂,但是有效

确实有问题,因为您的私人Facebook帐户拥有此应用程序,并且该帐户的哈希密钥不具有可比性

但是您不希望真正的用户遇到这个错误。但是我不确定

最终执行下一步:

  1. 转到您尝试登录的私人Facebook帐户
  2. 然后在应用程序目录中单击“更多”

在此处输入图片说明

  1. 点击设置

在此处输入图片说明

然后点击交叉

在此处输入图片说明

现在,您可以使用Facebook登录。但是下次如果您注销,然后尝试再次登录,您将面临相同的问题...

这也很奇怪...

但是我不相信Facebook不知道这一点...



4

我发现我用来对要上传到Google Playstore的应用程序进行签名的SHA-1不正确。我意识到我的应用已由Google Play商店使用其他令牌签名。我遵循以下步骤:

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

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


3

使用包含在.android文件夹中的android的debug.keystore在内的Debug密钥存储区会产生一个奇怪的问题;首次在Android应用程序上使用Facebook登录按钮进行登录会非常理想。但是,无论何时我注销并尝试登录,它都会抛出一条错误消息:该应用未配置任何Android密钥哈希。请转到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
dianakarenms

3

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

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

3

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

无法正常使用:Facebook App已安装在设备中。

工作:未安装Facebook应用

因此,以下代码已解决,该问题在设备上安装了Facebook应用程序时发生。

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

1

我有类似的问题。在将我的应用签名并发布到Google PlayStore后,哈希值似乎已经改变。我在Facebook上添加了新的哈希(如前所述),并通过developer.facebook.com/app//settings发送给我的应用中的“哈希”。现在它又可以工作了。



1

我的问题可能是由于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个小时的时间。
touhid udoy

0

@Ketan Ramani答案对我有所帮助,但就我而言,我没有使用LoginManager,而是在任何图像上使用registerCallback通过在下面的代码中使用登录按钮来在图像上注册回调

 loginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);

0

我尝试了此页面上的所有内容,但没有成功,直到休息片刻,然后当我继续进行此操作而未进行任何更改时,它突然起作用了。也许(也许)facebook需要时间来注册密钥


0

这是macO的不错的解决方案,它对我有用:

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

此处的密钥存储区密码应为android。谢谢


0

在Android Studio的右侧,转到Gradle -> Tasks -> android -> signingReport并运行它。复制SHA-1密钥,并使用this将其转换为base64 ,然后在Facebook Developer Console中将转换后的base64哈希添加到您的应用中。如果要使用发行版哈希,请在命令行中运行:keytool -exportcert -alias YOUR_KEYSTORE_ALIAS -keystore YOUR_KEYSTORE | openssl sha1 -binary | openssl base64 whereYOUR_KEYSTORE是您用于发行版本的.keystore或的路径,并且是创建密钥库时提供的别名。如果您不记得别名,则可以运行并查看有关密钥库的所有信息.jkssigninConfigYOUR_KEYSTORE_ALIASkeytool -v -list -keystore YOUR_KEYSTORE


0

调试时

复制此代码到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部分,然后粘贴密钥哈希并保存


0

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


-2

检查您的google-services.json。可能是不同的。下载您最新的google-services.json,然后运行该应用。希望能帮助到你。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.