32

我在 Play Store 上有一个生产应用程序,它使用 Facebook SDK 登录。当我从 Eclipse 调试应用程序时没有问题,但是当它投入生产时,在 Facebook 向我询问权限后,它给了我以下错误。我在 developer.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 生成的 key hash 不同。无论如何,我在 Facebook 上添加了 Key Hash,但它仍然无法正常工作。

4

14 回答 14

29

当我运行我的应用程序时,我用它来显示密钥。就我而言,我从 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

于 2013-10-21T02:38:19.287 回答
29

Facebook 一些如何用 _ 替换 +,- 和 /

因此,只需尝试将 _ 替换为 +、- 和 / 并添加该哈希键。

希望它应该工作。

于 2013-10-21T16:01:28.717 回答
10

我刚刚发现了 Sample App key entry 页面的一个 bug:如果你从 app 中粘贴一个 hash key 而没有按 Enter,然后单击“Save Changes”按钮,新输入的代码会消失,但页面会显示“Saved !” 响应消息。这不是真的:它没有保存。粘贴哈希键后,您必须按 Enter 键,然后点击“保存更改”。

我保存了一个包含尾随 = 字符的键。那行得通。

于 2014-02-12T02:51:30.300 回答
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 应用程序的内容。

于 2018-06-09T13:29:51.020 回答
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 开发人员上,您的应用程序的密钥哈希。

希望这有帮助。

于 2014-03-15T02:09:18.497 回答
7

好吧,如果您使用 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

这就是解决方案。

于 2015-05-12T09:41:11.630 回答
5

这是一个很好的问题。有两种方法可以解决。我们通常发生的事情是在集成 Facebook SDK for android 时,我们继续按照facebook 开发者网站的说明进行操作。

但是一旦应用程序在 Play-store 中出现,我们往往会忘记一个仍在等待处理的程序。我们以同样的错误结束:

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.

只是有一个清单:

1)使用调试密钥,同时开发应用程序

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

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

它的密码是android,你会得到它后面的调试密钥。

在此处输入图像描述

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

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

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

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

在此处输入图像描述

于 2014-05-13T10:12:26.690 回答
3

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

  1. 复制密钥哈希与 Facebook 在异常中给出的相同,
  2. 替换"_"为并在末尾"/"添加一个,"="
  3. 将其添加到 Facebook
  4. 还要再次检查包名称和活动名称。这对我有用!
于 2014-04-19T10:12:25.283 回答
1

那么实际上最好和最简单的方法就是这样。如果您在手机屏幕上看到该问题。你应该看到 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 下载的原始哈希键不同。

于 2018-01-26T12:35:20.010 回答
0

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

100% 肯定会奏效。

-苏尼尔

于 2017-02-01T10:08:47.477 回答
0

对于已发布的版本,使用此行生成哈希键:

keytool -exportcert -alias foodtimeph -keystore /Users/eliedanhash/Downloads/ph/foodtimeph.keystore.jks | openssl sha1 -binary | openssl base64
于 2020-10-21T17:14:16.790 回答
0

如果您在 google 应用商店中有您的应用,只需转到 => => 并复制您的 SHA-1 密钥。然后访问该网站并在顶部文本栏链接中复制您的 SHA-1 密钥

将密钥哈希(输出 base64)复制到您的 facebook 密钥哈希字段。现在一切都应该正常了。:D

于 2020-11-02T22:33:34.280 回答
0
import android.content.pm.PackageManager
import android.util.Base64
import android.util.Log
import java.security.MessageDigest
import java.security.NoSuchAlgorithmException       


  try {
        val info = packageManager.getPackageInfo("your package 
    name", 
           PackageManager.GET_SIGNATURES)
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.e("KeyHash:", Base64.encodeToString(md.digest(), 
                       Base64.DEFAULT))
        }
    } catch (e: PackageManager.NameNotFoundException) {
        Log.e("","")
    } catch (e: NoSuchAlgorithmException) {
        Log.e("","")

    }

我搜索了很多不起作用,最后我找到了这个,kotlin 版 Facebook 登录问题

于 2021-10-05T07:22:54.503 回答
-1

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

于 2016-12-16T06:33:47.773 回答