Android Facebook SDK 3.0在login时给出“remote_app_id与存储的ID不匹配”

我正在尝试构build一个使用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”search了StackOverflow,结果是iOS中的“Bundle ID”,但我不知道“remote_app_id”在Android中意味着什么。 我已经在我的Facebook应用程序设置中设置了包名和活动名称。 我不知道错误的原因。

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

不幸的是,这是由于Facebook入门教程导致这个错误。 它说,android开发者应该在你的例子中使用默认的androiddebugging密钥,并没有解释应该使用相同的keystore来生成密钥哈希,你将签署你的应用程序。

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

  1. 默认的androiddebugging密钥:

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工具生成的debugging密钥签名的应用程序。 所以不可能仅使用前面第一个命令行生成的散列键来发布应用程序(正如facebook教程所build议的那样。

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

另一个select是打印出发送到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.loginhowtoreplace为your own package name

这对我有用!

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

我已经被错误的openssl所困,产生了错误的哈希键。 我用http://gnuwin32.sourceforge.net/packages/openssl.htm openssl解决了这个问题。

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

此外,请确保您在facebook dev门户的正确位置input散列。 编辑应用程序设置并selectNative Android App。

我错误地把哈希在“示例应用程序设置”,而不是。

您正在使用debugging密钥获取散列键…如果您没有在debugging模式下签名包并运行应用程序,哪个可能工作。 你需要做的是:

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

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

3)你会得到一个新的键,这将是与x9SLcMXBlgly1f36PJuuc4a3YAc匹配的关键,你得到的关键是现在有最后一个=号。

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

替代伎俩

你可以做另一件事简单的注册这个键到Facebook开发者网站x9SLcMXBlgly1f36PJuuc4a3YAc =

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

你完成了! 希望这会工作。