安装Facebook本机应用程序时,isSessionValid()返回NO

时间:2012-01-10 15:33:05

标签: single-sign-on facebook-android-sdk

我使用Facebook SDK for Android存在SSO问题。安装本机Facebook应用程序时,问题出现。当它没有安装时,一切正常,特别是:

Facebook facebook = new Facebook(APP_ID);
facebook.authorize(mActivity, , new DialogListener() {
   ...
});

facebook.isSessionValid(); // returns true

但是,当安装本机应用程序时,facebook.isSessionValid()仍会返回false,尽管我调用了authorize方法。

我应该补充一点,我使用keytool从我的调试证书生成的hashkey创建了一个基于Android的原生Facebook应用程序。

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

发生了什么事?

2 个答案:

答案 0 :(得分:7)

解决了! :)

我当然希望这对你也有用。 问题是Windows生成无效密钥。

使用您的应用运行此功能:

try {
   PackageInfo info = getPackageManager().getPackageInfo("**YOURPACKAGENAME**", PackageManager.GET_SIGNATURES);
   for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.i("PXR", Base64.encodeBytes(md.digest()));
   }
}
catch (NameNotFoundException e) {}
catch (NoSuchAlgorithmException e) {}

不要忘记获得Base64(http://iharder.sourceforge.net/current/java/base64/)。

生成的密钥在您的logcat上,用此替换旧的。

解决方案感谢: http://p-xr.com/implementing-facebook-into-your-app-invalid-key-with-keytool/

答案 1 :(得分:0)

除了Lior所写的内容

你可以像这样做日志:

Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));

所以你可以使用Andorid Base64

参考:Invalid Key Hash Troubleshooting