【问题标题】:remote_app_id does not match stored id - exceptionremote_app_id 与存储的 id 不匹配 - 异常
【发布时间】:2013-02-07 22:18:57
【问题描述】:

我正在使用 facebook 本地登录,我得到了 CLOSED_LOGIN_FAILED 。

以下是我在DDMS中得到的LogCat,

    02-22 15:16:22.939: E/exception(4583):  is null
    02-22 15:16:22.939: E/session(4583):  is {Session state:OPENING, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:420081348034777}
    02-22 15:16:22.939: E/state(4583):  is OPENING
    02-22 15:16:51.749: E/exception(4583):  is com.facebook.FacebookOperationCanceledException: remote_app_id does not match stored id 
    02-22 15:16:51.749: E/session(4583):  is {Session state:CLOSED_LOGIN_FAILED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:420081348034777}
    02-22 15:16:51.749: E/state(4583):  is CLOSED_LOGIN_FAILED
    02-22 15:16:51.749: E/if logged in is(4583):  true : false
    02-22 15:16:51.749: E/if logged in is(4583):  exception : com.facebook.FacebookOperationCanceledException: remote_app_id does not match stored id 
    02-22 15:16:51.749: E/if logged in(4583):  premissions : []

我得到keyhash使用

C:\Program Files\Java\jre6\bin>keytool -exportcert -alias androiddebugkey -keystore "c:\documents and settings\Droid 4\.android\debug.keystore" | C:\openssl-0.9.8g_win32\bin\openssl sha1 -binary | C:\openssl-0.9.8g_win32\bin\openssl base64

"c:\documents and settings\Droid 4\.android\debug.keystore" 是我的密钥库路径 C:\openssl-0.9.8g_win32\bin\openssl 是我的 openssl 路径

这就是我如何通过 eclipse 和我创建的密钥库获取使用它的密钥,

C:\Program Files\Java\jre6\bin>keytool -exportcert -alias mykeystorename -keystore "D:\Apps\mykeystorepath" | C:\openssl-0.9.8g_win32\bin\openssl sha1 -binary | C:\openssl-0.9.8g_win32\bin\openssl base64

这是我用来获取我的 keyhash 的命令,使用我为发布创建的 kaystore 签名。

我不知道我哪里出错了,我已经尝试了所有相关的线程,但我没有成功。

提前致谢。

【问题讨论】:

    标签: android facebook


    【解决方案1】:

    使用这段代码,因为更可靠,我尝试了很多版本的openssl,但都没有成功。

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

    将其粘贴到 onCreate

    【讨论】:

    • 经过一天的绝望,甚至在我看到这个答案并决定放弃它之后,我惊讶地发现它确实有效!毫无疑问,openssl 有问题,或者是我(以及所有其他做过的人)没有得到 openssl 的用途。
    • 同样的事情发生在我身上。谢谢 bmKay!
    【解决方案2】:

    我也遇到了同样的问题,终于解决了,Hash Key错误的主要原因是openssl,请从这里下载openssl here,我认为 facebook 应该在他们的网站上提供 openssl 的下载链接,这样人们就不会陷入这样的问题

    【讨论】:

    • 谢谢这正是问题所在......我让 openssl 生成错误代码
    【解决方案3】:

    除了上述(正确)答案外, 我意识到,当您进行“发布”构建(EXPORT)而不是“调试”构建(例如 - 只是构建并通过 Eclipse 运行)时 - 构建过程使用不同的密钥存储。这意味着哈希码不同! 我一直在运行上面给我哈希密钥的代码,我能够连接和发布,但我的用户都没有(因为他们是从使用 RELEASE 密钥存储构建的 STORE 安装的!)

    所以。 幸运的是 Facebook 允许多个哈希。选择你最喜欢的方法(上面的代码或 SSL 命令行的东西),然后将两个密钥都放在你的 Facebook 管理员中为你的应用程序。

    检查点 - 确保您“安全” - 确保您在那里至少有 2 把钥匙,而不仅仅是一把。如果您有,则意味着您的“调试”版本将无法连接,或者您的“发布”版本将无法连接。

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      相关资源
      最近更新 更多