我正在尝试构建一个使用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应用设置中设置了包名和活动名称。我不知道错误的原因。
答案 0 :(得分:77)
另一个可能的错误(发生在我身上)是:在Facebook App Console设置“Key Hash”并使用另一个密钥库对Android应用程序进行签名。
不幸的是,这是因为Facebook Getting Started Tutorial导致此错误。它说Android开发人员应该在你的例子中使用默认的android调试密钥,并没有解释应该使用你将为你的应用程序签名的密钥库生成Key Hash。
我的推荐是在你的facebook控制台上设置两个Key Hashes:
keytool -exportcert -alias androiddebugkey -keystore~ / .android / debug.keystore | openssl sha1 -binary | openssl base64
keytool -exportcert -alias yourappreleasekeyalias -keystore~ / .your / path / release.keystore | openssl sha1 -binary | openssl base64
请记住:您无法发布使用SDK工具生成的调试密钥签名的应用程序。因此,不可能仅使用使用第一个上一个命令行生成的哈希键来发布应用程序(如Facebook教程所示。
有关签署申请的详细信息,请访问Signing Your Application。
答案 1 :(得分: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.loginhowto
替换为your own package name
。
这对我有用!
答案 2 :(得分:34)
我解决了这个问题。问题是,我使用“keytool”生成的“Key Hash”是错误的。当“keytool”提示输入密码时,你必须使用“android”(没有引号)。我正在使用自己的密码。当我更改密码时,问题就消失了。希望这会有所帮助。
答案 3 :(得分:5)
我被错误的openssl困住,生成错误的哈希键。我使用了来自http://gnuwin32.sourceforge.net/packages/openssl.htm的openssl解决了这个问题。
答案 4 :(得分:4)
我遇到了同样的问题,发现openssl正在创建错误的sha1。 下载了一个新的,它就像一个魅力。
答案 5 :(得分:0)
另外,请确保在facebook dev门户中的正确位置输入哈希值。编辑应用程序设置并选择Native Android App。
我错误地将哈希值放在“示例应用程序设置”中。
答案 6 :(得分:0)
您正在使用调试密钥获取哈希键...如果您未在调试模式下签署包并运行应用程序,则可能会有效。你需要做的是:
1)转到清单文件并添加到应用程序android:debuggable =" true"。
2)现在运行你的应用程序并监控logcat。
3)你会得到一个新的密钥,它是x9SLcMXBlgly1f36PJuuc4a3YAc的匹配密钥,你得到的密钥现在在最后一个有一个=符号。
4)在facbook开发者网站上注册此密钥
替代技巧
你可以做另外一件事只需将这个密钥注册到facebook开发者网站x9SLcMXBlgly1f36PJuuc4a3YAc =
只需将facebook添加到Facebook应用程序显示的键。
你结束了!!希望这会奏效。