Skip to content

Replace FCM with UnifiedPush #3435

@schklom

Description

@schklom

Official FCM is dependent on google blobs. On (partly or fully) degoogled Android, Google connection is often not preferred and sometimes not available in the first place (e.g. on AOSP, LineageOS without Google added to it, GrapheneOS without Google, Chinese phones like Huawei).

A FLOSS alternative is UnifiedPush, its concepts are explained on https://unifiedpush.org/developers/intro/.
It's like FCM but the push-server can be any server not just Google (in practice most use https://ntfy.sh or self-host it), and the push-distribution-app can be any compatible app (usually ntfy or Sunup, but can be any) instead of Google Play Services.
It can also fallback to using FCM if nothing else is available: https://unifiedpush.org/developers/ux/

When the user has a default or a single distributor, this operation is transparent to the user.

in which case no interaction is needed, or if the user chooses to use FCM https://unifiedpush.org/developers/implementations/#official-libraries

In my experience it is as reliable as FCM, leaves the choice to the user, and has a straightforward User Experience: https://unifiedpush.org/developers/ux/
The main benefit is when more than one app uses UP, but there are quite a few that already do, see https://unifiedpush.org/users/apps/

Encryption of the notification content is automatic:

The application generates a public key and an authentication secret it shares with its server with the endpoint. So the server can use these information to encrypt the notifications. UnifiedPush libraries generate these keys when they register for a new registration, and decrypt automatically incoming notifications. So it is pretty transparent for the developers.

Last, for the same reason you enable FCM to avoid battery-intensive connections and to get instant notification delivery, UP can do the same without Google and fallback to it for people who don't care.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions