Ответ 1
Facebook как-то заменяет +, - и/с _
Так что просто попробуйте заменить _ на +, - и/и добавить этот хэш-ключ.
Надеюсь, он должен работать.
У меня есть приложение для производства в Play Маркете, в котором используется логин с SDK для Facebook. Когда я отлаживаю приложение из Eclipse, нет никаких проблем, но когда его на производстве он дает мне следующую ошибку после того, как Facebook спрашивает у меня разрешения. Я добавил на странице своего приложения на developer.facebook.com хэш ключа, сгенерированный с помощью keytool, используя эту команду:
keytool -exportcert -alias diego -keystore "C:\Users\Diego\Desktop\CeluChat.KeyStore" | "C:\openssl\bin\openssl.exe" sha1 -binary | "C:\openssl\bin\openssl.exe" base64
CeluChat.KeyStore - хранилище ключей, которое я использовал, когда я экспортировал подписанное приложение, и когда keytool дает мне пароль для ввода пароля, я ввел его при экспорте.
Но ошибка, которая дает мне производство (скачанная из Play Маркета):
10-20 22: 21:10.752: W/fb4a (:): BlueServiceQueue (5872): com.facebook.http.protocol.ApiException: Key hash VQ3XhZb5_tBH9oGe2WW32DDdNS0 не соответствует хэшам хранимых ключей.
Хэш ключа, который находится на исключении, отличается от хэша ключа, сгенерированного с помощью keytool. Во всяком случае, я добавил Key Hash на Facebook, но он все еще не работает.
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 для генерации правильного хэша ключа. Помните, что вам нужно подписать его любым сертификатом, который вы пытаетесь получить (отладки или выпуска). Установите его на свое тестовое устройство и запустите его.
Я только что обнаружил ошибку на странице ввода ключевого слова Sample App: если вы вставляете хеш-ключ из приложения без нажатия Enter, а затем нажмите кнопку "Сохранить изменения", новый код исчезнет, но страница покажет "Сохранено!" ответное сообщение. Это неправда: это не спасло. Вы должны нажать клавишу "Enter" после вставки хеш-ключа, а затем нажать "Сохранить изменения".
Я сохранил ключ, включая символ trailing =. Это сработало.
Проще поставить хеш-ключ возвращаемого сообщения об ошибке:
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 есть ключевые хэши вашего приложения.
Надеюсь на эту помощь.
Это хороший вопрос. И есть два способа сделать это. Что обычно происходит с нами при интеграции Facebook SDK для Android, мы продолжаем следовать инструкциям сайта разработчика facebook.
Но как только приложение выйдет из игрового магазина, мы, как правило, забываем о процедуре, которая все еще находится на рассмотрении. И мы заканчиваем одну и ту же ошибку:
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) Использование ключа отладки при разработке приложения
Сайт разработчика Facebook очень полезен. Просто скопируйте код, который у них есть в странице Начало работы в командной строке. а именно:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Пароль к нему - андроид, и после него вы получите отладочный ключ.
2) Создание отладочного ключа после подписания приложения
Как только приложение будет готово к загрузке в магазин Google Play, мы должны его подписать, используя ключ, значение которого генерируется из хранилища ключей. Это хорошо объясняется Сатишем в его ответе. используя:
keytool -exportcert -alias <Alias Name here> -keystore <Path to keystore> | openssl sha1 -binary | openssl base64
Что дает вам другой ключ, чем ключ отладки.
Попробовав все вышеперечисленное, я попробовал это.. и работает!!!
"_"
на "/"
и добавьте "="
в конец,Ну, если вы используете Windows, используйте эту команду в cmd.
Переместить в C:\Program Files\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 в окнах, вы не можете использовать openssl-0.9.8k_X64.zip
Это решение.
Просто замените хэширование ошибок в вашем https://developers.facebook.com/app приложение...!
100 процентов Это будет работать для уверенного.
-Sunil
Включить единый вход Включите единый вход для вашего приложения, установив Single Sign On на Yes ниже. проверьте. 9 на https://developers.facebook.com/docs/facebook-login/android