Dear Privacy Aware Android App Devs - Please Use UnifiedPush

06 October 2021

I want to make a call out that I think is needed. Those of us who use "De-Googled" Android phones will be well aware that if you cut out Google Play Services, you generally won't get any push notifications. This makes sense, as most apps out there simply register with FCM (Firebase Cloud Messaging, formally known as Google Cloud Messaging) to provide the push notifications.

For apps distributed on the Google Play Store, this is understandable. FCM is easy to integrate with, well known and since the app is being distributed on the Play Store, obviously the user is already running Google Services and therefore isn't going to care where the notifications come from.

However, if (like myself) you run a De-Googled Android OS, like CalyxOS, GrapheneOS or LineageOS without the GAPPS package, Google Play Services will be (mercifully) absent and along with that, of course, FCM and push notifications. Services like MicroG are available to help mitigate this, but this still means sending data to Google servers.

In some cases, the lack of notifications is actually a good thing, as suddenly you're not getting spammed with what are somewhats useless and distracting notifications. Other times, this is rather inconvenient, especially if you want those instant messenger notifications to come in right after they are sent. Some privacy-aware app developers have worked around this; notably the F-Droid version of the Tutanota email app implements it's own system for notifications. Likewise K-9 Mail and Signal.

This is admirable, and appreciated, however if every app started doing this we end up with the same problem that push notifications via FCM was supposed to fix - that is, having a single push notification server to register services with, allowing apps to sleep in the background to maximise battery life. If you have a bunch of apps having to wake up regularly and polling for new notifications, battery life suffers.

Ideally, the user would have a choice of more than one push provider. Because of the nature of push technology, this isn't as simple as installing some other app on your device to replace FCM. Some of us, especially those getting more and more into self-hosting, would love to be able to host our own push notification servers. Those self-hosted server options are available, but without the apps supporting them, they are useless.

UnifiedPush

UnifiedPush is a protocol and small collection of tools for Android and Linux that, as their site says, "let the user choose how push notifications are delivered. All in a free and open source way".

It uses what it calls "Distributors" to give notifications for apps that support it. For example, it currently has three distributors available - FCM (Google Firebase), Gotify and what it calls NoProvider2Push, a hardcore and experimental way of sending notifications without a push provider, but requires a static IP address on your device.

Of those three, two are the most obvious options - FCM and Gotify.

We already know about FCM, it's ubiquitous and the standard that we've already mentioned. Gotify on the other hand is a well known self-hosted push notification server. For those of us who would want to self-host or know someone who would host it for us, this is the logical replacement for FCM.

What this means is if developers code their applications to be integrated with UnifiedPush, they not only can use FCM as they would have already thanks to the UnifiedPush FCM Distributor, but then users would also have the choice of something like Gotify. Gotify is in fact the default provider on UnifiedPush according to the webpage.

I imagine with increased adoption the distributor options would also increase in number.

But for now, even having the option of Gotify would be a huge boon to those of us wanting to retain reliable and efficient notifications and not have to send data to Google servers. Instead of apps having to exclusively code in support for alternatives such as Gotify, coding in UnifiedPush should make it all easier on the devs too, as it provides an abstraction that allows the Distributors to take care of the rest.

The FCM Distributor is also embedded in UnifiedPush and the website states:

Some applications using UnifiedPush installed from the Play Store automatically use Google’s Firebase Cloud Messaging if no UnifiedPush Distributor is detected.

So, there's nothing to lose here for developers, and a lot to win for privacy-aware users.

Currently Supported Apps

Currently, only four applications implement UnifiedPush. As of writing, this is:

And then a couple of apps currently in progress with UnifiedPush support:

Time to Act

I say we try to spread the word and get this to change. Looking at the UnifiedPush GitHub page, development looks very active on the project itself, so the time is now to start implementing, testing and seeing about finally giving users an option that doesn't mean settling for sending data to Google.