feature: Add "Mark as Read" action button to push notifications
Maintainers usually reply within 1 day
@DSingh0304 is already working on this.
Since Dec 9, 2025.
- #6867 by @DSingh0304 — closed without merging
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- android, ios, react-native, swift, typescript
- Domain
- mobile, mobile-dev
Research direction
Start with app/lib/notifications/push.ts and ios/ReplyNotification.swift, then inspect the existing REPLY_ACTION handler and app/lib/methods/readMessages.ts for the subscriptions.read API usage. Trace how notification payloads provide rid and how foreground and background actions are handled on both platforms. Done means a Mark as Read action calls subscriptions.read, clears the room notification and unread state, and works in foreground and background.
Written by the indexing model from the issue text.
Description
Feature Description
Add a "Mark as Read" quick action button to push notifications, similar to WhatsApp, Telegram, and Slack messaging apps. This would allow users to mark messages/rooms as read directly from the notification without opening the app.
Proposed Behavior:
-
When a user receives a chat notification, they would see action buttons including:
- Reply (already exists)
- Mark as Read (NEW)
-
Tapping "Mark as Read" would:
- Call the
subscriptions.readAPI endpoint - Clear the unread badge for that room
- Remove the notification from the notification tray
- Update the room's read status on the server
- Call the
This feature would work in both foreground and background states.
Motivation and Use Case
User Pain Points:
- Notification Overload: Users often receive many notifications during busy periods and want a quick way to triage them without opening each conversation
- Workflow Interruption: Currently, users must open the app and navigate to each room just to mark messages as read, which disrupts their current task
- Mobile UX Expectations: Modern messaging apps (WhatsApp, Telegram, Slack, Microsoft Teams) all provide this functionality, making it a standard user expectation
Benefits:
Faster notification management - One tap vs opening app → navigating to room → going back
Reduced app opens - Better battery life and performance
Better focus - Users can clear notifications without context switching
Cleaner notification tray - Reduces notification fatigue
Professional UX - Matches expectations from other enterprise chat apps
Implementation Ideas
Technical Implementation Plan:
Phase 1: iOS (Easier to implement)
- Add Notification Action (app/lib/notifications/push.ts)
const markAsReadAction = new NotificationAction(
'MARK_AS_READ_ACTION',
'background', // Can execute in background
I18n.t('Mark_as_read'),
false // Doesn't require text input
);
const notificationCategory = new NotificationCategory('MESSAGE', [
notificationAction, // Existing Reply action
markAsReadAction // NEW action
]);
-
Add Native Handler (ios/ReplyNotification.swift)
- Add handler similar to existing REPLY_ACTION
- Extract rid from notification payload
- Call subscriptions.read API endpoint
- Handle success/failure cases
-
API Integration
- Endpoint: POST subscriptions.read (already exists!)
- Parameters: { rid: string, readThreads?: boolean }
- Auth: Use existing RocketChat helper class
Phase 2: Android
Android requires custom notification channel configuration:
- Create notification action in Java/Kotlin
- Wire up to existing API methods
- Handle background execution
API Requirements:
Good news: The required API already exists!
- Endpoint: subscriptions.read (available since RC 0.61.0)
- Current usage: Already used in app/lib/methods/readMessages.ts
- No server changes needed
API Flow:
Notification Action → Extract rid → POST subscriptions.read { rid } → Update local DB → Clear notification
Edge Cases to Handle:
-
Network Unavailable:
- Queue action for retry when connection restored
- Or show brief error notification
-
Expired Auth Token:
- Attempt token refresh
- Gracefully fail if user needs to re-login
-
Multiple Notifications from Same Room:
- Mark all as read when action is triggered on any one
-
Encrypted Rooms:
- Works the same way (marks as read, doesn't affect encryption)
Is this feature available in the API or web version?
Available in API
Rocket.Chat Server Version
Any version >= 0.61.0 (subscriptions.read API available)
Rocket.Chat App Version
4.68.0
Device Name
All iOS and Android devices
OS Version
iOS 13+ / Android 7.0+ (notification actions support)
Additional Context
This is the feature i am talking about !!
- Dominant language
- TypeScript
- Stars
- 2.4k
- Forks
- 1.5k
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 29
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from RocketChat/Rocket.Chat.ReactNative
-
[IMPROVEMENT] Remove redundant `await` on synchronous `userPreferences.getBool` in `getUsersPresence`Possibly taken A pull request linked to this issue is open or already merged. Opentype: feature
Difficulty 1/5 Under an hour Newbie friendliness 92/100
RocketChat/Rocket.Chat.ReactNative#7737 ·
Maintainers usually reply within 1 day
-
UIKit modal: a viewSubmit response with no `type` field fails to close the modal on mobile (regression from #7057)Possibly taken @erikurt9 claimed this 106 days ago. Opentype: bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
RocketChat/Rocket.Chat.ReactNative#7503 · 3 comments · 1 reaction ·
Maintainers usually reply within 1 day
-
type: bug
Difficulty 1/5 Under an hour Newbie friendliness 86/100
RocketChat/Rocket.Chat.ReactNative#7437 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day
-
✅ tests 👷 ci type: feature
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
RocketChat/Rocket.Chat.ReactNative#7247 · 1 comment ·
Maintainers usually reply within 1 day
-
bug: goRoom navigates to broken RoomView after failed DM creation from searchPossibly taken @deepak0x claimed this 215 days ago. Opentype: bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
RocketChat/Rocket.Chat.ReactNative#7098 ·
Maintainers usually reply within 1 day
All issues in RocketChat/Rocket.Chat.ReactNative
Similar issues
-
bug
Difficulty 2/5 Half a day Newbie friendliness 68/100
amosblomqvist/learnharness#758 ·
Maintainers usually reply within 2 days
-
Change WorkspacesOpen
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
bitfocus/companion-module-renewedvision-propresenter-api#134 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
rcpch/digital-growth-charts-react-component-library#304 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
dsh-market/dsh-market#1210 · 1 comment ·
Maintainers usually reply within 1 day
-
good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
trustjonathan/STUDY-HUB#13 ·