横断/運用基盤 / 通知基盤
横断/運用基盤 / 通知基盤
概要
fincs サービスのプッシュ通知配信・未読バッジ集計の基盤レイヤ。Web ブラウザ・iOS PWA・Android PWA 上で動作するプッシュ通知の購読管理・配信処理・未読カウント集計をまとめて担当する。
主な構成要素:
- プッシュ通知購読管理: ユーザーがブラウザ・PWA で通知購読を ON にするとデバイスのトークンを取得・登録
- 2 経路の通知配信: Web ブラウザ・Android 向けの主経路と、iOS 向けの互換層経路(別アプリ「PushQuay」経由)の併用
- 通知設定(4 軸): 講座 / トークルーム / DM / メンションの 4 軸でユーザーが個別に通知 ON/OFF を制御可能
- 未読バッジ集計: 内部キャッシュとサーバーレス処理で未読数を効率的に取得
- OS バッジ更新: Service Worker が通知受信時に OS のバッジ(アイコンバッジ)を更新
主な利用想定は、新規トーク投稿・記事公開・配信開始・運営告知などの即時通知、未読カウントの集計と表示、iOS PWA での通知運用など。各機能側の通知発火条件(どんなイベントで通知するか)は機能側 PSD(トーク通知 等)を参照。
iOS は PWA 化が前提: iOS Safari ではブラウザ自体に通知機能の標準サポートがないため、ホーム画面追加で PWA として動作させた状態でのみ通知を受け取れる。PWA 化されていない iOS ユーザーには「PushQuay」という互換層アプリを経由して通知を届ける運用を提供。
通知トークンの定期再送: Web Push の通知トークンは一定期間(内部の想定では約 14 日)で無効化される前提のため、ブラウザ側で 1 時間ごと + 画面表示時に再送して有効性を維持する仕組みを持つ。
通知許可拒否後の復帰について: ユーザーが一度ブラウザで通知許可を拒否すると、サービス側からは再度の許可ダイアログを出せない。ブラウザ設定から手動で許可に戻す必要があるため、CS 案内で手順を提示する運用となる。
通知本文の長さ制限: トーク投稿などで本文が長い場合、通知に表示される本文は内部的に約 2KB で切り詰められる。全文は通知タップ後の本文画面で確認する。
利用シナリオ
シナリオ 1: 新規トーク投稿でプッシュ通知を受け取る
トークルームで他の会員・講師が新規投稿すると、プッシュ通知が即座にデバイスへ届く。Web ブラウザ・Android PWA は主経路、iOS PWA は同経路または互換層(PushQuay)経由で受信。
シナリオ 2: 通知購読 ON / OFF を切り替える
ユーザーがブラウザの通知許可ダイアログで許可 / 拒否を選択することで、購読を切り替え。許可済みの状態でも、講座 / トークルーム / DM / メンションの 4 軸で個別に通知設定を ON / OFF できる。
シナリオ 3: iOS でホーム画面追加 → PWA 化 → 通知受信
iOS ユーザーがホーム画面追加で PWA 化することで通知機能が利用可能になる。PWA 化していないと iOS では通知が届かない仕様のため、CS で「iOS で通知が来ない」相談時はホーム画面追加を案内する。
シナリオ 4: 未読バッジの表示
未読のトーク・通知がある状態でアプリを閉じると、OS のホーム画面アイコンに未読数のバッジが表示される。ユーザーが未読を確認すると自動的にクリアされる。
よくある失敗ケース
- 通知許可拒否後の復帰不可: ブラウザ側で一度拒否すると、サービス側からは再許可ダイアログを出せない。ユーザー本人がブラウザ設定から手動許可へ戻す必要がある
- PWA 化していない iOS で通知が来ない: iOS Safari は標準で通知非対応。ホーム画面追加 + 互換層経由が必要
- トークン無効化による通知途絶: 14 日経過したまま画面を開かないと、トークンが無効化されて通知が途絶する。画面を開いてトークン再送が走れば復帰
- OS バッジが古い表示: 内部キャッシュの整合性問題で、実際の未読数とバッジ数値がずれるケース。整合性メンテナンス(運営にお問い合わせください のセレクション既読再同期等)で対応
利用可否(権限別)
通知基盤は基盤機能のため、ユーザー権限軸での直接の操作は無い。機能側の通知設定は トーク通知 を参照。
| 操作 | 会員 | 講師 | 運営アドミン |
|---|---|---|---|
| プッシュ通知購読 ON / OFF | ○ | ○ | ○ |
| 通知設定(講座 / トークルーム / DM / メンション) | ○ | ○ | ○ |
| 受信解除(プッシュ) | ○ | ○ | ○ |
機能詳細(ふるまい)
プッシュ通知の購読
- ユーザーが画面を開いた際にバックグラウンドで Service Worker が起動 + 通知トークン取得 → サーバーに登録
- 主経路(Web Push)と互換層経路(PushQuay)の両方を並行して登録する仕組み
- ユーザーがどちらの経路でトークン登録しているかに依存して、どの経路から通知が届くかが決まる
iOS の PushQuay 経路
- iOS Safari は PWA 化しないと通知機能を利用できない
- PWA 化していない iOS ユーザー向けに、別の互換層アプリ(PushQuay)経由で通知を受け取る経路を提供
- 互換層アプリ側でトークン登録 / 解除を行う運用
通知設定(4 軸)
ユーザーが 4 軸で個別に通知 ON/OFF を制御可能:
- 講座単位: 特定講座の通知をまとめて ON/OFF
- トークルーム単位: 講座内の特定ルームの通知のみ ON/OFF
- DM 通知: ダイレクトメッセージの通知 ON/OFF
- メンション通知: 自分が言及された投稿の通知 ON/OFF
これらの設定は通知配信の対象判定と、未読カウントへの反映に使われる。
未読バッジ集計
- 内部キャッシュ(ブラウザ側 IndexedDB)と、サーバーレス処理(クラウド関数)の組み合わせで未読数を効率的に取得
- BE への直接負荷を抑えつつ、リアルタイム性を確保する構成
- 大量のトークルーム・コンテンツに対する一括未読チェックを効率化
Service Worker と OS バッジ更新
- Service Worker が通知イベントを受信
- 受信時に通知を表示し、内部の未読カウントを更新
- OS のホーム画面アイコンバッジ(数字バッジ)を更新
通知配信の本文長制限
- 通知本文の長さは内部仕様により約 2KB で切り詰め
- 通知タップ後の本文画面では全文を表示
関連ドキュメント
- 関連 PSD:
- トーク通知 — トーク通知
- 横断/運用基盤 / PWA — PWA / Service Worker
- 横断/運用基盤 / メール配信エンジン — メール配信エンジン