Push messages are an essential part of connected mobile devices. They are also one of the critical missing pieces in the open source Android ecosystem.
Until now, free Android apps would either need to implement their own push notification system, do without any push messaging or use the proprietary Google Cloud Messaging service.
In this talk I will introduce OpenPush, a free and open source, self-hosted and decentralized replacement for Google Cloud Messaging.
We expect both a long battery life and instant notifications from our mobile devices.
When implementing your own mobile push functionality you can usually optimize for either of these goals.
This is especially true if the user is running multiple applications which each come with their own persistent on-going connection for push notifications.
Wanting to combat the battery drain associated with maintaining multiple connections Google introduced the Google Cloud Messaging (GCM) framework which recently has become Firebase Cloud Messaging (FCM). Firebase Cloud Messaging relies on the availability of the proprietary Google Play Services Framework on an Android device. Using FCM also requires the inclusion of the proprietary FCM client library into open source Android apps like Signal, Wire or even Firefox, which makes them effectively non-free software which cannot be distributed via the fully free F-Droid software repository.
Additionally all push notifications delivered via FCM need to pass through Google's servers leaving a metadata trace, even if it's an empty wakeup event or if the content of the message is encrypted.
Decentralized, self-hosted systems like Matrix, Nextcloud or RocketChat currently still have a dependency on Google's infrastructure and Terms of Service for delivering push Notifications.
In this talk I'll present a self-hosted, free alternative push messaging implementation which can either run alongside or as a replacement to FCM.
The talk will give a general architecture overview as well as walk through the design and implementation challenges of a push messaging service.
Further I'll present how OpenPush can be used by different projects and discuss some additional ideas on how the wider ecosystem could look like in the future.