【问题标题】:Facebook sdk 3.0 androidFacebook sdk 3.0 安卓
【发布时间】:2012-12-03 12:42:37
【问题描述】:

我已经无数次浏览 developer.facebook.com 上的教程,了解基本的 hello world facebook app for android 以确保我没有犯错,但我收到错误“remote_app_id 与存储的 id 不匹配”,但它确实匹配并且不确定它为什么会抛出该错误。此外,当我运行示例时,我得到一个失败的活页夹事务。现在奇怪的是,如果我卸载手机上的 fb 应用程序并强制用户登录 facebook,那么基本的 hello world 应用程序就可以工作。我做错了什么还是这是一个 facebook sdk 问题。我已经下载并重新安装了所有内容,但仍然遇到同样的问题

【问题讨论】:

    标签: android facebook facebook-android-sdk


    【解决方案1】:

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

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

    我的建议是在您的 Facebook 控制台设置两个密钥哈希:

    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 教程所建议的那样。

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

    【讨论】:

      【解决方案2】:

      试试

      try {
      PackageInfo info = getPackageManager().getPackageInfo("com.eatapp", PackageManager.GET_SIGNATURES);
      for (Signature signature : info.signatures) {
          MessageDigest md = MessageDigest.getInstance("SHA");
          md.update(signature.toByteArray());
          Log.e("MY KEY HASH:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
      }
      } catch (NameNotFoundException e) {
      
      } catch (NoSuchAlgorithmException e) {
      
      }
      

      在您的主要活动中 :-) 这是适用于 Android SDK 3.0 的唯一解决方案

      【讨论】:

        【解决方案3】:

        已解决。

        哈希值错误。这似乎是一个窗口问题或人为失败。 我用过:

        "keytool.exe 的位置" -exportcert -alias alias -keystore "keystore 的位置" | “openssl.exe 的位置” sha1 -binary | “openssl.exe 的位置”ba​​se64

        并得到了错误的哈希值。反正找到了这篇文章

        http://p-xr.com/implementing-facebook-into-your-app-invalid-key-with-keytool/

        下载并运行密钥生成应用程序并从 logcat 中获取哈希值。 这对于调试密钥非常有用,但不确定何时将您的程序发布到野外

        希望对你有帮助

        【讨论】:

        • 如果使用sn-p改变Log.i("PXR", Base64.encodeToString(md.digest(), 0));
        猜你喜欢
        • 2012-10-15
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多