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

Die*_*ego 32 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,但它仍然无效.

Vee*_*eer 30

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

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

希望它应该工作.

  • 要查找所需的EXACT值,请运行此命令(它将需要密钥库密码):keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 (2认同)
  • 我的钥匙里没有这些符号,所以没有什么可以取而代之的.=最后,它与日志所说的完全相同,但没有任何效果 (2认同)

Jad*_*eld 27

当我运行我的应用程序时,我用它来显示密钥.就我而言,我从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) {
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我使用该代码并发现密钥哈希与facebook在异常上给出的相同,但将"_"替换为"/"并在末尾添加"=".谢谢 (4认同)

Ari*_*ski 9

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

我保存了一个包含尾随=字符的密钥.那很有效.


小智 8

请按照以下方法生成哈希键,这是@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 应用程序。


and*_*fra 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.
Run Code Online (Sandbox Code Playgroud)

VQ3XhZb5_tBH9oGe2WW32DDdNS0

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

希望这有帮助.


Hem*_*ori 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

这是解决方案.


Kai*_*las 5

这是一个很好的问题.有两种方法可以解决这个问题.我们经常发生的事情是在整合Facebook SDK for android时,我们继续按照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.
Run Code Online (Sandbox Code Playgroud)

Jus得到了一份清单:

1)在开发App时使用调试密钥

Facebook开发者网站对此非常有帮助.只需将他们在"入门"页面中的代码粘贴到命令提示符中即可.即:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

一旦应用程序准备好上传到Google Play商店,我们需要使用密钥对其进行签名,密钥的值是从密钥库生成的.Satheesh在他的回答中对此进行了解释.使用:

keytool -exportcert -alias <Alias Name here> -keystore <Path to keystore> | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

这为您提供了与调试密钥不同的密钥.

在此输入图像描述