feature request: in-app notification sound
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 48/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- react-native, typescript
- 領域
- mobile
調査の方向性
まず、ルーム設定が rooms.saveNotification から audioNotificationValue をどのように提供しているか、またモバイルクライアントのどこでアプリ内通知が発生するかを追跡します。プリセット、ローカルダウンロード、選択、再生をどのように組み合わせるかを決める前に、既存のサウンドアセットと通知フローを確認します。完了の条件は、有効なアプリ内通知に対して選択したルームサウンドが再生され、必要な場合はバンドルされたフォールバックが使用されることです。
索引モデルが issue の本文から書いたものです。
説明
Feature Description
Currently, the mobile application allows users to select a notification sound (audioNotificationValue) which is successfully saved on the backend via rooms.saveNotification . However, this preference is not respected by the mobile client when in-app notifications are triggered.
This feature proposes enabling the mobile app to play the selected notification sound for in-app messages, ensuring that user preferences are fully applied.
The implementation should:
- Read the audioNotificationValue from room settings
- Map it to corresponding sound asset
- Trigger playback when a valid notification event occurs
Motivation and Use Case
Why this matters
Users expect their notification settings to actually affect behavior. Right now:
- Changing notification sound has no effect in the mobile app
- This creates confusion and inconsistency between backend settings and user experience
Use cases
- A user sets different sounds for different rooms → helps identify message source instantly
- A user prefers subtle vs loud sounds → improves usability in different environments
- Teams relying on notifications → need quick auditory distinction
Impact
- Fixes a broken UX expectation
- Aligns mobile behavior with backend/web capabilities
- Improves personalization and usability
Implementation Ideas
-
Fetch Presets — Backend returns a list of preset sound names (e.g.
["chime", "bell", "ping"]). Each name maps to a downloadable URL, either constructed on the client or returned directly by the API. -
Download on Demand — Each preset is shown with a Download button. On tap, the file is downloaded to
documentDirectory/notification_sounds/<name>.mp3viaexpo-file-system. Download is skipped if the file already exists locally. -
UI States — Each preset tracks its own state:
not downloaded→downloading→downloaded→selected. User can also preview before selecting. -
Private Storage — Files are saved to
documentDirectory, which is sandboxed to the app on both iOS and Android. Not visible to other apps or the device media library. -
Persist Selection — Active sound preference is saved to
AsyncStorageor the existing room settings store as the local file path. -
Playback — On in-app notification trigger, resolve the saved path and play via
expo-av. Falls back to a bundled default if the file is missing or not yet downloaded.
Is this feature available in the API or web version?
Available in Web Version
Rocket.Chat Server Version
No response
Rocket.Chat App Version
No response
Device Name
No response
OS Version
No response
Additional Context
No response
- 主要言語
- TypeScript
- スター
- 2.4k
- フォーク
- 1.5k
- 平均マージ
- 1日 15時間
- マージ済み PR(30日)
- 29
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
RocketChat/Rocket.Chat.ReactNative のほかの issue
-
[IMPROVEMENT] Remove redundant `await` on synchronous `userPreferences.getBool` in `getUsersPresence`対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンtype: feature
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
RocketChat/Rocket.Chat.ReactNative#7737 ·
メンテナーはふだん 1 日以内に返信
-
UIKit modal: a viewSubmit response with no `type` field fails to close the modal on mobile (regression from #7057)対応中かも @erikurt9 が 106 日前に担当しました。 オープンtype: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
RocketChat/Rocket.Chat.ReactNative#7503 · コメント 3 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
type: bug
難易度 1/5 1時間未満 初心者へのやさしさ 86/100
RocketChat/Rocket.Chat.ReactNative#7437 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
✅ tests 👷 ci type: feature
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
RocketChat/Rocket.Chat.ReactNative#7247 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug: goRoom navigates to broken RoomView after failed DM creation from search対応中かも @deepak0x が 216 日前に担当しました。 オープンtype: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
RocketChat/Rocket.Chat.ReactNative#7098 ·
メンテナーはふだん 1 日以内に返信
RocketChat/Rocket.Chat.ReactNative の issue をすべて見る
似ている issue
-
Bug: Broken RTL / BiDi text rendering when mixing Persian (Farsi) with English or numbers対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンbug
難易度 2/5 半日 初心者へのやさしさ 68/100
amosblomqvist/learnharness#758 ·
メンテナーはふだん 2 日以内に返信
-
Change Workspacesオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
bitfocus/companion-module-renewedvision-propresenter-api#134 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
rcpch/digital-growth-charts-react-component-library#304 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
dsh-market/dsh-market#1210 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
trustjonathan/STUDY-HUB#13 ·