Shiftary is a shift planner for Android, built in Flutter. It works offline with no account, so when it came to charging for it I had one constraint: no server in the purchase path. If my backend is down, nobody should lose access to their rota.
The model ended up as:
a 14-day trial of everything, no card
Shiftary Lifetime : one-time, $19.99
Shiftary Cloud : yearly subscription, $9.99, adds cloud backup and sync
Lifetime upgrade : $9.99, only offered to Cloud subscribers, so they never pay full price twice
Here's how each piece works with the in_app_purchase plugin, and the two places where Google Play doesn't give the app what you'd expect.
The trial: earliest date wins
The trial runs on the phone's clock from first launch. Nothing waits for the network, so the calendar opens instantly even in a hospital basement.
The start date is stored in two places: SharedPreferences , and inside the user's own data (the same snapshot that goes into backup files and cloud sync).…