43

我正在尝试构建一个使用 Facebook SDK for Android 3.0 的应用程序。但是当我试图打电话时

Session.openActiveSession

它只是简单地给我一个带有 CLOSED_LOGIN_FAILED 的 SessionState,而 LogCat 是:

12-16 00:03:40.510: W/fb4a:fb:OrcaServiceQueue(4105): com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id 

我用“remote_app_id”搜索了 StackOverflow,结果是 iOS 中的“Bundle ID”,但我不知道“remote_app_id”在 Android 中是什么意思。我已经在我的 Facebook 应用设置中设置了包名称和活动名称。我不知道错误的原因。

4

7 回答 7

77

另一个可能的错误(发生在我身上)是:在 Facebook 应用程序控制台设置“密钥哈希”并使用另一个密钥库签署 android 应用程序。

不幸的是,这是因为Facebook 入门教程引发了这个错误。它说 android 开发人员应该在您的示例中使用默认的 android 调试密钥,并且没有说明应该使用您将签署应用程序的相同密钥库生成密钥哈希。

我的建议是在你的 facebook 控制台设置两个 Key Hashes:

  1. 默认安卓调试键:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -二进制 | openssl base64

  1. 您的应用程序发布密钥:

keytool -exportcert -alias yourappreleasekeyalias -keystore ~/.your/path/release.keystore | openssl sha1 -二进制 | openssl base64

请记住:您不能发布使用 SDK 工具生成的调试密钥签名的应用程序。因此,不可能仅使用使用前一个命令行生成的哈希键来发布应用程序(如 facebook 教程所建议的那样。

有关签署您的申请的更多信息,请访问签署您的申请

于 2012-12-26T14:34:58.730 回答
61

另一种选择是打印发送到 Facebook 的密钥哈希并使用该值。

onCreate()对主要活动中的方法进行以下更改:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
          "com.facebook.samples.loginhowto", 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) {
} catch (NoSuchAlgorithmException e) {
}

替换com.facebook.samples.loginhowtoyour own package name

这对我有用!

于 2013-01-20T02:53:25.733 回答
34

我解决了这个问题。问题是,我使用“keytool”生成的“Key Hash”是错误的。当“keytool”提示输入密码时,您必须使用“android”(不带引号)。我使用的是自己的密码。当我更改密码时,问题就消失了。希望这可以帮助。

于 2012-12-16T01:50:25.847 回答
5

我被错误的 openssl 困住了,它生成了错误的哈希键。我使用来自http://gnuwin32.sourceforge.net/packages/openssl.htm的openssl解决了这个问题。

于 2013-04-17T12:17:33.740 回答
4

我遇到了同样的问题,发现 openssl 创建了错误的 sha1。下载了一个新的,它就像一个魅力。

于 2013-02-16T02:53:37.143 回答
0

您正在使用调试密钥获取哈希密钥...如果您没有签署包并在调试模式下运行应用程序,这可能会起作用。你需要做的是:

1) 转到清单文件并添加到应用程序 android:debuggable="true"。

2) 现在运行您的应用程序并监控 logcat。

3) 您将打印出一个新密钥,该密钥将与 x9SLcMXBlgly1f36PJuuc4a3YAc 匹配,您拥有的密钥现在最后有一个 = 符号。

4) 在 facbook 开发者网站上注册此密钥

备用技巧

您可以做另一件事只需将此密钥注册到 facebook 开发人员站点 x9SLcMXBlgly1f36PJuuc4a3YAc=

只需将 = 添加到 facebook 应用程序显示的键即可。

你完成了!希望这会奏效。

于 2014-07-30T11:22:53.623 回答
0

此外,请确保您在 facebook 开发门户中的正确位置输入哈希。编辑应用程序设置并选择 Native Android App。

我错误地将哈希放在“示例应用程序设置”中。

于 2013-04-21T22:54:40.543 回答