remote_app_id与存储的id - 异常不匹配

时间:2013-02-22 10:18:19

标签: android facebook

我正在使用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是我的开放路径

这就是我通过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进行签名。

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

提前致谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

我也遇到了同样的问题并最终解决了问题,错误的 Hash Key 背后的主要原因是 openssl ,请从下载openssl here,我认为Facebook应该在他们的网站上提供openssl的下载链接,以便人们不会遇到像这样的问题

答案 2 :(得分:0)

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

SO。 幸运的是Facebook允许多个哈希值。选择您最喜欢的方法(上面的代码或SSL命令行的东西),并将BOTH键放在您的Facebook管理员中为您的应用程序。

检查点 - 确保您“安全” - 确保您在那里至少有两把钥匙,而不只是一把钥匙。如果你有一个,这意味着你的'debug'版本将无法连接,或者你的'release'版本将会。