正直なところ、これを自分で実装するのはちょっと面倒です。多くの厄介なエッジ ケースなしにすべてを処理する簡単な方法はありません。最も顕著なのは、ユーザーがアプリをインストールしていない場合に表示される「ページを開くことができません」というエラーです。iOS 9 までは、合理的な基本実装は JavaScript を配置していました次のように、サイトの専用リダイレクト ページにリダイレクトします。
setTimeout(function() {
window.location = "https://yourdomain.com";
}, 25);
// If "yourapp://" is registered, the user will see a dialog
// asking if they want to open your app. If they agree, your
// app will launch immediately and the timer won't fire.
// If not installed, you'll get an ugly "Cannot Open Page"
// dialogue and your fallback page will open when the timer expires.
window.location = "yourapp://";
残念ながら、これでも「ページを開くことができません」というエラーが表示されますが、最近まで、このスクリプトのより微妙なバージョンを使用することで、かなりユーザー フレンドリーな方法でこれを回避することができました。悲しいことに、Apple は iOS 9.2 アップデートでそれを故意に壊したため、カスタム URL スキームは、アプリがそのデバイスに既にインストールされていることが確実でない限り、ディープ リンクには実際にはほとんど役に立ちません。Apple は明らかに Universal Links の採用を可能な限り推し進めようとしています。
最善の解決策は、カスタム URL スキーム リンク (インテリジェントな JavaScript リダイレクトを使用) と Apple の新しいUniversal Linksを組み合わせることです。ユニバーサル リンクを使用すると、通常の http:// URL を Web サイトのページに使用できます (このページは、「ページを開くことができません」エラーを引き起こすカスタム URL トリガーなしで、目的のフォールバック Web ページへの単純なリダイレクトである可能性があります)。これは傍受されます。インストールされている場合は、アプリに直接送信されます。残念ながら (ご指摘のとおり) Universal Links は iOS 9 以降でのみ機能し、多くのアプリ内で開いた場合はまだ機能しないため、すべてのユーザーに確実なエクスペリエンスを提供するには、多くのエッジ ケースの処理が必要です。
これは処理するのが非常に多いため、 Branch.ioのような無料のサービス(完全な開示: 私はチームと協力しています) がすべての技術的側面を処理するのが最善の選択肢かもしれません。Branch サービスを使用したアプリの例 (eBay からのいくつかを含む)は、こちら にあります。