I submitted the Tagfalter app to Google Play, with push notifications that stay in Tyrol
Twelve changes sent for review
Late one afternoon I pressed ‚send for review‘ in the Google Play Console for the Tagfalter app. One production release, release notes in German and English, twelve changes in the listing, countries Austria, Germany, Switzerland and Italy. Google now reviews it, and I do not know how long that takes.
Tagfalter is our managed website and shop for small businesses in Tyrol. The sites run on our hardware in Tyrol, the same containers I write about in the other posts here. A shop owner who sells through a Tagfalter site wants to know when an order comes in, on the phone, without opening a mailbox every hour. That is what the app does: it shows the order as a notification, and a tap opens the app.
Why the app keeps its own connection open
Almost every Android app delivers notifications through Firebase Cloud Messaging. That is a Google service, and the content of each message passes through Google's servers. For an order notification that content is a customer's name, what they bought, the amount. I did not want that to leave our infrastructure, so the app does something older and simpler: it keeps a long-lived connection to a small open-source push relay (ntfy) that runs on our hardware in Tyrol. When a shop gets an order, the site hands the message to our relay, and the relay hands it to the phone. Google is never in between.
The phone runs Android, which is Google's. The app comes from the Play Store, which is Google's. For the shop owner, what their customers bought stays with the company that hosts their shop, in Tyrol.
What the choice cost
A connection that stays open in the background is a ‚foreground service‘ in Google's terms. Firebase gets a free pass. Everything else is ‚special use‘, and Google wants a written declaration and a video that shows why the app needs it.
I recorded the video on a test phone: open the app, go back to the home screen, the persistent ‚Tagfalter · Verbunden‘ notification in the status bar, then an order placed on one of our test sites arriving in the background, then a tap that opens the app. I put the clip online as an unlisted video, wrote the declaration text and submitted both.
One thing I found on the way: Google's verification of our developer account had been complete for days. It only ever showed up in the little bell in the console, no mail was sent, and I had been waiting for something that was already done. A mail about declaring our trader status needed no action either, the account already said trader.
How the release was built
The release itself comes out of our own GitLab pipeline. The build job publishes the signed package as a release asset, and I created the Play release from that asset, so the version in the store is the version the pipeline built, nothing hand-made on a laptop. I committed the declaration text and the recipe for recording the video into the app repository. The next declaration, or a re-record after a change in the app, should take minutes and not an afternoon.
Where it stands
The Android app is in Google's review. Until it is through, the shop owners on Tagfalter still get their orders by mail, as before. The push relay runs in Tyrol and has been delivering to my own phone for a while, so I think the mechanism is fine, the open question is only Google's opinion of it. The iOS version is further behind: I have the signing material, the App Store submission is not started.