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" будут.