isSessionValid() возвращает НЕТ, если установлено собственное приложение Facebook.

У меня проблема с единым входом при использовании Facebook SDK для Android. Проблема возникает только, когда установлено собственное приложение Facebook. Когда он не установлен, все работает нормально, в частности:

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

facebook.isSessionValid(); // returns true

Но когда родное приложение установлено, facebook.isSessionValid() все равно возвращает false несмотря на то, что я вызвал метод authorize.

Я должен добавить, что я создал собственное приложение Facebook для Android с хэш-ключом, сгенерированным из моего сертификата отладки, используя keytool.

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

Что здесь происходит?


person Amokrane Chentir    schedule 10.01.2012    source источник
comment
то же самое. ты случайно решил это?   -  person Lior Iluz    schedule 29.01.2012
comment
Проверено на 4.0.3 и 2.3.4. Я создал отчет об ошибке здесь developers.facebook.com/bugs/166465130126268, но, видимо, они говорят он должен работать. Нужно снова прочитать документацию и найти причину проблемы.   -  person Amokrane Chentir    schedule 31.01.2012
comment
См. здесь: stackoverflow.com/questions/ 4489791/ и здесь: sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you . У меня такая же ошибка входа в систему: ошибка invalid_key в моем логарифме, так что это может дать правильное решение.   -  person Lior Iluz    schedule 31.01.2012


Ответы (2)


РЕШЕНО! :)

Я очень надеюсь, что это сработает и для вас. Проблема в том, что 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/).

Сгенерированный ключ находится в вашем логарифме, замените старый на этот.

Решение благодаря: http://p-xr.com/implementing-facebook-into-your-app-invalid-key-with-keytool/

person Lior Iluz    schedule 31.01.2012
comment
Рад, что это сработало для вас :) Однако, оказывается, я использовал правильную подпись и раньше. Это убивает меня! - person Amokrane Chentir; 31.01.2012
comment
@Amokrane Chentir :) странно... Интересно, что еще может быть за эта ошибка. - person Lior Iluz; 01.02.2012
comment
Да! Это определенно была проблема в моем коде, очень глупая! Я использовал наследование, и один onActivityResult переопределял другой. Следовательно: facebook.authorizeCallback не вызывался. - person Amokrane Chentir; 08.03.2012

В дополнение к тому, что написал Лиор

вы можете сделать журнал следующим образом:

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

так что вы можете использовать Andorid Base64

ссылка: Устранение неполадок с неверным хэшем ключа

person Tzahie Leibovich    schedule 13.08.2013