> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 通知とプッシュ

アプリ内の受信トレイ、チャネル設定、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 のいずれかとして報告します — そしてコールドとウォームの両方で通知をタップします。オフに切り替えたときにエラーが表示される場合、サーバー側の登録解除が失敗しており、成功するまでデバイスは登録されたままです。

[開発ビルドを作成する](https://supastack.dev/ja/docs/mobile/eas-setup.md)


## 次へ

[使用量とクレジット](https://supastack.dev/ja/docs/mobile/usage.md)
