docs(android): plan M7 Part 2 — app UnifiedPush push notifications #21
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/android-m7-part2-plan"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
Plans M7 Part 2 (the Android app's push-notification integration) in
docs/android/PLAN.md, now that Part 1 (backend) landed —RunicGateway/website#78merged 2026-07-20. Records the plan before coding, per the workspace convention. Docs-only; no code.Changes (
docs/android/PLAN.md)websitesource): the exactPOST/GET/DELETE /auth/me/devices+GET|PUT /auth/me/notifications/*shapes, the eight-stream catalog, and the content-free{ stream, ref }wire tickle. Ten work items (deps/manifest,core/push, Retrofit APIs + DTOs, endpoint↔backend lifecycle mirroring the M3 token teardown, the Notifications settings screen, deep-links, menu, permission UX, tests). Flags the cross-repoNTFY_ALLOWED_ORIGINSdependency for end-to-end testing. No backend work in Part 2.Transport decision (per project owner)
The app embeds its own UnifiedPush distributor — ntfy is only the relay server, no second app installed, no Google Play Services. A foreground-service persistent connection to the shard's ntfy (reusing the M2
ShardStreamClientOkHttp/reconnect pattern) subscribes to the app's own random topic; the endpoint registered with the backend is that topic URL, exactly whatPOST /auth/me/devicesexpects. APushTransportseam keeps the future FCM Play flavor cheap. Recorded the accepted tradeoff (an always-connected foreground service for instant delivery, as ntfy's own app does).AI disclosure
Authored with Claude Code (Claude Opus). Commits carry a
Co-Authored-By: Claudetrailer per org policy.🤖 Generated with Claude Code