Remote_app_id не соответствует сохраненному id - исключению

Я использую собственный логин facebook, и я получаю CLOSED_LOGIN_FAILED.

Ниже приведен LogCat, который я получаю в DDMS,

    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 i.

Я не знаю, где я ошибаюсь, я пробовал все связанные темы, и я не был успешным.

Спасибо заранее.

Ответ 1

Используйте этот кусок кода, потому что он более надежный, я пробовал много версий 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

Ответ 2

Я тоже застрял в одной и той же проблеме и, наконец, нашел способ, главная причина неправильного Hash Key - openssl, загрузите openssl из здесь, я думаю, что facebook должен предоставить ссылку для скачивания на openssl на своем сайте, чтобы люди не застряли в таких проблемах, как этот

Ответ 3

В дополнение к вышеуказанным (правильным) ответам, Я понял, что когда вы делаете сборку "release" (EXPORT), а не "отладочную" сборку (например, просто создавайте и запускайте через Eclipse) - процесс сборки использует другое хранилище ключей. Это означает, что хэш-код отличается! Я использовал код выше, который дал мне хэш-ключ, я смог подключиться и отправить, но ни один из моих пользователей не был (потому что они были установлены из STORE, который построен с использованием хранилища ключей RELEASE!)

SO. К счастью, Facebook позволяет использовать несколько хэшей. Выберите свой любимый метод (либо код выше, либо строку в командной строке SSL), и добавьте BOTH-ключи в свой администратор Facebook для вашего приложения.

Контрольная точка - убедитесь, что вы "безопасны" - убедитесь, что у вас есть как минимум 2 клавиши, а не один. Если он у вас есть, это означает, что либо ваши сборки "debug" не смогут подключиться, либо ваши сборки "release" будут.