Android Facebook SDK 3.0在登录时提供"remote_app_id与存储的ID不匹配"

Dav*_*ang 43 android facebook facebook-android-sdk

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

Session.openActiveSession
Run Code Online (Sandbox Code Playgroud)

它只是简单地给我一个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 
Run Code Online (Sandbox Code Playgroud)

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

JPM*_*aes 77

另一个可能的错误(发生在我身上)是:在Facebook App Console上设置"Key Hash",并使用另一个密钥库对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教程所示).

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

  • 肯定这就是问题所在,正如JPMagalhaes所说,你应该得到两个键(Debug和Release)并将它们发布到你的Facebook Developers网站上.之后,您的调试和发布APK将正常工作.别忘了把正确的别名!:) (3认同)
  • 非常感谢JPMagalhaes,以及Facebook教程的耻辱. (3认同)
  • 我的问题是一样的,原因是不同的:我检查了一个共同开发者的现有代码; 在FB登录时,我得到了上面的错误; 解决方案:确保将每个开发计算机的一个调试密钥哈希添加到开发人员控制台(来自FB开发人员教程:"请注意,如果您使用多台计算机进行开发,可以在此处添加多个密钥哈希.") (2认同)

Tac*_*ter 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) {
}
Run Code Online (Sandbox Code Playgroud)

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

这对我有用!

  • 这也是唯一对我有用的东西.奇怪的 :) (4认同)
  • 事情.1)这来自[https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/](official doc),所以它是有效的.2)放入应用程序设置的关键是你从这段代码中得到的那个,而不是你做的那个`keytool -list -v -keystore~/.android/debug.keystore ......` (3认同)
  • 轻微:你的try语句中有一个太多的结束括号 (3认同)

Dav*_*ang 34

我解决了这个问题.问题是,我使用"keytool"生成的"Key Hash"是错误的.当"keytool"提示输入密码时,你必须使用"android"(没有引号).我正在使用自己的密码.当我更改密码时,问题就消失了.希望这可以帮助.

  • 每个人都应该查看@JPMagalhaes的答案.关于facebook的问题,他忘记提到你需要在你签署应用程序的生产密钥库上获得Key Hash. (7认同)

小智 5

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