Android Facebook SDK: хэш ключа не совпадает ни с одним из сохраненных хэшей ключей при загрузке в Google Play

Мое приложение использует facebook API для входа пользователя. При разработке он работает нормально, но когда я загрузил его в Google Play, он перестает работать.

Это журнал ошибок:

12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): Exception during service
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284): com.facebook.http.protocol.ApiException: Key hash XXXXXXX does not match any stored key hashes.
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.ApiResponseChecker.b(ApiResponseChecker.java:83)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.ApiResponseChecker.a(ApiResponseChecker.java:162)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.ApiResponse.g(ApiResponse.java:239)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:272)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.katana.server.protocol.AuthorizeAppMethod.a(AuthorizeAppMethod.java:29)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.ApiResponseHandler.a(ApiResponseHandler.java:56)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.ApiResponseHandler.handleResponse(ApiResponseHandler.java:29)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:280)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:141)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.common.FbHttpRequestProcessor.b(FbHttpRequestProcessor.java:103)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:196)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:374)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:151)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.http.protocol.AbstractSingleMethodRunner.a(AbstractSingleMethodRunner.java:18)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.katana.server.handler.PlatformOperationHandler.c(PlatformOperationHandler.java:367)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.katana.server.handler.PlatformOperationHandler.a(PlatformOperationHandler.java:260)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.fbservice.service.BlueServiceQueue.e(BlueServiceQueue.java:299)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.fbservice.service.BlueServiceQueue.d(BlueServiceQueue.java:53)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.fbservice.service.BlueServiceQueue$3.run(BlueServiceQueue.java:230)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at com.facebook.common.executors.ListenableScheduledFutureImpl.run(ListenableScheduledFutureImpl.java:59)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at android.os.Handler.handleCallback(Handler.java:733)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at android.os.Handler.dispatchMessage(Handler.java:95)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at android.os.Looper.loop(Looper.java:137)
12-10 20:20:02.488: W/fb4a(:<default>):BlueServiceQueue(17284):     at android.os.HandlerThread.run(HandlerThread.java:61)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): Failed to send
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284): com.facebook.fbservice.service.ServiceException: API_ERROR: API_ERROR
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.java:640)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.java:48)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at com.facebook.fbservice.ops.BlueServiceOperation$2.run(BlueServiceOperation.java:605)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at android.os.Handler.handleCallback(Handler.java:733)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at android.os.Handler.dispatchMessage(Handler.java:95)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at android.os.Looper.loop(Looper.java:137)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at android.app.ActivityThread.main(ActivityThread.java:4998)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at java.lang.reflect.Method.invokeNative(Native Method)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at java.lang.reflect.Method.invoke(Method.java:515)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-10 20:20:02.498: W/fb4a(:<default>):GDPDialog(17284):    at dalvik.system.NativeStart.main(Native Method)

Может быть, хэш ключа как-то изменился?


person leojg    schedule 10.12.2013    source источник
comment
То же самое произошло и со мной. См. этот ответ, надеюсь, он поможет   -  person Ameen Maheen    schedule 11.12.2015


Ответы (8)


Вы выполнили шаги, которые Facebook предоставляет для создания приложения для входа?

Вам нужен «Производственный ключевой хэш», полученный для запуска вашего хранилища ключей выпуска:

Из командной строки:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

И добавьте этот ключ в параметры страницы приложения facebook.

Дополнительная информация: документы Facebook

person Ramon Vicente    schedule 10.12.2013
comment
что такое псевдоним ключа выпуска - person Satheesh; 09.03.2014
comment
Примечание для других: НЕ используйте идентичный пароль и псевдоним. keytool ничего не дает после ввода пароля, если у вас одинаковый псевдоним и пароль. Чтобы заставить его работать, просто пересоздайте файл ключа с другим псевдонимом и паролем. - person Youngjae; 13.06.2014

Я целый день пытался понять, почему это не работает...

При создании хэш-ключа для производства вам необходимо использовать openssl-0.9.8e_X64.zip в Windows, вы не можете использовать openssl-0.9.8k_X64.zip

Версии выдают разные хэш-ключи, почему-то 9.8k работает некорректно... 9.8e работает

Справочник

person Milk Man    schedule 15.07.2014
comment
Я считаю этот ответ неверным. В данных вопроса нет ничего, что указывало бы на наличие какой-либо проблемы с версиями OpenSSL, и вы ничего не сделали здесь, чтобы объяснить, почему это может быть связано. Вы возможно просто отвечаете на заголовок вопроса, но вам действительно нужно прочитать подробности. - person Andrew Barber; 19.08.2014
comment
Идеально! Я сгенерировал, используя openssl-0.9.8k_X64.zip , затем я использую openssl-0.9.8e_X64.zip, и это сработало! - person rsicarelli; 18.09.2014
comment
УДИВИТЕЛЬНО !! Я хотел дать вам +10. Большое спасибо. Кто должен знать такое? - person gprathour; 07.10.2014
comment
+100 Это должен быть принятый ответ. Невероятно, это. Facebook может захотеть переключиться на использование отпечатка пальца SHA1, чтобы избежать такой путаницы и использовать ключ, не запуская его через SSL. - person Oliver Hausler; 14.02.2015
comment
Хороший ответ. Мне действительно очень помогли. Я использовал openssl-0.9.8e_WIN32 для 32-битной Windows. Это работает хорошо. - person Thirumalvalavan; 15.05.2015
comment
Если бы я не нашел вашего ответа, неизвестно, как долго я бы еще занимался этим вопросом. - person Syclone; 13.03.2016
comment
Большое спасибо! - person Kirill Starostin; 06.07.2018
comment
+1 Я должен был просто загрузить последнюю версию. Вы можете найти двоичные файлы Windows здесь wiki.openssl.org/index.php/Binaries Проверка хэши 0.9.8e дают тот же результат, что и 1.0.2.q, не знаю, почему openssl-0.9.8k отличается. - person Fox Alex; 07.04.2019

Это дало мне неправильный ключ.

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Обходной путь, который сработал для меня, был следующим: 1. Поместите этот код в свою активность запуска.

private void printKeyHash(){
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "YOUR_PACKAGE_NAME", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {
        Log.d("KeyHash:", e.toString());
    } catch (NoSuchAlgorithmException e) {
        Log.d("KeyHash:", e.toString());
    }
}
  1. Экспортируйте приложение для публикации в игровом магазине с помощью .keyStore.
  2. Установите приложение перед загрузкой в ​​​​игровой магазин, запустите его и обратите внимание на напечатанный keyHash.
  3. Добавьте keyHash в приложение Facebook.

Надеюсь, это поможет кому-то.

person patrickfdsouza    schedule 20.05.2014
comment
этот метод неправильный. хэш ключа, который вы получаете, предназначен для отладки, а не для версии выпуска. - person Qin Zhengquan; 19.10.2014
comment
Это сработало для меня. вам нужно подписать свой apk ключом выпуска и использовать указанный выше код, чтобы распечатать хеш ключа выпуска и обновить его с помощью приложения FB. - person Appbrain; 29.10.2014
comment
ПРИМЕЧАНИЕ: запись этой строки Log.d(KeyHash:, Base64.encodeToString(md.digest(), Base64.DEFAULT)); несколько раз дадут вам разные ключи, учитывайте только первый ключ. - person Appbrain; 29.10.2014
comment
Работал на меня. Для тех, кто не работает, выполните следующие действия: › добавьте выше в коде › сгенерируйте подписанный apk › установите приложение через apk › ключ getHash › поместите ключ в ключ выпуска на facebook getstarted - person Ajeet; 02.07.2015
comment
Вы можете посмотреть этот ответ, если keytool генерирует неправильный ключ: stackoverflow.com/questions/27788884/ - person Ognyan; 26.09.2015
comment
@patrickfdsouza Я использовал ваш код, он дает мне точно такой же хеш-ключ, который я получил с помощью терминала с помощью этой команды keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 - person Shan Xeeshi; 01.01.2016
comment
Я все еще получаю, что keyhash не соответствует ни одному сохраненному хэшу ключа - person Shan Xeeshi; 01.01.2016
comment
для многих обновлений я генерирую хэш-ключ, подобный этому. Со мной произошло следующее: для каждой версии хеш-ключ обновления меняется. Поэтому каждый раз вам нужно проверять и обновлять хеш-ключ. - person Steve; 29.08.2016

Вы также можете просто взять недостающий хэш из трассировки стека исключения ApiException: Key hash XXXXXXX does not match any stored key hashes. Вот оно уже есть, только отсутствует = в конце. Итак, возьмите ХХХХХХХ=.

person Micky    schedule 14.08.2014
comment
Спасибо! Я пробовал это раньше, но не знал, что в конце должен быть =, поэтому это не сработало. - person Ivan Stoyanov; 19.11.2014

Это работает нормально для меня

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Где <RELEASE_KEY_ALIAS> — ваш псевдоним при создании подписанного приложения.

введите здесь описание изображения

И <RELEASE_KEY_PATH>is Местоположение на картинке ниже. Затем введите пароль key create password на картинке ниже вместо android

введите здесь описание изображения

person Satheesh    schedule 09.03.2014

Приведенные выше решения верны до некоторой степени. Но если кто-то все еще сталкивается с проблемой . Удалите ключ из профиля разработчика и добавьте его снова, написав = в конце и нажмите ввод. Вы должны добавить ключ как в настройках, так и в разработчике.

У меня возникли проблемы с выпуском приложения в Google Play и использованием ключа разблокировки.

person Prayag    schedule 17.06.2015
comment
Пожалуйста, полностью объясните, как вы решили проблему, как будто здесь нет других ответов, поэтому одного вашего ответа достаточно для решения проблемы. - person SuperBiasedMan; 17.06.2015

Решил проблему простым способом..

1)Выйдите из приложения FaceBook.

2) Откройте приложение, которое вы разработали, когда нажмите для входа в систему, оно покажет, что ключ haskkey не соответствует.

3) Создайте отчет о подписи SHA1 в (правая вкладка android studio) Gradle -> Task -> android-> signing Report. (HEXA String)

4) Преобразуйте это в базу 64. (Ссылка) 5) Скопируйте вывод и вставьте в Страница разработчика в Фейсбуке..


person vinay shetty    schedule 19.08.2019

пожалуйста, проверьте пункт нет. 9 на Включите единый вход для своего приложения

Включить единый вход Включите единый вход для своего приложения, установив для параметра «Единый вход» значение «Да» ниже. ДаНет единого входа

person kshitij    schedule 16.12.2016