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

时间:2013-11-30 13:51:57

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

我真的遇到了Facebook哈希密钥问题。 我在Eclipse中生成它..证明:

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

最后我将我的hashkey设置为Facebook开发人员的设置:

但是我没有做什么我会继续得到相同的错误日志: “密钥哈希B5dWUEYfZJL / ........... jyA =与任何存储的密钥哈希值不匹配”

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

谢谢你, Yenthe

31 个答案:

答案 0 :(得分:51)

如果您的登录在没有安装Facebook应用程序的情况下工作,并且由于错误而导致安装Facebook应用程序时无法正常工作"哈希密钥不匹配"然后执行以下步骤

1)启动您的应用并尝试使用Facebook登录。将打开一个对话框并告诉您:"在Facebook开发人员控制台中找不到密钥并显示散列密钥。

2)记下该哈希键。

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

答案 1 :(得分:43)

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

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

答案 2 :(得分:29)

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

错误消息如下所示:

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

答案 3 :(得分:23)

我在开发过程中遇到了同样的问题,并且需要在Facebook上测试共享的哈希键,并且在解决这个问题时我遇到了几个问题

1- facebook提供的命令通过使用openSSL命令来获取哈希键,并没有通过使用代码从包信息中提取签名来为我提供正确的哈希值。 通过第二种方式获取哈希是正确的。

2-出于某种原因,他们在文档中告诉您转到开发人员设置并添加“示例应用程序”的哈希密钥。在那里,我认为开发人员的每个哈希键都应该在那里,这就是我的错误,每个应用程序都有自己的哈希键字段来添加,转到你的app / settings / android。

enter image description here

那就是它..而且对于我在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());
    }
}

但要小心,这可能也不会在日志中打印正确的keyhash,至少在我的设备和机器上,当我调试它时,在手表中它在打印日志之前显示正确的哈希,但在日志中显示另一个哈希,第一个是正确的哈希。

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

祝你好运

答案 4 :(得分:16)

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

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

答案 5 :(得分:14)

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

运行后的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”。键入任何其他密码将为您提供不同/错误的哈希键。将正确的哈希键粘贴到app page

上的Key Hashes字段中

这解决了我的问题,希望这能帮助我做出这个特殊错误的人

答案 6 :(得分:7)

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

第1步:

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

第2步:

将您的最终发布密钥导出为apk,就像将其上传到Play商店一样。

第3步:

通过usb线或usb棒将Apk文件放在手机上。

第4步:

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

第5步:

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

第6步:

记下钥匙。

第7步:

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

享受

答案 7 :(得分:7)

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

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

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

答案 8 :(得分:6)

它看起来很疯狂但它有效

真的是因为你的私人facebook帐户得到了这个应用程序和这个帐户的哈希密钥不可比较

但是你不应该与真实用户面对这个错误。但我不确定

最后按照下一步操作:

  1. 转到您尝试登录的私人Facebook帐户
  2. 然后点击app dir中的更多
  3. enter image description here

    1. 点击设置
    2. enter image description here

      然后点击交叉

      enter image description here

      现在你可以用facebook登录了。但是下次如果你退出而不是尝试再次登录你就会面临同样的问题...

      这也很奇怪......

      但我不相信facebook不知道这个......

答案 9 :(得分:6)

这对我有用

  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 Developer仪表板设置中,然后重试。

your Google Play SHA-1

答案 10 :(得分:5)

  1. 检查您的密钥哈希值。
  2. 从手机上卸载Facebook应用程序。
  3. 然后再次尝试使用SDK。
  4. 这解决了我的问题。

答案 11 :(得分:3)

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

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

答案 12 :(得分:3)

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

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

答案 13 :(得分:3)

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

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

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

OR

使用以下流程

这是我解决此问题的方法,在我的情况下,将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。

答案 14 :(得分:1)

我遇到了类似的问题。签署并将我的应用发布到Google PlayStore后,哈希似乎已经改变了。 我在Facebook的消息中添加了新的Hash(如上所述),发送到我的应用程序中的关键哈希,在developers.facebook.com/app //settings上。现在再次运作。

答案 15 :(得分:1)

使用包含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();
        }
    }

答案 16 :(得分:0)

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

答案 17 :(得分:0)

什么对我有用:

答案 18 :(得分:0)

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

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

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

答案 19 :(得分: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 其中YOUR_KEYSTORE是您用作发布版本的.keystore的{​​{1}}或.jks的路径,而signinConfig是创建时给出的别名密钥库。如果您不记得别名,则可以运行YOUR_KEYSTORE_ALIAS并查看有关密钥库的所有信息

答案 20 :(得分: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部分,然后粘贴密钥哈希并保存

答案 21 :(得分:0)

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

答案 22 :(得分:0)

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

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

答案 23 :(得分:0)

@Ketan Ramani答案对我有所帮助,但就我而言,我没有使用LoginManager,而是在任何图像上使用 registerCallback 来创建回调按钮,而是在图像上注册了回调使用以下代码

 loginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);

答案 24 :(得分:0)

日期:2019年12月14日

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

  1. 我从signingReport获得了SHA1

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

将SHA1值复制到剪贴板

80:34:55:B3:3B:39:F0:C2:0D:3A:7F:C3:DE:1C:12:40:6B:A8:6E:FB

  1. Facebook sdk要求它必须使用base64哈希键,因此我们打开http://tomeko.net/online_tools/hex_to_base64.php

将您的SHA1值转换为base64。 这就是Facebook的要求 获取生成的哈希值“ ******************** =”

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

  2. 选择您的项目 在“设置”标签中,“基本/哈希”添加生成的密钥。

  3. 不要忘记保存更改。

答案 25 :(得分:0)

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

  

不起作用:设备中已安装Facebook App。

     

工作:未安装Facebook应用

因此,以下代码已解决,该问题是设备上安装了Facebook应用的事件。

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

答案 26 :(得分:0)

如果有人使用facebook android guide本身提供的方法面临类似问题,我的问题可能是由于openssl本身错误生成的哈希值。

一种解决方法是:

  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

答案 27 :(得分:0)

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

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

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

答案 28 :(得分:0)

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

答案 29 :(得分:0)

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

答案 30 :(得分:0)

“为您的应用启用单点登录”这就是它只能工作一次的原因。请转到developer.facebook并检查settings.it为我工作