larryaasen / upgrader

A Flutter package for prompting users to upgrade when there is a newer version of the app in the store.
MIT License
569 stars 279 forks source link

Delayed firing of UpgradeAlert to mitigate App Store propagation delays #431

Open lukemmtt opened 3 months ago

lukemmtt commented 3 months ago

Before I began using Flutter, I used the Siren library for native iOS, which is arguably the best-maintained and most-commonly-used equivalent to upgrader for that platform.

In their docs, they state the following:

Occasionally, the iTunes JSON will update faster than the App Store CDN, meaning the JSON may state that the new version of the app has been released, while no new binary is made available for download via the App Store. It is for this reason that Siren will, by default, wait 1 day (24 hours) after the JSON has been updated to prompt the user to update. To change the default setting, please modify the value of showAlertAfterCurrentVersionHasBeenReleasedForDays.

In other words, Siren would suppress the firing of the Upgrade Alert until at least 1 day had passed from the latest version's release date, in order to mitigate the likelihood of App Store propagation delays (in which the user would click "Upgrade" but the binary might not available yet).

In reviewing upgrader's docs, it doesn't appear that this has been taken into consideration—or at least, the mechanism is not documented or exposed to us end users.

In pursuit of an optimal user experience for my app's users, I'm wondering if someone can confirm my finding here, and help assess whether this is something of interest to the community to pursue an enhancement.

If needed, any pointers on where to begin with such an enhancement (such as whether upgrader retrieves the releaseDate of the currentVersion and persists it anywhere) would be helpful.

Thanks for the consideration.

larryaasen commented 2 months ago

That’s not a bad idea. A delay after the JSON has been updated might alleviate some issues for users. Have there been any reports that a user was prompted with an update by this package, and the update in the store was not available yet? Do we know how often this happens? In my experience and estimation a 24 hour wait is way too long and would delay upgrading many eligible users for too long. I think a 15 minute delay would be reasonable.

lukemmtt commented 2 months ago

I've only just implemented your package in my first flutter app; I've used Siren with the default settings in a native iOS app.

Anecdotally, I've certainly seen some propagation delays in real life before: the delay from "ready for distribution" to live on my local device's App Store, differences between availability on my device's App Store and my friends', etc. As you've noted, these things rarely seem more than 15 - 60 minutes, but:

  1. That says nothing about the potential for global propagation delays
  2. It assumes the "release date" published on the App Store & play store is accurate with sub-hour precision

In reality, I'd rather take a 6 hour delay rather than a user see a prompt that nags them to do something that is not yet possible for them.