与えられた:ウェブサイト、iOSおよびAndroidアプリケーション、登録されたurlscheme "myapp://"。
目標:ウェブサイトに、アプリがインストールされているiOS/Androidデバイスへのリンクを表示します。そのリンクをクリックすると、アプリが開き、特定のロジックが呼び出されます(アプリによって処理されます。基本的に、Appleの「ユニバーサルリンク」のようですが、Webサイトのリンクをシャドウイングすることはありません)。
セキュリティ上の制約があるため、アプリがインストールされているかどうかを検出するのは、WebViewCookieの魔法がないと面倒です。それを考えると、JavaScriptを介してアプリを開いて、それが失敗した場合にフォールバックリダイレクトを呼び出すための最良のアプローチは何でしょうか?
このスレッドの解決策: YouTubeやマップなどのiPhoneアプリにhttp +ドメインベースのURLスキームを登録することは可能ですか? iOS10では機能しません。 Androidについてはよくわかりません。
Androidでもこのアプローチを使用できますが、AppleはiOS9.2で変更を加えたため、iOSデバイスでは基本的に役に立たないことを意味します。
これまでこれが行われていた方法は、window.locationを必要なカスタムURIパスに設定することにより、Javascriptでアプリを開こうとすることでした。
window.location = “imdb://title/tt3569230”;
これに伴う問題は、アプリがインストールされていない場合、「ページを開くことができません」というエラーが表示されることです。みなさんもご覧になったと思います。ディープリンクの悩みの種です。 iOS7とiOS8の間、これを回避することができた輝かしい時期がありましたが、黄金時代は過ぎ去りました。
これを回避するには、AppStoreにリダイレクトするページにJavascriptを追加する必要がありました。このようにして、ユーザーに画面上のエラーが残されることはありませんでした。
window.location = 'imdb://title/tt3569230';
setTimeout(function() {
window.location = 'itms-apps://iTunes.Apple.com/us/app/imdb-movies-tv/id342792525'
}, 250);
アプリがインストールされると、以下のモーダルが表示され、アプリを開くかどうかをユーザーに確認します。
IOS 9では、AppleOpen in "[app]"モーダルがJavascriptから変更されました。 blockingモーダルからnon-blockingモーダルカスタムURIスキームへのJavascriptリダイレクトを介してアプリを開くために、モーダルはJavascriptの実行をブロックしなくなり、その結果、App Storeへのフォールバックリダイレクトはユーザーが実行できる前にすぐに実行されます「開く」ボタンをタップします。
Branch.io (完全な開示:私はBranchチームに所属しています)で、これがiOS 9.2ベータ版で提供されるのを見て、Appleレーダー(バグレポート)と影響力のあるパートナーは、リリース前にそれを解決するようにAppleを動機付けることができます。iOS開発者にとって残念なことに、そうではありませんでした。ユニバーサルリンクを採用します。
どこでも機能する単一のリンクを作成する唯一の方法(アプリがインストールされている場合はアプリへのルーティング、インストールされていない場合はWeb URLのフォールバックを含む)には、iOSでのユニバーサルリンクの使用が含まれている必要があります。もちろん、ユニバーサルリンクはiOSのどこでも実際にはサポートされていないため、カスタムURIスキームが依然として必要な特定のEdgeケースがあります(ChromeとGmailが2つの大きな例です)。これらを検出し、カスタム処理を構築する必要があります。
ほとんどの企業には、フルタイムのエンジニア(または2人)をこれに専念させるためのリソースがありません。そのため、Pinterest、Tinder、Airbnb、Jet.com、Yummlyなどはすべて のようなリンクプラットフォームを採用しています。 Branch.io またはFirebase DynamicLinks。