For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ja/docs/mobile/notifications.md (or send Accept: text/markdown).
通知とプッシュ
アプリ内の受信トレイ、チャネル設定、Expo プッシュパイプライン。
受信トレイとチャネル設定
通知タブは GET /api/notifications からワークスペースの通知を一覧表示し、通知 ID への PATCH で既読にします。「設定 → 通知」は、同じルートの preferences ビューへの GET と PATCH を通じて、共有のチャネル設定 — emailBilling、emailInvites、inAppProduct — を編集します。これは Web アプリが使うのとまったく同じコントラクトです。未読数はホーム画面に表示されます。
プッシュ用にデバイスを登録
サインイン時、およびワークスペースを切り替えるたびに、アプリは通知の許可を求め、アプリ設定から EAS プロジェクト ID を解決し、Expo プッシュトークンを取得して、POST /api/mobile/push-tokens に送信します。Android はデフォルトチャネルに高い重要度で登録されます。
登録は registered、permission_denied、unavailable のいずれかを報告し、例外は投げません — サインインがプッシュでブロックされることはありません。Expo Go とシミュレーターでは登録を完了できないため、実際のカバレッジには開発ビルドが必要です。トークンは SecureStore(supastack.push.token)に保持されるため、サインアウト時にセッション Cookie が破棄される前に登録解除できます。
サーバー側の配信とレシート
GET はメンバーのトークンを一覧し、POST はアクティブなワークスペースの下にトークンを upsert し、DELETE は取り消します。一覧と取り消しはユーザースコープのままなので、ワークスペースのないアカウントでもクリーンアップできます。各ユーザーは最大 20 個のデバイストークンを保持し、それ以上の登録では最古のものが削除されます。
アプリ内のワークスペース通知はすべてベストエフォートでプッシュもされます。サーバーは 100 件ずつのチャンクで Expo push API に送信し、ok チケットを記録し、DeviceNotRegistered のトークンを直ちに削除します。オプションのサーバー専用 EXPO_ACCESS_TOKEN はこれらの呼び出しに Bearer ヘッダーを追加し、ログに記録されることはありません。プラットフォームスケジュールが 30 分ごとにレシートを突き合わせ、古いチケットを掃除します — 他のプラットフォームスケジュールと同じスケジューラーの tick ドライバーが必要です。
# Optional server-only token for authenticated Expo push sends:
# apps/web/.env.local
EXPO_ACCESS_TOKEN=通知タップでアプリのルートを開く
送信側は Web のパスを data.href として添付します。アプリはそれを検証し — スラッシュ始まりの絶対パスのみ、長さに上限あり、トラバーサル不可 — 既知のパスをネイティブルートにマッピングします。たとえば /billing は /settings/billing に、/dashboard は /home になります。サインアウト中に届いたタップはバッファされ、サインイン完了後に処理されます。
検証とトラブルシューティング
開発ビルドでテストしてください。許可の付与と拒否、「設定 → 通知」でのプッシュの切り替え — 画面はこのデバイスを enabled、disabled、denied のいずれかとして報告します — そしてコールドとウォームの両方で通知をタップします。オフに切り替えたときにエラーが表示される場合、サーバー側の登録解除が失敗しており、成功するまでデバイスは登録されたままです。