androidgoogle-cloud-messaginggoogle-play-services

google-services.json for different productFlavors


Update: GCM is deprecated, use FCM

I'm implementing the new Google Cloud Messaging following the guides from the Google Developers page here

I've successfully run and test it. But my problem now is I have different product flavors with different applicationId/packageName and different Google Cloud Messaging Project Id. The google-services.json have to be put at the /app/google-services.json not the flavors folder.

Is there any way to make the google-services.json config different for many flavors?


Solution

  • Google included support for flavors in version 2.0 of the play services plugin. Since this version of the gradle plugin com.google.gms:google-services:2.0.0-alpha3

    you can do this

    Step 1: add to gradle

    // To auto-generate google map api key of google-services.json
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    

    Step 2: add to AndroidManifest.xml in the application tag

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_api_key" />
    

    Step 3: download each flavor JSON file from firebase and add it

    app/src/
        flavor1/google-services.json
        flavor2/google-services.json
    

    Version 3.0.0 of the plugin searches for the JSON file in these locations (considering you have a flavor flavor1 and a build type debug):

    /app/src/debug/google-services.json
    /app/src/debug/flavor1/google-services.json
    /app/google-services.json
    

    This worked for me even using flavorDimensions. I have free & paid in one dimension and Mock & Prod in the other dimension. I also have 3 buildTypes: debug, release, and staging. This is how it looks in my project for the FreeProd flavor:

    enter image description here

    How many google-services.json files will depend on your project's characteristics, but you will need at least one JSON file for every Google project.

    If you want more details about what this plugin does with these JSON files, here it is: https://github.com/googlesamples/google-services/issues/54#issuecomment-165824720

    Link to the official docs: https://developers.google.com/android/guides/google-services-plugin

    Blog post with updated info: https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html

    And go here to check the latest version of this plugin: https://mvnrepository.com/artifact/com.google.gms/google-services?repo=google