Android Facebook SDK: Key hash does not match any stored key hashes when uploading google play
Asked Answered
B

8

19

My app uses facebook api for user login. On developing it works fine, but when I uploaded it to google play it stops working.

This is the error log:

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)

Could it be that the key hash changed in some way?

Berlauda answered 10/12, 2013 at 22:26 Comment(1)
Same thing happened for me , See this answer ,hope it helpsBarbellate
O
42

You followed the steps that facebook provides for the creation of a login application?

You need a 'Production keyhash' obtained starting your release keystore:

From comand line:

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

And add this key on facebook app page options.

More information: Facebook docs

Ocarina answered 10/12, 2013 at 23:11 Comment(2)
what is release key aliasLello
Note to others: do NOT use identical password and alias name. keytool does not give anything after password input if you have same alias name and password. To make it work, just recreate key file with different alias and password.Martita
A
60

I spent a full day trying to figure out why this wasn't working...

When generating the hash key for production you need to use openssl-0.9.8e_X64.zip on windows, you cannot use openssl-0.9.8k_X64.zip

The versions produce different hash keys, for some reason 9.8k does not work correctly... 9.8e does

Reference

Antidisestablishmentarianism answered 15/7, 2014 at 14:18 Comment(8)
I believe this answer to be incorrect. There is nothing in the data in the question that suggests there is any issue with OpenSSL versions, and you have done nothing here to explain why that might be related. You might simply be responding to the title of the question, but you really need to read the details.Glendaglenden
Perfect! I genereted using openssl-0.9.8k_X64.zip , then I use openssl-0.9.8e_X64.zip and it worked!Workout
AMAZING !! I wanted to give you +10. Thanks a lot. Who is supposed to know such thing?Cincture
+100 This should be the accepted answer. Incredible, this. Facebook may want to switch to using the SHA1 fingerprint to avoid such confusion and use the key without running it through SSL.Gyrostabilizer
Nice answer. Really helped to me lot. I used openssl-0.9.8e_WIN32 for Windows 32 bit. It is working nicely.Lotze
If I didn't find your answer there is no telling how long I would have still been on this issue.Turbosupercharger
Thank you so much!Serinaserine
+1 I should have just downloaded the latest version. You can find windows binaries here wiki.openssl.org/index.php/Binaries Checking the hashes the 0.9.8e gives the same result as 1.0.2.q no idea why openssl-0.9.8k is different.Dutcher
O
42

You followed the steps that facebook provides for the creation of a login application?

You need a 'Production keyhash' obtained starting your release keystore:

From comand line:

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

And add this key on facebook app page options.

More information: Facebook docs

Ocarina answered 10/12, 2013 at 23:11 Comment(2)
what is release key aliasLello
Note to others: do NOT use identical password and alias name. keytool does not give anything after password input if you have same alias name and password. To make it work, just recreate key file with different alias and password.Martita
A
21

This was giving the wrong key for me.

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

A workaround that worked for me was: 1. Put this code in your launching activity

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. Export the app for publishing on play store using the .keyStore
  2. Install the app before uploading to play store and run it and note the keyHash printed.
  3. Add the keyHash to the Facebook App.

Hope this helps someone.

Atomize answered 20/5, 2014 at 7:41 Comment(8)
this method is wrong. the key hash you get is for debug and not for the release version.Loxodrome
It worked for me. you need to sign your apk with release key and use the above said code to print your release Key hash and update it with your FB app.Merge
NOTE: writing this line Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); more than once will give you different keys, only consider first key.Merge
Worked for me. For those it doesn't work follow these step > add above in code > generate signed apk > install app through apk > getHash key > put has key in release key on facebook getstartedBrinkman
You may look at this answer if keytool generates "wrong" key: #27789384Adolpho
@Atomize I used your code it gives me exactly same keyhash that i got using terminal by this command keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64Spohr
I am still getting keyhash does not match any stored key hashSpohr
for many updates I'm generating hash key like this.What's happened to me is, For every version update hash key is changing.So everytime you have to check and update the hash key.Prorate
P
13

You can also just take the missing hash from the stack trace of the ApiException: Key hash XXXXXXX does not match any stored key hashes. There you have it already, only missing the =at the end. So take XXXXXXX=.

Pollak answered 14/8, 2014 at 13:46 Comment(1)
Thanks! I tried this before, but didn't know that there has to be a = at the end so it did not work.Lepidopteran
L
5

This is working fine to me

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

Where <RELEASE_KEY_ALIAS>is your Alias name while you create signed application.

enter image description here

And <RELEASE_KEY_PATH>is Location in the below picture And then enter the password is key create password in the below picture instead of android

enter image description here

Lello answered 9/3, 2014 at 13:5 Comment(0)
P
0

Above solutions are correct to a point. But if someone still faces an issue . Delete the key from developer profile and add it again writing= at the end and press enter . You have to add key in both settings and developer.

I was facing issues with app release to google play and using release key

Pending answered 17/6, 2015 at 10:56 Comment(1)
Please explain fully how you resolved the problem, as if none of the other answers are here so that your answer alone is enough to resolve the problem.Darell
I
0

I solved the issue in the simple way..

1)Frist Logout from the FaceBook app.

2)Open the Appplication which you have developed when cilck to login it will show the haskkey not mathcing.

3)Generate the SHA1 signing report in (Right Side Tab android studio) Gradle-->Task-->android->signing Report .(HEXA String)

4)Convert that to base 64.(Link) 5)Copy the output and past in the FaceBook developer page..


Incept answered 19/8, 2019 at 12:19 Comment(0)
P
-1

please check point no. 9 on Enable Single Sign On for Your App

Enable Single Sign On Enable single sign on for your app by setting Single Sign On to Yes below. YesNo Single Sign On

Paleography answered 16/12, 2016 at 6:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.