我正在使用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 : []
我使用
获取keyhashC:\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进行签名。
我不知道我哪里出错了,我已经尝试了所有相关的线程,但我没有成功。
提前致谢。
答案 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'版本将会。