安卓Facebook SDK 3.0在登录时出现“remote_app_id does not match stored id”的错误提示。

43

我正在尝试构建一个使用Facebook SDK for Android 3.0的应用程序。但当我尝试调用

Session.openActiveSession

它只是简单地给了我一个关闭登录失败状态的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 
我在 StackOverflow 上搜索了“remote_app_id”,结果显示它在 iOS 中是指“Bundle ID”,但我不知道在 Android 中“remote_app_id”是什么意思。我已经在我的 Facebook 应用程序设置中设置了软件包名称和活动名称,但我不知道错误的原因。

请MonkeyFish解释背后的实际原因是Openssl,请下载正确的版本,以便正确生成哈希键。 - Muhammad Babar
注意2014年的问题——如果用户未安装fb应用,则此问题将起作用。 请注意,有时解决方案非常简单;您可能忘记在developers.facebook网站上放置正确的值。来自FB的Brian在这里友好地解释(请注意他的图片)http://answers.unity3d.com/questions/543540/facebook-sdk-v424-android-login-not-working.html 希望这可以帮助某人,如果你被卡住了,这真是一个糟糕的问题。 - Fattie
6个回答

77

另一个可能出现的错误(我曾经遇到)是:在Facebook应用程序控制台设置“密钥哈希”,并使用另一个密钥库签署Android应用程序。

不幸的是,这是由于Facebook入门教程引起的。它说Android开发人员应该在示例中使用默认的Android调试密钥,并且没有解释Key Hash应该使用相同的密钥库生成你将要签署应用程序。

我的建议是在您的Facebook控制台上设置两个Key Hashes:

  1. 默认的Android调试密钥:

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

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

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

记住:您不能发布使用SDK工具生成的调试密钥签署的应用程序。因此,仅使用第一个先前命令生成的哈希键发布应用程序是不可能的(正如Facebook教程所建议的那样)。

有关签署应用程序的更多信息,请访问签署应用程序


3
正如JPMagalhaes所说,问题肯定出在这里,你需要获取调试和发布两个密钥并将它们提交到Facebook Developers网站上。之后,你的调试和发布版APK将可以正常工作。不要忘记放入正确的别名! :) - xarlymg89
2
我的问题与之前的一样,但原因不同:我从另一个开发者那里检出了现有代码;在进行FB登录时,我遇到了上述错误;解决方法是:确保为每台开发机器添加一个调试密钥哈希到您的开发人员控制台(来自FB开发人员教程:“请注意,如果您使用多台机器进行开发,则可以在此处添加多个密钥哈希。”) - vaiomike
3
非常感谢您,JPMagalhaes,Facebook教程可耻。 - Faisal
@JPMagalhaes 发布.keystore的路径是什么? - itamar
在你创建它的时候,应该知道它在哪里。你已经创建了吗?通常我会将它保存在我的项目内,这样就可以在我所有的电脑上同步了。 - JPMagalhaes
生成发布密钥时,您将使用以下命令: keytool -genkey -v -keystore [release].keystore -alias [yourappreleasekeyalias] -keyalg RSA -keysize 2048 -validity 10000 在此命令中,您必须定义密钥的名称和别名。在给定的命令中使用您在此处定义的别名。 有关签署应用程序的更多信息,请访问http://developer.android.com/tools/publishing/app-signing.html。 - JPMagalhaes

34

我解决了这个问题。问题是,我使用 "keytool" 生成的 "Key Hash" 错误了。当 "keytool"提示输入密码时,您必须使用 "android"(不带引号)作为密码。我之前一直在使用自己的密码。当我更改密码后,问题就解决了。希望这可以帮到你。


7
大家也应该查看@JPMagalhaes的答案。他说得很准确,Facebook忘了提到你需要在你签署应用程序的生产密钥库上获取 Key Hash。 - KevinM
你的意思是在输入密码时应该简单地使用“android”吗?我已经使用了我的密钥库密码,也就是我的自己的密码。那么我还需要创建新的哈希密钥吗? - Chintan Khetiya
除了用于调试的哈希密钥之外,您还需要为发布添加另一个哈希密钥。我总是使用keytool生成错误的密钥,无论输入密钥库的密码还是“android”。最后,我不得不插入来自MonkeyFish的代码片段才能获得可用的密钥。太奇怪了。 - Robert

5

4

我曾经遇到了同样的问题,后来发现openssl创建的sha1不正确。 重新下载了一个新的openssl,问题得到了解决。


我使用上面的打印解决方案发现加密是错误的。 - TacoEater
非常感谢,我希望我能在这个问题上给你+1000分,不知道为什么这个答案没有被选为正确的答案...... OpenSSL 真是一个大痛点... Facebook 应该在 SDK 教程网站上提供 OpenSSL 的链接。 - Muhammad Babar

0
此外,请确保您在 Facebook 开发门户网站的正确位置输入哈希值。编辑应用程序设置并选择本机 Android 应用程序。
我错误地将哈希值放在“示例应用程序设置”中。

0

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

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

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

3)您将打印出一个新的键,它将与x9SLcMXBlgly1f36PJuuc4a3YAc匹配,您获得的键现在在最后有一个=符号。

4)在Facebook开发者网站上注册此键

替代技巧

您可以做另一件事情,只需将此键注册到Facebook开发人员网站x9SLcMXBlgly1f36PJuuc4a3YAc=即可

只需向Facebook应用程序显示的键添加=即可。

完成了!希望这能起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接