M1 Refresh: Mobile Notifications Inbox
Product proposal for approval of added scope to the previously approved Milestone 1: https://openedx.atlassian.net/wiki/x/BoCDhQE
Overview
This document covers the progress of the original, approved Push Notifications in Mobile Apps proposal (Push Notifications in Mobile Apps ) and proposes to complete the original approved scope of work (Milestone 1:
Push Notifications | M1: Discussions Notifications · Issue #455 · openedx/platform-roadmap ).
The previous work for notifications in the mobile apps was halted after some progress. The purpose of this document is to answer:
what was the scope in the originally approved Milestone 1 (M1)
what has been completed to this point
what needs to be delivered to finish the approved M1 work
what are the implementation details
Previous Work
The previous effort to introduce a mobile notifications inbox to the mobile app was proposed in May 2025. This proposal was approved through Milestone 1 (M1). Milestone 1 was scoped to include:
Discussions-related notifications
A learner facing notification inbox and inbox settings
This initial work was intended to be push-provider-agnostic. The target implementation used the edx-ACE channel to route notifications through configurable ACE push channels, with the current FCM-backed path available when Firebase configuration is present.
The approved plan, though it mentioned “push notifications” by name, did not include phone-tray push notifications, and was initially scoped to just a mobile inbox.
Completed to Date
The M1 scoped work was halted after some progress. To date, the following has been implemented:
openedx-platformrepo PR
feat: send mobile push notifications by jawad-khan · Pull Request #36272 · openedx/openedx-platform . The merged platform PR established the mobile notification delivery foundation: Open edX can register mobile device tokens and route selected notification events through the platform notification system into the ACE push channel path.The provider path is FCM-backed: the mobile token registration endpoint supports FCM, and ACE push configuration can register Firebase-backed delivery when Firebase credentials are configured. Another push provider can be configured.
Merged iOS work includes:
Push notification and deep-link abstraction support through
PushNotificationsManager, provider/listener protocols,DeepLinkManager, andPushLink.Native deep-link and push-navigation flow, including discussion route support.
Firebase Cloud Messaging integration, including FCM token handling, token sync to
/api/mobile/v4/notifications/create-token/, push receipt handling, and notification tap routing.Analytics tracking for push notification permission status.
Merged Android work includes:
Braze push capability using Firebase Cloud Messaging.
External deep-link routing from push notifications to native app screens, including discussion route support.
Firebase Cloud Messaging integration, including token refresh, token sync to
/api/mobile/v4/notifications/create-token/, push receipt handling, and notification tap routing.Branch deep-link handling for Braze-originated push notifications.
Note: there is a broader Android plugin architecture; however, the current push handling remains more hard-wired than the iOS provider/listener model.
Not Yet Completed
The following items from the originally approved M1 proposal have not yet been completed:
Mobile inbox and notification settings UI
Android: push provider/listener extensibility comparable to the iOS
PushNotificationsManagerprovider/listener model.
Web Notifications: Current State
Since the M1 proposal, notifications have been introduced to the web. Web notification types currently include discussion, ORA/grading, and course updates.
Web seen/read semantics are implemented as below:
Seen: if a user clicks the notification icon, notifications for the selected app/tab are considered seen.
last_seenis updated, and the count and red circle on the notification icon are removed. Grouping is platform-owned and only groups into existing rows wherelast_seenis null; marking a row seen closes its grouping window.Read: if a user clicks a notification row, it is marked as read;
last_readis updated for the notification and visually, the styling changes from ‘unread’ to ‘read’ styling.last_readis not strictly a click signal because it can also be set by mark-all-read behavior.
M1 Revised Scope
Proposed M1 Scope
As part of this work, we propose keeping the scope of the previously approved M1 with the addition of Course Update and ORA notifications as default enabled for the mobile apps. The remaining work includes:
Introducing a mobile inbox UI
Introducing a mobile notification settings UI accessible both through the mobile inbox and from the Profile>Settings page.
Introducing a notification icon to the app level “Learn” page
Android: Removing hard-coded Braze references and implementing a similar plugin architecture for custom notification providers as already exists in iOS
For the mobile inbox, we plan to have a single inbox where both discussion and course update notifications will exist in one view without tabs. This differs from the current web tray which has tabs for notification type (ie: Discussion, Updates, Grading).
Note: push notifications to the iOS or Android notification tray were not part of the original scope; M1 was focused on in-app inbox notifications. We are keeping phone-tray push notifications out of scope but plan to include push in the second milestone (defined below).
Open Questions & Recommendations
Before development begins, there are some open product questions that require confirmation:
Q1: Should we introduce a new setting type for the mobile inbox?
Currently the settings are web , email , push , email_cadence , and non_editable. push should affect the eventual settings for notifications get sent to the iOS / Android notification tray. Separate settings for push and mobile-inbox reflect differing interruption levels. In-app inbox notifications are lower interruption as they appear for learners while using the app. Push notifications are an interruptive channel that appear as soon as sent. Given this, we recommend combining the web and mobile tray notifications into a tray setting. (previous recommendation kept for the record: Given this, we recommend adding a mobile_inbox setting.)
Thoughts on a mobile_inbox setting vs combining into a tray setting:
Option A: combined
traysetting:Pros: easy to understand, reduces # settings for learners to grok, easy to distinguish between inbox and push.
Cons: some notifications may not be actionable on mobile: two methods:
Make un-actionable notifications un-clickable. con: confusing interaction. OR
Hide un-actionable notifications on mobile. con: would we hide the corresponding setting in the
trayfor mobile? is that more confusing to see the same setting but they appear different on web vs mobile?
Option B: add
mobile_inboxsetting group:Pros: solves some of the complexity above. more control for users
Cons:
two settings for mobile is confusing!
For settings page on web: would we surface all setting groups? then it becomes very heavy: four columns, four toggles: web, email, push, mobile inbox.
Q2: Should mobile and web share notification read and seen state?
We recommend sharing row-level last_seen and last_read state for the same notification row across web and mobile. This means that if a learner marks a notification seen or read in the mobile inbox, that same notification row is also seen or read for web.
Implementation Plan
After the open questions are resolved, Schema plan to contribute this work in advance of the Willow release.
Future Milestones
Milestone 2: Push Notifications
In the previous proposal for mobile notifications (Push Notifications in Mobile Apps ) the M2 scope was around learner motivation. Before adding learner motivation notification types, we propose delivering OS-level push notification behavior as the next milestone.
Milestone 3: Additional Improvements
After delivery of push notifications, we plan to introduce additional improvements. Potential improvements include: tabbed navigation following the web-notification tray pattern, additional notification types, improved grouped row interactions.