Skip to content

feat(mobile/android): end-to-end push notifications — FCM registration, POST_NOTIFICATIONS, and banner display #6092

Description

@Vaughan-g-aus

Motivation

Buzz on Android never shows an OS notification. A member who backgrounds the app learns about a DM or an @mention only when they reopen it. #4402 reports the same gap from the user side: the app stops receiving messages in the background and needs a restart.

The iOS half is already in flight — PR #1924 adds .alert/.badge/.sound authorization, registerForRemoteNotifications(), and a NotificationService extension. Android has no equivalent, and no client-side Android issue is filed for it.

Confirmed by reading main on 2026-08-17:

  • mobile/pubspec.yaml — no firebase_messaging and no flutter_local_notifications. Android has no push path and no local-notification path.
  • mobile/android/app/src/main/AndroidManifest.xml — no POST_NOTIFICATIONS permission (required since Android 13), no FCM service, no receiver.
  • Nothing under mobile/lib creates a kind:30350 push lease.
  • crates/buzz-push-gateway/src/ ships apns.rs with no FCM transport. That server half is feat(push): add an Android FCM transport profile to the NIP-PL push gateway #3229.

Proposed solution

Android client work, sized to land after #3229:

  1. Add an FCM dependency and register the device token at startup.
  2. Publish a NIP-PL kind:30350 push lease per installation, mirroring the iOS path in PR Add NIP-PL iOS push notification foundation #1924.
  3. Declare POST_NOTIFICATIONS in the manifest and request it at runtime on Android 13+.
  4. Create a notification channel and display a banner on wake for DMs, @mentions, and thread replies the user is in — matching the slot rules already used by desktop in desktop/src/features/notifications/.
  5. NIP-PL carries a wake signal only, so banner text must come from the events fetched after reconnect, never from the push payload.

Alternatives considered

Additional context

Closest existing issue: #4657 — "Mobile client never registers for push". It covers the transport gap for both platforms. This issue is the Android client half plus the display layer, which #4657 does not specify.

Related:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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