はじめに

iOSアプリの開発において、外部からアプリを起動する「ディープリンク」の実装は、ユーザーエクスペリエンスに重要な要素です。例えば、以下のようなシーンで活用されます。

  • アカウント登録時: 本人確認メールのURLをタップしてアプリを起動し、認証を完了させる。
  • 決済完了後の戻り: クレジットカードの3Dセキュア認証などをブラウザで行った後、アプリの決済完了画面へ戻る。

しかし、このディープリンクが「特定の環境でだけ動かない」という事象に遭遇するケースがあるかと思います。今回は実際に遭遇した「Yahoo!アプリ」特有の挙動と、それを踏まえた安全なリンク設計について説明したいと思います。

1. 主要ブラウザでの確認だけでは不十分な理由

  • 開発・テスト段階では、Safari、Chrome、Edgeといった主要なブラウザでの動作確認を行い、問題なければ「完了」とすることが多いと思います。しかし、実際のエンドユーザーは様々なアプリからリンクをタップします。特に注意が必要なのが、アプリ内蔵ブラウザ(In-App Browser)です。

2. 調査事例:「Yahoo!メールアプリ」による遷移

あるプロジェクトで、エンドユーザーから「ブラウザからアプリが起動できない」という報告がありました。詳細なヒアリングが難しい状況でしたが、APIサーバーのリクエストログを調査したところ、ユーザーエージェントの情報からYahoo!メールアプリから起動していることが分かりました。

  • Yahoo!メールアプリの仕様
    • Yahoo!メールアプリなどの一部のアプリ内蔵ブラウザでは、セキュリティ上の理由から外部アプリの起動をホワイトリスト方式で制限しているという仕様があるようです。この場合、「カスタムURLスキーム(appname://…)」を用いた遷移がブロックされ、ユーザーはブラウザの画面から遷移ができない状態となってしまいます。

3. 解決策:確実な遷移を実現する「二段構え」の対応

このような問題に対して全てを網羅することは難しいですが、アプリへ誘導するために以下の「二段構え」の設計を行いました。

  • デフォルトではカスタムURLスキームによる自動遷移を行う
    • 通常のフローでは、ブラウザが開いた瞬間にJavaScriptでカスタムURLスキームを実行し、シームレスにアプリを起動させます。
  • ユニバーサルリンクを「手動リンク」として用意する
    • もし①の自動遷移がブロックされた場合に備え、画面上に「アプリが開かない場合はこちら」といったボタンやテキストを配置し、そこに ユニバーサルリンク(Universal Links / HTTPSのURL) を設定します。
    • ユニバーサルリンクは、Appleが推奨する標準的な仕組みです。アプリ内蔵ブラウザでも、ユーザーが明示的にタップすることで(OSレベルの制御により)制限を回避してアプリを起動できる可能性が高くなります。今回の「Yahoo!メールアプリ」ではユニバーサルリンクでのアプリ起動ができることを確認できました。当事象のように2パターン用意しておくことがリスク回避に繋がります。

まとめ

  • 主要ブラウザ以外も想定する: メールアプリやSNSアプリ内蔵ブラウザの存在を意識しておく。
  • リンクの二重化: 自動遷移(URLスキーム)+手動リンク(ユニバーサルリンク)で遷移できる可能性を高くする。

アプリ開発において、ディープリンクは動いて当たり前と思われがちですが、各ブラウザのポリシーが複雑に絡んでいますので、あらゆる環境のユーザーを想定して堅牢な実装を心掛けたく思います。