我在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,但它仍无效。
答案 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生成正确的密钥哈希。请记住,您必须使用您要检索的任何证书(调试或发布)对其进行签名。将其安装在您的测试设备上,然后运行它。
答案 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,你将获得它后面的调试密钥。
2)签署应用程序后生成调试密钥
应用程序准备好上传到Google Play商店后,我们需要使用密钥对其进行签名,密钥的值是从密钥库生成的。 Satheesh in his answer解释了这一点。使用:
keytool -exportcert -alias <Alias Name here> -keystore <Path to keystore> | openssl sha1 -binary | openssl base64
它为您提供了与调试密钥不同的密钥。
答案 6 :(得分:3)
尝试了以上所有后我尝试了这个..并且工作了!!!
"_"
替换为"/"
并在最后添加"="
,答案 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)
答案 9 :(得分:0)
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