Force mandatory update for mobile app users

Video tutorial above

If you prefer reading text: https://go.vancewong.com/adalo-force-app-update

What you need

  • A paid plan (because the free plan doesn’t allow you to publish to app stores)
  • Working mobile app on the iOS and/or Android app store(s)
  • Splash screen assets
  • Lottie animation (optional), for eg. from Lottie Files
  • App downloads link manager (for eg. https://www.onelink.to/)

This tutorial was inspired by a topic on the Adalo community forum and a question that I personally posted too. After lots of experimentation and racking my brains, I came up with a way to do it without too much complication.


You’ve published your native mobile app to the various app stores and the monthly active users start to grow — yay!

https://media.giphy.com/media/TdfyKrN7HGTIY/giphy.gif

But you’re making some breaking changes that would require your users to update the app. How can you “force” them to update the app before continuing to use it? Kind of like a mandatory update, if you will.

https://media.giphy.com/media/a5viI92PAF89q/giphy.gif

Well, you could send in-app notifications, but users can just dismiss it. You definitely NEED a way to check if the users are on the latest version of the app, otherwise, force them to update before continuing use.

https://media.giphy.com/media/11YdnfyG6qvuWk/giphy.gif

How I personally feel about notifications on my phone lmao

While there’s no inbuilt function in Adalo to do that, we can create our own, and it’s not exactly complicated. Let’s get right into it.

https://media.giphy.com/media/3oKHW7J7yUho4G0XHa/giphy.gif

Create a “Versions” collection

Fields:

  • Version number (text)
  • Latest version (boolean)

This collection is to keep track of the number of versions that you’ve released on the app stores. Don’t worry even if you’re implementing this after releasing a few or dozens of updates to date. This will work from the point you start implementing it.

Important! DO NOT delete any records in this data collection. For eg. you’ll never know when a user who’s using v1.0.9 (first version you’ve implemented this “force update” feature) decides to come back to your app when it’s v2.0.0!

Splash screen

Create a welcome screen that has your logo, treat this as the splash screen when someone boots up the app, or logs in. This will check whether the user is using the latest version.

On the welcome splash screen (for when users are logged in), add these actions at the page level.


If the current version = latest version is true, then send to the intended home screen, for eg. the user’s profile


If the current version = latest version is false, then send to update screen

The purpose of the above actions is to check if the current app version that the user’s device has installed is the latest version or an outdated version.

If latest version = true → send to the intended home screen

If latest version = false → send to the update screen

Make sure that the settings are set correctly, if not it won’t work.

Update screen

Next, use something like https://www.onelink.to/ to take care of both Android and iOS users. This will take care of directing them to the respective app stores depending on the device on which they click the link on.

What next?

https://media.giphy.com/media/WRQBXSCnEFJIuxktnw/giphy.gif

Make sure to do this for every version of your app. So at any one point, only the latest version (eg. 115) is marked as “true” for the latest version.

So regardless of the current version, this welcome screen always checks if the current version that the user has installed on his/her device is the latest. As long as it’s not the latest, it’d direct them to the update screen. This is to take care of inactive users who have your app but a few versions behind the latest one.

Only if the splash screen of the user’s installed app version is marked as “true” would the app send the user to the home screen.

Make sure you only change the latest version in the Adalo database AFTER Apple and Google have approved your newly submitted build on their app stores. Apple is notorious for taking longer than Google (up to 3 business days versus 1 hour!) to approve new build submissions. So be sure that your latest version is available to download before changing the latest version.

Why don’t we perform these conditional actions on the home screen instead?

If the users are outside of the US, it might take 0.5 to 1 second to execute the conditional action (since it’s dependent on the database API call, and Adalo’s servers are in the US).

In that case, some users might tap on something else before they’re sent to the update screen if they’re on an outdated version.

I’ve tested this myself in Singapore (South East Asia) so I can vouch that the latency can really be up to 1 second, which is more than enough time for a regular app user to just click to another screen before the app sends the user to the update screen (if he or she is on an older version).

Workflow for future updates

The process would always be:

  • Make edits to your app
  • Change the condition on the splash screen
  • Generate builds in Adalo
  • Submit builds for approval
  • Once approved, add a new record in the “versions” data collection
  • Set the new record’s latest version field to be “true”
  • Set the previous record’s latest version field to be “false”
  • Now your users will be prompted to update their app before being able to continue using the app!

Tip: Both Google and Apple allow app developers to manage how their new versions are made available to users. Set the “managed publishing” in your Google Play Console for developers to ON, and set the method for “version release” in your App Store Connect to MANUALLY release this version. That way, you can control when to release the updates to your users. Especially handy since Apple takes longer to approve new version submissions.

7 Likes

Thanks for this, but I have a question, How do know that the user has the new version installed?

That is, I place the new version in the data collection.
I put True.

But how does the system know or how does the action know what version of the app they have installed?

3 Likes

Hello @Cacoreasa

The splash screen has this condition that checks for the version. For example, if the current version is v1.1, the splash screen will have this condition:

If v1.1 is marked as the current version in the database, then direct the user to the home screen. If it's not the current version, direct the user to the update screen

When you push out v1.2, you change the condition on the app to v1.2. Thereafter, you change the version records in the database. Mark v1.1 as no longer the latest version and v1.2 as the latest version. Because the user has v1.1 installed that has the condition to check whether it’s the latest version in the database, they’ll get sent to the update screen.

I explain and simulate it in the video here: Adalo Tutorial (No-Code App Builder) - Force Mandatory Update For Mobile App Users - YouTube

Hope that helps :slight_smile:

HI there i was wondering the number 103 is it something related to this? So in my case it would be 125?
Screen Shot 2022-03-16 at 11.45.47 pm

Hello @MaxZHou, the number I gave was just an example. In your case, it will depend on the records in your versions data table. But to keep it simple and minimise errors, you can set up your data table according to the version numbers that are in your Apple and Google Developer accounts. Hope that helps :slight_smile:

Hi sorry i don’t quite get it, so do i use the number in my adalo side such as 0.0.23 or the one in the apple store side such as 1.1, 1.2, 1.3 and such.

The system knows the version because the custom filter saves it for us.

We can update a database instantaneously, but the custom filter will remain unchanged until the user updates the app.

Step 1) Set the custom filter: name is equal to A so that every user will install that custom filter.
Step 2) Upload a new version changing the custom filter: name is equal to B; from now on, every new user will download the new custom filter
Step 3) Mark B as the latest version in the database.

Therefore, users with version A will need to download version B to refresh its custom filter because it won’t change until the user updates the app.

Hi @vancewong

I think your solution has a small issue. Here is the sequence:

  1. Increment version in the custom filter
  2. Publish to the app stores
  3. Wait until both App Store and Google Play publish the update. Like you said, App Store will take longer, so need to wait. No database changes have been made yet.
  4. While you are waiting, a user downloads the new app from Google Play, but the database has not yet been updated (still waiting for App Store)
  5. Users with a new version of the app will still get sent to the update page even though they have the latest version.

The issue will be solved once you update the database, but there are a few days where new users will have issues with app because they will continuously be pushed to the update screen.

Any thoughts?
David

Hey David, it’s been a long time since I last used Adalo, so I’m sure this tutorial didn’t age well. There might be a better way of implementing this in Adalo now. Good luck

Hi @dknov007,
A simple solution - you can turn on manual publishing both in Appstore and Playstore and publish the apps simultaneously after approval.
Also you can compare versions in a way so that hardcoded version in the app should be less than the DB version to be sent to “update” page. “Latest” isn’t much needed. So even if a user has an app with hardcoded version 110, while the last version in the DB is 109, nothing will happen.

Best,
Victor.