Published App on Play Store can't communicate with Google Maps API and Facebook API

I created a signed APK with Android Studio, and I added to Google Developer console and Facebook console my SHA1 fingerprint and the relative api keys in my app. Everything works well if I upload my signed apk via USB, after installing it maps API and facebook api works well. If I upload the same apk to the Play Store, when I try to login with Facebook, it says "invalid key hash. The key hash blablabla doesn't match with any stored..". So if I log without facebook, I can't even get my google maps; this leads me to think that the apk loaded on the play store changes his fingerprint or some stuff like that. I checked all the stuff on Android Developers and Stackoverflow, but I can't make it work, because the strange thing is that this signed release apk works well until I load it on the Play Store.

Answers


Here is the answer for why you can't see the Google Map.

I recently Upload the APK on Google Play store and I faced the same issue after checking the Play Console I found the solution for this problem.

Their is no problem with your key but the problem is with your SHA-1. You signed your APK with your SHA-1 that is fine and then upload the APK it also fine.

But as per the new update for Play Console when you signed your APK with SHA-1 and upload the APK it only signed by you but as per the new update it is also signed by Google Play for more security. Have a look here some part of Google Play section:

With Google Play App Signing: You sign your app with your upload key. Then, Google verifies and removes the upload key signature. Finally, Google re-signs the app with the original app signing key you provided and delivers your app to the user.

You can refer Documentation here.

Now, The Answer of your question is After successfully upload the APK you can see that in the section with Two SHA-1 the 1st SHA-1 is Google created its own and 2nd SHA-1 is its yours.

So just copy the Google SHA-1 and paste it to your console where you generate the Google Map API Key.


With inspiration from @Andy Developer, I could display the map after my app was uploaded to Google Play. These were the steps:

  1. Upload your app to Google Play (signed APK file)
  2. After the app has been submitted and approved, select your app from Google Play Console
  3. Go to Development Tools -> Release management -> App signing

  1. Copy the first SHA-1 certificate which Google Play has issued after uploading the app.
  2. Go to Google Console and select your project.
  3. Select your API-key, restrict your key, and paste the SHA-1 after package name.

  1. Press Save, wait a couple of mins. and your app should show Google Maps.

I finally solved, the problem was probably that the file google_maps_api.xml provided by the api was not loaded in the release, so i

i did like that:

buildTypes {
    debug {
        manifestPlaceholders = [mapsKey: "AIzaSyB8o9KzQ5YN8U8AFS************"]
    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        manifestPlaceholders = [mapsKey: "AIzaSyApLacqgkdIR7uEpcf*****************"]
    }
}

and then in my AndroidManifest

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${mapsKey}" />

Reference: https://stackoverflow.com/a/33917692/3235560

then i registered 2 different keys each with the right sha1 fingerprint, one debug and the other given by Google Play console (not the upload certificate, but the other one generated by Google).

Very Very thanks to Zuhad and Andy Developer for inspiration.


The debug and release build types of your application are signed with two different keys.

You need to register both keys in the Google Maps and Facebook for them to allow access to their services


Yes , Obviously the map will not load in signed APK.

Solution:

When you generate API key in Google API console you need to restrict the key with SHA key

But After generating Signed APk you need to take release mode SHA key and add in API console for the API

I have attached Image, Have a look

hope it helps.


For Facebook to generate hash key use the below code:

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 (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

Once you receive the hashcode, do paste the same in Facebook developer console and move ahead

hope it helps:)


Need Your Help

Why is Yii2's ActiveRecord using lots of single SELECTs instead of JOINs?

php mysql activerecord orm yii2

I'm using Yii2's ActiveRecord implementation in (hopefully) exactly the way it should be used, according to the docs.

Default Capacity of List

c# .net

What is the default capacity of a List?