ブラウザ通知(Web Push)¶
StockClaw は、サインインしたあらゆるブラウザに対してシステムレベルの通知を送信できます——タブを開いていなくても、FLASH や ALERT のシグナルが着地した瞬間に。通知をクリックすると、その特定のシグナルに対してダッシュボードへディープリンクで戻ります。
得られるもの¶
- デスクトップ: macOS の通知センター、Windows のアクションセンター、Linux DE の通知。FLASH バナーは dismiss されるまでスティッキーのまま、ALERT は OS デフォルトで消えます。
- Android: ロックスクリーンバナー + 通知シェードの持続エントリ。
- iOS Safari: StockClaw を PWA としてインストール した後のみ——共有メニューから「ホーム画面に追加」、iOS 16.4 以降。標準の Safari タブは Web Push をサポートしません(Apple のルール)。
バナーをクリック:
- すでに StockClaw タブが開いていれば、そのタブにフォーカスしてそのシグナルへナビゲート。
- そうでなければ、そのシグナル上で新しいタブを開く。
いずれの場合も、ダッシュボードはそのシグナルカードへスクロールし、アクセントボーダーを約 2 秒フラッシュするので見つけやすくなります。
有効化¶
設定 → ブラウザ通知 → 有効化。フロー:
- StockClaw がオプトイン対象を確認する短い説明を表示。
- ブラウザがネイティブの許可プロンプトを表示——Allow を選択。
- StockClaw がブラウザのプッシュエンドポイントをバックエンドに登録。
- ボタンが 無効化 に反転。
サインインしたブラウザごとに個別に購読されます——スマホもラップトップも両方受信可能、または独立に片方だけも可能です。1 つのデバイスで購読解除しても他方に影響しません。
無効化 / 取り消し¶
- StockClaw 内: 設定 → ブラウザ通知 → 無効化。ワンクリック。そのブラウザで購読解除し、バックエンドに行のプルーニングを伝えます。
- ブラウザ全体: Chrome(または同等)のサイト権限 → StockClaw の通知を取り消し。サーバー側の購読行は次の配信試行時にプルーニングされます(プッシュサービスからの 404/410)。
iOS PWA インストール¶
iPhone / iPad で Web Push を受信するには:
- Safari で StockClaw を開く(iOS の Chrome はカウントされません——WebKit を使用しますが PWA 機能が少ない)。
- 共有 アイコン → ホーム画面に追加 をタップ。
- ホーム画面アイコンから StockClaw を起動(Safari から起動しない)。これでスタンドアロン PWA モードでアプリが起動します。
- 設定 → ブラウザ通知 → 有効化 へ。iOS が許可を求めます。
- アプリを閉じる。通知はロックスクリーンに届きます。
プライバシー¶
ペイロード内容は、VAPID と購読独自の P-256 キーを使ってバックエンドとブラウザ間でエンドツーエンド暗号化されます——中間のプッシュリレー(Apple、Google FCM、Mozilla autopush)はペイロードを読むことができず、ルーティングするだけです。購読(エンドポイント URL、公開鍵、ユーザーエージェント)は、他のすべてのテーブルと同じロウレベルセキュリティで push_subscriptions 行に保存します。他人のブラウザがあなたのシグナルを受信することはできません。
トラブルシューティング¶
「有効化」ボタンがグレーアウトして「非対応」と表示される:
- ブラウザに
PushManagerがありません(非常に古い Safari、古い Firefox)。ブラウザをアップグレードしてください。
「有効化」ボタンが「ブラウザでブロック済み」と表示される:
- 以前に許可プロンプトを拒否し、ブラウザが覚えています。URL バーの錠アイコン → 通知を「確認」にリセットしてから再読み込み。
購読したが通知が来ない:
- Celery ワーカーが動作している必要があります(パイプライン書き込み + 配信はそこで起きます)。
- FLASH と ALERT のシグナルのみプッシュされます。NOTE/FYI はダッシュボードのみ。
- サインインページのドキュメントにあるコンソールスモークテストを試して、自分にローカル通知を送って service worker が生きていることを確認してください。
シグナルごとに 1 つではなく Beat サイクルごとに 1 つの通知:
- 複数シグナルが一緒に着地したときの期待動作です——各々が独自のバナーになりますが、共通のアイコンを共有し、特定のシグナルへのディープリンクを共有します。