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.8k_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 за Windows 32 bit. Работи добре. - 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. Експортирайте приложението за публикуване в Play Store с помощта на .keyStore
  2. Инсталирайте приложението, преди да го качите в Play Store, стартирайте го и отбележете отпечатания 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 Използвах вашия код, той ми дава точно същия keyhash, който получих, използвайки терминала чрез тази команда keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 - person Shan Xeeshi; 01.01.2016
comment
Все още получавам хеш ключ не съвпада с нито един съхранен хеш ключ - person Shan Xeeshi; 01.01.2016
comment
за много актуализации генерирам хеш ключ по този начин. Това, което се случи с мен е, че за всяка актуализация на версия хеш ключът се променя. Така че всеки път, когато трябва да проверявате и актуализирате хеш ключа. - person Steve; 29.08.2016

Можете също така просто да вземете липсващия хеш от проследяването на стека на ApiException: Key hash XXXXXXX does not match any stored key hashes. Ето го вече, липсва му само = в края. Така че вземете XXXXXXX=.

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>е местоположението на снимката по-долу И след това въведете паролата е ключ за създаване на парола на снимката по-долу вместо android

въведете описание на изображението тук

person Satheesh    schedule 09.03.2014

Горните решения са правилни до точка. Но ако някой все още е изправен пред проблем. Изтрийте ключа от профила на програмиста и го добавете отново като напишете= в края и натиснете enter. Трябва да добавите ключ както в настройките, така и в програмиста.

Имах проблеми с пускането на приложението в Google Play и използването на ключа за освобождаване

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

Реших проблема по прост начин..

1) Първо излизане от приложението FaceBook.

2) Отворете приложението, което сте разработили, когато cilck за влизане ще покаже, че haskkey не се съпоставя.

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

4) Преобразувайте това в основа 64. (Връзка) 5) Копирайте изхода и миналото в Страница за разработчици на Facebook..


person vinay shetty    schedule 19.08.2019

моля, проверете точка № 9 на Активирайте единично влизане за вашето приложение

Активиране на единично влизане Активирайте единично влизане за вашето приложение, като зададете Единично влизане на Да по-долу. ДаНе Единично влизане

person kshitij    schedule 16.12.2016