Хэш ключа приложения Android не соответствует сохраненным хэшам ключей
У меня есть приложение для производства в Play Store, которое использует логин с Facebook SDK. Когда я отлаживаю приложение от Eclipse, нет проблем, но когда его на производстве он дает мне следующую ошибку после того, как Facebook запрашивает у меня разрешения. Я добавил на своей странице приложения на developers.facebook.com хэш ключа, сгенерированный с помощью keytool с помощью этой команды:
keytool-exportcert-псевдоним Диего-keystore "C:UsersDiegoDesktopCeluChat.Хранилище" | "C:opensslbinopenssl.exe " sha1-двоичный | "C:opensslbinopenssl.ехе" в base64
CeluChat.KeyStore-это хранилище ключей, которое я использовал при экспорте подписанного приложения, и когда keytool предлагает мне пароль, я ввел его при экспорте.
но ошибка, которая дает мне на производстве (загружается из Play Store):
10-20 22:21:10.752: W / fb4a (:): BlueServiceQueue (5872): com.фейсбук.http.протокол.ApiException: ключевой хэш VQ3XhZb5_tBH9oGe2WW32DDdNS0 не соответствует сохраненным хэшам ключей.
ключ хэша на исключение отличается от ключа генерируются с помощью keytool. В любом случае я добавил ключевой хэш на Facebook, но он все еще не работает.
11 ответов
Facebook как заменяет +,- и / с _
поэтому просто попробуйте заменить _ на+, - И / и добавить этот хэш-ключ.
надеюсь, это должно сработать.
я использовал это, чтобы показать ключ при запуске приложения. В моем случае я получал неправильный хэш ключа из команды keytool. Обратите внимание, что при вводе неправильного пароля(намеренно) вместо получения ошибки генерируется неправильный ключ. Используйте это, чтобы получить правильный хэш и посмотреть, соответствует ли он в журнале ошибок
try {
PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("MY KEY HASH:", sign);
Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
также, если по какой-то причине вышеуказанный метод не работает. Попробуйте использовать этот APK для создания правильного хэша ключа. Помните, что вы должны подпишите его с любым сертификатом, который вы пытаетесь получить (отладка или выпуск). Установите его на устройство тестирования и запустите.
Я только что обнаружил ошибку со страницей ввода ключа приложения: если вы вставляете хэш-ключ из приложения, не нажимая Enter, а затем нажмите кнопку "Сохранить изменения", вновь введенный код исчезнет, но страница покажет "сохранено!" ответное сообщение. Это неправда: он не спас. Вы должны нажать клавишу Enter после вставки хэш-ключа, а затем нажать "Сохранить изменения".
Я сохранил ключ, включая знак"=". Это сработало.
просто поместите возвращенный хэш-ключ сообщения об ошибке:
10-20 22:21:10.752: W/fb4a(:):BlueServiceQueue(5872): com.facebook.http.protocol.ApiException: Key hash VQ3XhZb5_tBH9oGe2WW32DDdNS0 does not match any stored key hashes.
VQ3XhZb5_tBH9oGe2WW32DDdNS0
на Facebook разработчики ключевых хэшей вашего приложения.
надеюсь, что это поможет.
Это хороший вопрос. И есть 2 способа сделать это. Что обычно происходит с нами при интеграции Facebook SDK для android, мы продолжаем следовать инструкциям из сайт разработчика facebook.
но как только приложение выходит в play-store, мы, как правило, забываем процедуру, которая еще не завершена. И мы заканчиваем на той же ошибке:
05-13 14:45:43.882: W/fb4a(:<default>):BlueServiceQueue(25454): Exception during service
05-13 14:45:43.882: W/fb4a(:<default>):BlueServiceQueue(25454): com.facebook.http.protocol.ApiException: Key hash XXXXXXXXXXXXXX does not match any stored key hashes.
Jus получил контрольный список для этого:
1) используя ключ отладки, пока превращающ App
сайт разработчика Facebook довольно полезен в этом. Просто скопируйте код, который у них есть в страница начала работы в командной строке. а именно:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
пароль к нему-android, и вы получите ключ отладки после него.
2) создание ключа отладки после подписания Приложения
как только приложение будет готово к загрузке в Google Play store, нам нужно подписать его с помощью ключа, значение которого генерируется из хранилища ключей. Что хорошо объясняется Satheesh в своем ответе. использование:
keytool -exportcert -alias <Alias Name here> -keystore <Path to keystore> | openssl sha1 -binary | openssl base64
, который дает вам другой ключ, чем ключ отладки.
Ну, если вы используете Windows, используйте эту команду в cmd .
переместить в C:\Program файлы\Java\jdk1.8.0_25\bin
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | "C:\openssl\bin\openssl.exe" sha1 -binary | "C:\openssl\bin\openssl.exe" base64
при создании хэш-ключа вам нужно использовать openssl-0.9.8e_X64.zip в windows нельзя использовать openssl-0.9.8k_X64.zip
Это решение.
попробовав все вышеперечисленное, я попробовал это.. и сработало!!!
- копировать хэш ключа было то же самое, что Facebook дает на исключение,
- заменить
"_"
с"/"
и добавить"="
на - добавить его в Facebook
- также проверьте имя пакета и имя действия еще раз. Это сработало для меня!!.
пожалуйста, следуйте ниже метод для создания хэш-ключа это предлагается @lucianbase на этой странице https://github.com/AntonioCuevaUrraco/nativescript-facebook-login/issues/14
создайте ключ SHA1 вашего приложения с помощью android studio или cmd tool. скопировать его такой диск:А1:ЕА:А3:5С:5С:68:ФБ:Альфа:0А:6Б:Е5:5А:72:64:ДД:26:8Д:44:84 и открыть http://tomeko.net/online_tools/hex_to_base64.php чтобы преобразовать значение SHA1 в base64. Это то, что Facebook требует получить сгенерированный хэш "********************= " и скопируйте ключевой хэш в приложение facebook.
Просто Замените Хэш Ключа Ошибки В Вашем https://developers.facebook.com/app применение...!
100 Процентов Это Будет Работать Наверняка.
-Сунил
ну на самом деле лучший и простой способ таков. если вы видите эту проблему на экране телефона. Вы должны увидеть эту проблему с android studio LOGCAT. это понравится
01-26 14:58:22.885 14851-19534/? W/fb4a.BlueServiceQueue: Exception during service
X.1xO: [code] 404 [message]: Key hash 961x8mIbWmA7TRRpbk...= does not match any stored key hashes. (404) [extra]: null
at X.0fG.D(:240135)
at X.0k8.F(:255078)
at X.3gX.EUB(:738232)
at X.0fo.handleResponse(:242693)
at X.0k5.run(:254998)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at X.0NH.run(:187661)
at X.0JQ.run(:49671)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at X.0NM.run(:187873)
at java.lang.Thread.run(Thread.java:761)
скопируйте этот хэш-ключ из logcat, который я сделал его частным (...) и вставьте его на страницу разработчика facebook. Это немедленно решит вашу проблему. Также убедитесь, что хэш-ключ вашего выпущенного APK отличается от оригинального хэш-ключа, который загружается из google play.
Включить Единый Вход Включите единый вход для вашего приложения, установив единый вход в Yes ниже. пожалуйста, проверьте пункт нет. 9 on https://developers.facebook.com/docs/facebook-login/android