Barcode Info 1.3: what a purchase costs an offline app
Until this release, Barcode Info had nothing to sell, and its Android build could prove it: it shipped without permission to use the internet at all. Version 1.3 adds Barcode Info Premium, a one-time purchase, along with a set of free features for everyone. This post is about both, and about the one thing the purchase could not avoid costing.
What's new
Barcode Info Premium is one payment, not a subscription, and everything the app did before stays free. It adds five things for people who use the app for work:
- Folders. Sort scans into folders, each with a colour if you like. A scan can be in several at once, and scans made while a folder is open are filed into it.
- Export. The history goes out as a CSV or a text file, all of it or only the folders you choose. The main label fields get columns of their own.
- Scan one after another. A New scan button over each result opens the camera again, with no trip back to the list.
- More photos per scan. Add your own, like the back of the pack or the price tag, taken with the phone's own camera.
- Quick preview. Hold a scan in the list to see it. Let go and it closes.
And for everyone, free:
- Notes. Add a note to any scan. The chips under an empty note are your own earlier notes, the ones you use most first.
- Filters. By kind of code, by period, or down to the scans with a note, a photo or a failed check digit. They live behind a funnel in the top bar, and a row of chips says what is on.
- Two panes on tablets. On an iPad or an Android tablet held sideways, the list is on the left and the scan on the right. Phones now stay upright.
- A tidier result. A close button, and a long result can be pulled down to close, like a short one.
- Tell us what you think. Settings asks whether you enjoy the app. A thumbs up opens its store page, a thumbs down opens a short feedback form.
What changed for privacy. On iPhone and iPad, nothing: the App Store still says Data Not Collected. On Android, the app now holds the internet permission, and the next section says why. Scanning, and everything the app works out from a code, still happens on the phone with no network needed.
Under the hood
The permission that came back
The Android release build of 1.2 removed the internet permission on purpose. Scanning never needed it, and without it, "works offline" was something Android enforced rather than something you had to take on trust.
Google Play Billing needs the network, so buying Premium on Android means the permission is back. And once it is back, something else can use it. ML Kit, the Google library that recognises the barcodes, reports usage metrics to Google. It never sends the camera images or what a code says. It sends things like the phone model, the app version and how long recognition took, and Google offers no switch to turn it off.
We tried to keep the metrics in anyway, by leaving the part of the library that sends them out of the build. ML Kit refers to it directly, so the release build would not compile without it, and a build that did would have crashed the moment the camera opened. That left the honest option: the metrics are listed in the Play Data safety form and in the privacy policy, in the same release that brought them. iPhone and iPad are not affected, because recognition there is Apple's own Vision framework.
A purchase with no server
Premium is a non-consumable purchase: bought once, owned for good. Apple and Google keep the receipt, and that is the whole trick. There is no account of ours, no server checking licences, and no record on our side of who bought it. The Premium screen says so under the button.
The app remembers the unlock on the phone, so at startup, with no network, it already knows what to show. Restoring is a different matter. On iPhone it asks Apple to sync, which can put an Apple ID sign-in on the screen, so the app restores only when you press Restore purchase, never on its own.
The paywall comes after you say what you want
Where a paid feature asks for the purchase decides whether it feels like a toll. Each one in 1.3 asks at a different moment, on purpose.
- A new folder opens its name field whether Premium is unlocked or not. The purchase comes on Create, and when it goes through, the folder you typed is made. Nothing has to be typed twice.
- Add photo asks before the camera opens. A photo taken first and then refused at the paywall would simply be thrown away.
- New scan does not appear at all until Premium is unlocked. A button that only leads to a price is not a feature.
Folders add up the other way
Every part of the new filter narrows the list: a kind of code, a period, scans with a note. A scan has to match all of them. Folders are the exception. Pick Work and Home and you want what is in either, since a scan is in both only if you filed it twice. So inside the folder choice, the rule flips from "and" to "or".
The folders you have open are also where new scans go, all of them. A scan made while you are looking at Work stays in the list you made it from, instead of dropping out of the filter the moment it is saved.
Your words, not ours
The first version of notes offered four ready-made phrases as chips. They were our words, and they never matched what anyone actually writes. Now the chips are your own earlier notes, most used first. They are worked out from the history each time, so nothing extra is stored, and a note you edit away stops being offered. A first-time user sees no chips at all, which beats chips that are wrong.
