3

我正在使用 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 签名。

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

提前致谢 。

4

3 回答 3

17

使用这段代码,因为更可靠,我尝试了许多版本的 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

于 2013-03-19T11:32:17.863 回答
6

我也陷入了同样的问题,终于解决了,错误哈希键背后的主要原因是openssl,请从这里下载 openssl ,我认为 facebook 应该在他们的网站上提供 openssl 的下载链接,以便人们不会陷入这样的问题

于 2013-04-25T10:57:16.880 回答
0

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

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

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

于 2013-06-20T09:03:42.937 回答