RORK LABEN
MAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますNATIVE — AR/LiDAR・Metalの3D・Dynamic Island・Live Activities・HealthKitなどネイティブ機能に踏み込めますPUBLISH — 2クリックでApp Storeへ公開できます。Rork Maxは月$200ですEXPO — 通常のRorkはReact Native(Expo)でiOS/Androidを同時生成し、無料から始められますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますPRICE — 無印Rorkの有料プランは月$25から。まず無印で作り、ネイティブ機能が要る段でMaxを検討できますMAX — Rork Maxが全Appleプラットフォーム向けのネイティブSwiftを生成。iPhoneからVision Proまで対応しますNATIVE — AR/LiDAR・Metalの3D・Dynamic Island・Live Activities・HealthKitなどネイティブ機能に踏み込めますPUBLISH — 2クリックでApp Storeへ公開できます。Rork Maxは月$200ですEXPO — 通常のRorkはReact Native(Expo)でiOS/Androidを同時生成し、無料から始められますPROMPT — プレーンな英語でアプリの構想を書くと、ストアへ配布できる動くコードが生成されますPRICE — 無印Rorkの有料プランは月$25から。まず無印で作り、ネイティブ機能が要る段でMaxを検討できます
記事一覧/開発ツール
開発ツール/2026-06-21上級

通知をタップしたのに目的の画面に飛ばない——Rorkアプリのルーティングを起動状態ごとに設計する

通知タップでアプリが起動したとき、目的の画面まで確実に届ける設計。killed / background / foreground の3状態と、ナビゲーション準備前のタップを取りこぼさない pending route の実装を解説します。

Rork430Expo89通知3ディープリンク6ルーティング

プレミアム記事

ある運用中のアプリで、サーバーから「注文が発送されました」というプッシュ通知を送ったときのことです。通知をタップすると、アプリは起動するのにホーム画面が表示されるだけで、肝心の注文詳細には飛んでくれません。手元の検証端末では問題なく動いていたので、原因の特定にしばらく時間がかかりました。

結論から申し上げますと、アプリが完全に終了した状態(killed)から通知タップで起動したとき、ナビゲーターがまだ準備できていないタイミングで遷移命令を出していたことが原因でした。命令は静かに無視され、エラーも出ません。

通知ルーティングのつまずきは、ほとんどがこの「タップした瞬間」と「画面を描ける瞬間」のズレに集約されます。今回は、その差を吸収する設計を、起動状態ごとに整理してご紹介します。

まず押さえるべき3つの起動状態

通知をタップしたとき、アプリがどの状態にあったかで、タップ情報の受け取り方がまったく違います。ここを混同すると、片方の状態でしか動かないコードになります。

起動状態アプリの状況タップ情報の取得元
killed(コールドスタート)プロセスが終了していたgetLastNotificationResponseAsync()
backgroundバックグラウンドに退避していたレスポンスリスナー
foreground表示中だったレスポンスリスナー

killed からの起動が厄介なのは、起動のきっかけになったタップがリスナーに届かないことがある点です。アプリが立ち上がってリスナーを登録する頃には、そのイベントはすでに過ぎ去っています。だからこそ、起動時に一度だけ「最後のレスポンス」を取りに行く必要があります。

逆に background / foreground では、アプリはすでに生きているのでリスナーが確実に発火します。

ルーティング情報は通知のdataに載せる

遷移先を決めるのは通知の本文ではなく、data ペイロードです。サーバーから送る通知に、行き先を構造化して載せておきます。

// サーバー側が送る通知ペイロード(例)
{
  "to": "ExponentPushToken[xxxxxxxx]",
  "title": "発送のお知らせ",
  "body": "ご注文の商品を発送しました",
  "data": {
    "type": "order",
    "id": "A-10293"
  }
}

typeid のように構造化しておくと、後でルートへ組み立て直すときに検証しやすくなります。data に完成済みのURL文字列を直接入れる方法もありますが、サーバーが送る文字列をそのまま遷移先に使うのは避けたいところです。理由は後半でご説明します。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
通知をタップした瞬間と画面が描画できる瞬間のズレを pending route で吸収する設計
killed / background / foreground の3つの起動状態それぞれで通知タップを確実に拾う実装
未検証のルートへ飛ばさないための許可リストと安全なフォールバックの組み込み方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-06-16
通知を「開かなくても片付く」ものにする — Rork アプリのインタラクティブ通知アクション設計
通知を長押しすると現れるボタンやテキスト入力。Rork で作った Expo アプリにこのインタラクティブ通知アクションを実装し、アプリを開かずに完了できる体験を設計します。バックグラウンド処理の落とし穴まで踏み込みます。
開発ツール2026-06-20
Rork の一覧が増えるほどスクロールで重複と欠落が出る——カーソルページネーションと再取得の状態設計
Rork が生成する素朴な offset ページネーションは、リストが更新されるたびに重複や欠落を起こします。カーソル方式の契約設計、取得状態を一つに束ねる usePaginatedList フック、失敗時の指数バックオフ再試行まで、本番運用で詰まらない一覧の作り方を実装中心に解説します。
開発ツール2026-06-20
Rork が直せるバグと自分で直すバグを見分ける — エクスポートコードのトリアージ手順
Rork が自力で直すバグと、エクスポートしたReact Native/Expoコードを自分で手当てすべきバグを切り分けるトリアージ手順を、動くコードとともに整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →