Android应用密钥哈希与任何存储的密钥哈希都不匹配

时间:2013-10-21 01:39:55

标签: android facebook-android-sdk

我在Play商店有一个生产应用程序,它使用Facebook SDK登录。 当我从Eclipse调试应用程序时没有问题,但是当它正在生产时它会在Facebook询问我权限后给出以下错误。 我在developers.facebook.com的应用页面上添加了使用此命令使用keytool生成的密钥哈希:

  

keytool -exportcert -alias diego -keystore   “C:\ Users \ Diego \ Desktop \ CeluChat.KeyStore”|   “C:\ openssl \ bin \ openssl.exe”sha1 -binary |   “C:\ openssl \ bin \ openssl.exe”base64

CeluChat.KeyStore是我在导出已签名的应用程序时使用的密钥库,当keytool向我提供密码时,我在导出时输入了相同的内容。

但是我生产的错误(从Play商店下载)是:

  

10-20 22:21:10.752:W / fb4a(:):BlueServiceQueue(5872):   com.facebook.http.protocol.ApiException:密钥哈希   VQ3XhZb5_tBH9oGe2WW32DDdNS0与任何存储的键哈希值都不匹配。

异常上的Key Hash与使用keytool生成的密钥哈希不同。无论如何,我在Facebook上添加了Key Hash,但它仍无效。

13 个答案:

答案 0 :(得分:30)

Facebook有些人如何替换+, - 和/和_

所以只需尝试用+, - 和/替换_并添加该哈希键。

希望它能够奏效。

答案 1 :(得分:26)

我在运行应用程序时用它来显示密钥。就我而言,我从keytool命令获取了错误的密钥哈希。请注意,如果您输入了错误的密码(故意),而不是收到错误,则会生成错误的密钥。使用此方法获取正确的哈希值,看它是否与错误日志中的哈希值匹配

try {
        PackageInfo info =     getPackageManager().getPackageInfo("com.package.mypackage",     PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
            Log.e("MY KEY HASH:", sign);
            Toast.makeText(getApplicationContext(),sign,     Toast.LENGTH_LONG).show();
        }
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}

另外,如果由于某种原因上述方法不起作用。尝试使用此APK生成正确的密钥哈希。请记住,您必须使用您要检索的任何证书(调试或发布)对其进行签名。将其安装在您的测试设备上,然后运行它。

http://www.easyfacebookandroidsdk.com/download/keyhash.zip

答案 2 :(得分:9)

我刚刚发现了Sample App键入口页面的错误:如果您从应用程序粘贴一个哈希键而没有按Enter键,然后单击“保存更改”按钮,新输入的代码将消失,但页面将显示一个“保存!”回复消息。事实并非如此:它没有保存。粘贴哈希键后必须按Enter键,然后点击“保存更改”。

我保存了一个包含尾随=字符的密钥。这很有用。

答案 3 :(得分:7)

简单地把返回的错误消息哈希键:

10-20 22:21:10.752: W/fb4a(:):BlueServiceQueue(5872): com.facebook.http.protocol.ApiException: Key hash VQ3XhZb5_tBH9oGe2WW32DDdNS0 does not match any stored key hashes.

VQ3XhZb5_tBH9oGe2WW32DDdNS0

在Facebook开发者的应用程序的关键哈希值。

希望得到这个帮助。

答案 4 :(得分:6)

好吧,如果您使用Windows,请在cmd中使用此命令。

转到C:\ Program Files \ Java \ jdk1.8.0_25 \ bin

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | "C:\openssl\bin\openssl.exe" sha1 -binary | "C:\openssl\bin\openssl.exe" base64

生成哈希键时,需要在Windows上使用openssl-0.9.8e_X64.zip,不能使用openssl-0.9.8k_X64.zip

这是解决方案。

答案 5 :(得分:5)

这是一个很好的问题。有两种方法可以解决这个问题。我们经常发生的事情是在整合Facebook SDK for android时,我们继续按照the Developer site of facebook的说明进行操作。

