Firebase App Distribution

In recent times Firebase has improved a lot and has added so many weapons to its arsenal. Every tool it has helps to build in a better way, improve, and grow. From the new additions, I want to discuss the Firebase App Distribution.

As the name suggests, app distribution, you can distribute your apps to the group of people or say QAs. You can share your pre-release versions to the testers, which can be easily accessed from their mobile devices. It actually has many advantages.

  1. Sharing builds as simple as drag n drop. (You can also do this using CI server as well )
  2. Testers can access all the shared versions from one place only.
  3. It helps to get quick feedback from your testers.
  4. It is available for both iOS and Android.

The biggest advantage I see is that if you use Crashlytics and App Distribution together, you will have full insights into your app versions from the single Firebase dashboard itself. For the current discussion, I will stick to the App Distribution only.

Firebase App Distribution provides many ways to distribute your apps to your testers.

  1. Firebase Console: This is the easiest way to share your apps as I said before, just drag and drop.
  2. Firebase CLI: Use the Firebase CLI; you can list your testers, builds, and release notes.
  3. Fastlane: You can use this open-source platform as well.
  4. Gradle: This option is available for Android only. It uses the Gradle plugin for App Distribution to generate and share the Android build.

I am covering the Android app distribution Gradle plugin here. So let’s quickly jump to the implementation part and see the results.

The very first and obvious thing is to integrate Firebase to your project (if not done already).

Once done with the Firebase integration now, let’s set up the App Distribution part.

1. Add the App Distribution plugin to the build. Gradle files.

Add the below plugin to the app/build, Gradle file. apply plugin: ‘com.google.firebase.appdistribution’

Add below classpath dependency to the project level/build. Gradle file. classpath ‘com.google.firebase:firebase-appdistribution-gradle:1.4.1’

2. Once synced the Gradle dependencies now it’s time to authenticate with Firebase. This is a very interesting step as it has 3 ways to authenticate.

– Using Google account via Gradle Plugin

– Using Firebase service account credentials

– Using the Firebase CLI

For this learning, I will go with the sweet and short way via Gradle Plugin. Open your terminal and run the following command gradlew appDistributionLogin For Mac or Linux ./gradlew can be used

This will give you an authentication link. Use that link to sign in to your Google account. Once you give permission to access your Firebase project, the Gradle will generate a refresh token, which will be used by the plugin to authenticate with Firebase.

Now you need to set up the environment variable FIREBASE_TOKEN to the refresh token generated. Use the below command for setting up the variable. set FIREBASE_TOKEN= refresh-token For Mac or Linux, export can be used.

The following image has all the commands used for the authentication process.

3. Now you need to configure your distribution properties. If you want you can set this for build types and flavors both. Make those changes in the app’s build. Gradle file.

buildTypes {

        release {

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

            firebaseAppDistribution {

                releaseNotesFile="app/releaseNotes.txt"

                testers="tester1@gmail.com, tester2@gmail.com"

            }

            debug {

                minifyEnabled false

                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

                firebaseAppDistribution {

                    releaseNotesFile="app/releaseNotes.txt"

                   testers="tester1@gmail.com, tester2@gmail.com"

                }

            }

        }

    }

    flavorDimensions "version"

    productFlavors {

        demo {

           dimension "version"

            firebaseAppDistribution {

                releaseNotes="Demo version with limited features"

                testers="tester1@gmail.com, tester2@gmail.com"

            }

        }

        paid{

            dimension "version"

            firebaseAppDistribution {

                releaseNotes="Paid version has more features"

               testers="tester1@gmail.com, tester2@gmail.com"

           }

        }

    }

There are other parameters available for configuration like custom apkPath, testersFile and etc.

4. Time for the result. Let’s distribute the build to our listed testers. For this run the command. gradlew assembleRelease appDistributionUploadRelease It actually builds the selected variant and distributes it with testers. The above command is for the release version, you can try others as well, for that just replace Release to your version. For e.g. for debug you use gradlew assembleDebug appDistributionUploadDebug. Basically it’s a build variant you want to distribute.

Once you are able to upload APK successfully. Your testers will get an invite or new build notifications. The new testers will get an email invite from the email itself they can set up the app manager and start testing the builds.

You can check the tester’s build status on the Firebase dashboard itself.

coma

Final Word

I personally believe that this tool is very much helpful in increasing the productivity of the team and of an individual as well. It saves so much effort and time of the team and ultimately helps to deliver builds fast to your customers and get their valuable feedback in time.

Content Team

This blog is from Mindbowser‘s content team – a group of individuals coming together to create pieces that you may like. If you have feedback, please drop us a message on contact@mindbowser.com

Keep Reading

Keep Reading

  • Service
  • Career
  • Let's create something together!

  • We’re looking for the best. Are you in?