但是一旦应用程序出现在游戏商店中,我们往往会忘记一个仍在等待的程序。我们以同样的错误结束:

05-13 14:45:43.882: W/fb4a(:<default>):BlueServiceQueue(25454): Exception during service
05-13 14:45:43.882: W/fb4a(:<default>):BlueServiceQueue(25454): com.facebook.http.protocol.ApiException: Key hash XXXXXXXXXXXXXX does not match any stored key hashes.

Jus得到了一份清单:

1)在开发App时使用调试键

Facebook开发者网站对此非常有帮助。只需将他们在the Getting started page中拥有的代码粘贴到命令提示符中即可。即:

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

它的密码是android,你将获得它后面的调试密钥。

enter image description here

2)签署应用程序后生成调试密钥

应用程序准备好上传到Google Play商店后,我们需要使用密钥对其进行签名,密钥的值是从密钥库生成的。 Satheesh in his answer解释了这一点。使用:

keytool -exportcert -alias <Alias Name here> -keystore <Path to keystore> | openssl sha1 -binary | openssl base64

它为您提供了与调试密钥不同的密钥。

enter image description here

答案 6 :(得分:3)

尝试了以上所有后我尝试了这个..并且工作了!!!

  1. 复制密钥哈希与Facebook提供的异常相同,
  2. "_"替换为"/"并在最后添加"="
  3. 将其添加到Facebook
  4. 再次检查包名称和活动名称。 这对我有用!!。

答案 7 :(得分:2)

请按照以下方法生成哈希密钥,这是@lucianbase在此页https://github.com/AntonioCuevaUrraco/nativescript-facebook-login/issues/14

建议的

使用android studio或cmd工具生成应用的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。 这就是Facebook的要求 获取生成的哈希“******************** =”并将密钥哈希复制到Facebook应用程序。

答案 8 :(得分:0)

只需替换https://developers.facebook.com/app应用程序中的错误密钥哈希......!

100%它肯定会起作用。

-Sunil

答案 9 :(得分:0)

实际上,最好和最简单的方法就是这样。如果您在手机屏幕上看到该问题。你应该看到android studio LOGCAT的问题。它会喜欢这个

01-26 14:58:22.885 14851-19534/? W/fb4a.BlueServiceQueue: Exception during service
                                                          X.1xO: [code] 404 [message]: Key hash 961x8mIbWmA7TRRpbk...= does not match any stored key hashes. (404) [extra]: null
                                                              at X.0fG.D(:240135)
                                                              at X.0k8.F(:255078)
                                                              at X.3gX.EUB(:738232)
                                                              at X.0fo.handleResponse(:242693)
                                                              at X.0k5.run(:254998)
                                                              at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
                                                              at X.0NH.run(:187661)
                                                              at X.0JQ.run(:49671)
                                                              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                              at X.0NM.run(:187873)
                                                              at java.lang.Thread.run(Thread.java:761)

从logcat复制这个哈希密钥,这是我把它私有化(...)并粘贴到你的Facebook开发者页面。它会立即解决您的问题。另外,请确保您发布的APK的哈希密钥与从Google Play下载的原始哈希密钥不同。

答案 10 :(得分:0)

对于发行版,请使用以下行生成哈希密钥:

import os
os.putenv('test','/usr/lib/jvm')
os.system('bash')

答案 11 :(得分:0)

如果您在Google App Store上拥有应用程序,只需转到=> =>并复制SHA-1密钥。然后访问此网站并在顶部文本栏中link

中输入SHA-1键

将密钥哈希(输出base64)复制到您的Facebook密钥哈希字段。一切都应该现在工作。 :D

答案 12 :(得分:-1)

启用单点登录 通过在下方将单点登录设置为是,为您的应用启用单点登录。请检查点号。 9 https://developers.facebook.com/docs/facebook-login/android