web-dev-qa-db-ja.com

iOSのユニバーサルリンクとディープリンク(URLスキーム)

私が読んでいるように、iOS 9はユニバーサルリンクを導入しました。 Appleの App Search Programming Guide の「Support Universal Links」セクションでは、これはURLスキームとのディープリンクとはまったく異なると述べていますが、このトピックについては完全に明確ではありません。

  • ユニバーサルリンクとURLスキームの実際の違いは何ですか?ユニバーサルリンクは、Webサイトのハイパーリンク、およびメールアプリまたはメッセージアプリ専用のものですか?
  • ユニバーサルリンクはURLスキームを置き換えますか?
  • ユニバーサルリンクはディープリンクの一種ですか?
34
AppsDev

ユニバーサルリンクは、ブラウザーでWeb URLリクエストを開くのではなく、特定のアプリにWeb URLリクエストを送信するiOSの機能です。

URLスキームは、特定の状態で開くアプリの機能であり、URLで記述され、開発者がコードで処理します。

「Cool App」というアプリがあり、url-scheme「coolapp」を登録しているとします。また、アプリには「素敵なガジェット」や「素敵なもの」などのさまざまな領域があります。これで、リンクlink _coolapp://Nice-gadgets_でアプリを開くことができます。 Niceガジェットセクションでアプリを開くには、 application(_:openURL:options:) メソッドを実装し、この中でリクエストされたURLを検出し、アプリにリクエストされたView Controllerを開かせる必要があります。

同時に、_www.coolapp.com_というWebサイトがあります。 iOSデバイスを使用してブラウジングしているときに、サイトへのリンクに遭遇した場合、_www.coolapp.com/Nice-gadgets_と言って、リンクを開くと、ブラウザーで開きます。ユニバーサルリンクを有効にすると、代わりにURLをパラメーターとして指定して application(_:continueUserActivity:restorationHandler:) メソッドを呼び出してアプリを開きます。ここから、URLスキーム処理と同じロジックを使用して、要求された状態でアプリを開くことができます。

それで、ユニバーサルリンクはURLスキームを置き換えますか?私はそれを疑いますが、彼らは素敵な方法でお互いをcompめようとしています。

ユニバーサルリンクはディープリンクですか?いいえ。ただし、アプリ内でディープリンクを使用するプロセスを開始できます。

42
micmdk

TL、DR:

Universal LinkとURLスキームの違いは何ですか?ユニバーサルリンクはWebサイトのハイパーリンク、およびメールアプリまたはメッセージアプリ専用のものですか?

ユニバーサルリンクはApple特定のOSベースのURLであり、ウェブサイトのURLをアプリ固有のURIスキームとルートに結び付けます。アプリがサポートする必要があるため、すべてのアプリで利用できるわけではありませんULが現在どこで/どのように機能するかの良いリストがあります( here )。

ULにも多くの問題があり、最後に概説します。以下の詳細を参照してください。

ユニバーサルリンクはURLスキームを置き換えますか?

いいえ。これらは、iOS SafariのURIスキームおよびルートの強制的な置き換えです。 AndroidおよびiOS Chromeはまだこのテクノロジーを使用しているため、アトリビューションからのリンクベンダーのすべての主要クラスと同様に、アプリのURIスキームとルートをサポートする必要があります。メールで。

ユニバーサルリンクはディープリンクの一種ですか?

はいといいえ。ユニバーサルリンク自体はユニバーサルディープリンクではありません。たとえば、インストールプロセスを経由することはできません。しかし、ユーザーがアプリを持っている場合、ユーザーはディープリンクできます。すべてのリンクについて、URLを「ディープリンク」と「ディープリンクではない」に分類するのではなく、できることとできないことの観点から考えることをお勧めします。

多くのリンクは、ユーザーがアプリとコンテキスト(ブラウザー、アプリケーション、OS、OSバージョンなど)を持っているかどうかに応じて、ディープリンクへの動作を示します。思考の枠組みを変更します。

ユニバーサルリンクの追跡

以下の文書を通して、私はユニバーサルリンクのすべての異なる側面を概説します。 continueUserActivityはユニバーサルリンクからの参照URLを報告するので、これを使用してオープンの属性を設定できるようにすることが重要です。

ULは通常のリンクではないため、リダイレクトがある場合、それは壊れます。同様に、リダイレクトをオフにすると、ウェブサイトのクリックサーバーがヒットすることはありません。これは別の議論のためですが、注意することが重要です。

興味のある方のために、以下でユニバーサルリンクについてキュレーションした有用な情報がたくさんあります。

URIスキーム

ほとんどの人はURIスキームに精通しています。 URIはユニバーサルリソースインジケーターです( link )。 URIはモバイルアプリケーションに割り当てることができます。 airbnb://などのURIを入力すると、デバイス上のアプリリソースAirbnbの検索が試行されます。

ユニバーサルリンクまたはアプリリンクが存在する前(つまり、iOS 9.3/Android 6.0より前)、「カスタムURIスキーム」とairbnb://d/listing/530250形式のルートを使用して、ユーザーを特定のコンテンツにディープリンクする必要があります。モバイルアプリ(この場合はリスト)。ただし、これは安全ではなく、ユーザーがアプリをインストールしていない場合(フォールバックはありませんでした)を処理しませんでした。ほとんどの帰属パートナー(Appsflyer、Kochava、Button、Yozio、Branchなど)の動作方法は、これを処理するリンクを提供することです。

ユーザーがこのURLのページにアクセスすると、タイマーを設定するいくつかのjavascriptがあり、ブラウザーからURIスキームを簡単なjavascriptで起動しようとします。

window.location.href(...)

タイマーの期限が切れる前にアプリが開かなかった場合、ベンダーは電話にアプリが含まれていないと想定できたため、代わりに、JavaScriptが起動してiTunesまたはAndroid URLを開く。このメカニズムは、ブラウザーでJavaScriptをブロックすることに依存していました。

IOS 9.3では、Apple SafariのブロックJavaScriptを削除しました( link )。最終結果は、SafariでURIスキームを使用してアプリを開こうとすると、 「Cannot Open Page」という大きなエラーメッセージが表示されます。これはひどいユーザーエクスペリエンスであり、Appleの新しいシステムApple Universal Links。

Safari "Cannot Open Page" triggered by older style URI Scheme redirects. In iOS 8 and below all attribution and deeplinking tech worked by setting a timer, trying to launch the URI scheme & pathway, then if a timer expired before the app launched, redirecting the user to the App Store. The advent of iOS 9.3 killed non-blocking javascript, and hence there was no way for this method to work anymore. Chrome & Android still support this style of attribution and routing.

Apple Universal Links&Androidアプリリンクは基本的にウェブURL(例:https://www.airbnb.com/rooms/530250)であり、ユーザーをウェブまたはアプリの最適な場所に誘導することを目的としています。ユーザーがアプリを持っていない場合はモバイルWebにアクセスしますが、持っている場合はアプリの正確なコンテンツに移動します。モバイルデバイスでは、ユーザーがユニバーサルリンクをたどってアプリをインストールしている場合、それ以外の場合、システムはフォールバックし、モバイルWebサイトに訪問者を送り込みます(いくつかの例外を除きます-以下を参照)。

リンクを真にユニバーサルにするには、Web、iOS、およびAndroidで、すべてのアプリが同じリソースパスを共有するためにリンクされた機能が有効になっている必要があります。

Apple Universal Links&Android App Links

Apple Universal Links(iOS)とAndroid App Links(Android)は基本的に同じ概念ですが、多くの場合、他のルーティングメカニズムと交換または混同されます。これらについて話すときは明示することが重要です。それ以外の場合は、動作が非常に異なるさまざまなテクノロジーを混乱または混乱させる危険があります。

具体的には、Apple Universal LinksはAppleからの標準であり、ユーザーがリンクをタップして、 Appleユニバーサルリンクにはリダイレクトがありません。これは、ある程度の技術的な複雑さを伴う特別なシステム設定です。ユーザーがリンクをタップすると、ラウンドトリップサーバーAppleを呼び出すと、OSはブラウザを開いたりURLを読み込んだりせずに、すぐにアプリを開きます。この仕組みの詳細については、以下をご覧ください。

Androidアプリリンクは、Androidでセットアップされる同等のリンクシステムです。

ユニバーサルリンクは、ドメインごとに「Apple App Site Association File」(AASA)をホストすることから始めます。

ほとんどすべての企業のAASAはメインドメインでホストされ、その後に「/ Apple-app-site-association」が続くことに注意することが重要です。

いくつかの例:

https://www.jet.com/Apple-app-site-associationhttps://www.pinterest.com/Apple-app-site-association

これらのURLをクリックすると、会社のAASAがダウンロードされます。 AASAの例は右側にあります。 AASAに含まれている注目すべき点:ユニバーサルリンクを適用できるすべてのアプリのAppID。弊社および他の多くのAASAでは、アプリの製品版とテスト版のセットアップが表示され、テスト用のすべてのバージョンでリンクが機能します。 AppIDは、App Prefixの後にバンドルIDが続く構造になっています。通常、アプリの各テストバージョンには異なるプレフィックスがありますが、バンドルIDの一貫性は維持されます。

例... {App Prefix}。{バンドルID}

パス:これらは、ユーザーがアプリを持っている場合にすぐにアプリを開くパスウェイです。アプリは参照元のURLを受け取り、適切な経路を解析して、その後ユーザーをコンテンツにディープリンクできます。

BranchやAppsflyerなどのほとんどのアトリビューションベンダーは、特定の場合にAASAをホストすることもできます(例:AirbnbのBranchのAASAは、カスタムドメインでホストされています https://abnb.me/Apple-app-site-関連付け )。

これらのファイルは、アプリ内でマップするURLまたはマップしないURLを効果的にホワイトリストおよびブラックリストに登録します。企業所有のAASAの場合と同様に、各ドメインに対して、ベンダーは次のようなアプリIDとURLパスを指定します

5LL7P8E8RA.com.airbnb.app
"/rooms/*"
"/wishlists/*"
"/invite"
"NOT /rooms/*/building-rules"

ユーザーがアプリをインストールまたはアップグレードすると、iOSはアプリの権限にリストされているすべてのドメインのAASAファイルを取得し、ウェブサイトがアプリに代わってURLを開くことを許可します。

ユニバーサルリンクの既知の問題

ユニバーサルリンクはほとんどの場合に優れた機能を発揮しますが、これらは簡単に使用でき、誤って無効にすることができますこの場合、ユーザーはアプリをアップグレードするか、「資格ファイル」と呼ばれるものをリセットするまで、常にWebサイトのURLにリダイレクトされます( link )。

ユーザーがアプリの右上にある「airbnb.com」または「abnb.me」リンクをタップすると、OSはユーザーをWebサイトに誘導しますが、将来のすべてのユニバーサルリンクをモバイルに永続的に誘導しますそのドメインとのリンクのウェブサイト!

これは、ユーザーのApple Universal Linksの機能を事実上破壊します。これは現在追跡できません。リセットする唯一の方法は、URLを長押しして、[Airbnbで開く]をクリックすることです(直感的ではない)、またはこのドキュメントで前述したApple Universal Links Banner(Phantom Banner)の[開く]ボタンをタップします。

Apple Universal Links Banner

これらのAASAパスは、iOSシステムの「ユニバーサルリンクバナー」をいつ表示するか、表示しないかを決定するためにも使用されます。

これは、会話で頻繁に発生する特にホットなトピックであり、議論する価値があります。

特定のドメインでApple Universal Links)を有効にすると、AppleはSafariブラウザにシステムAppバナーを挿入します。これは、あらゆるバナーまたは表示するウェブインタースティシャル、Appleは、アプリを持ち、SafariでURLを表示しているユーザーに対して、Safariの上部に表示される、カスタマイズ可能で追跡不可能なユニバーサルリンクバナーも強制しますAASAには誰の道がありますか。

Apple injects a "Universal Links Banner" on your website when you setup Universal Links. There is no attribution or tracking.

このバナーの外観を制御することはできません。 AASAに基づいてページに表示する必要があるかどうかのみを判断できます。また、現在、ユーザーが[開く]ボタンをタップしたかどうか、またはいつタップしたかを特定する方法もありません(属性はありません。

Apple Universal Links Banner属性の概要:

  • ユーザーがアプリを持っている場合にのみ表示されます。
  • Apple Smart App Bannerと同じではありません
  • IOS Safariブラウザでのみ表示されます。
  • ただし、このバナーのタイトルと説明のテキストは、iTunesMetadata.plistのコンテンツ( link )でカスタマイズできます。
  • 帰属または追跡はありません。
38
ahay

ユニバーサルリンクはURL/URIスキームを置き換えますか?

Appleの理想の世界では、[〜#〜] yes [〜#〜]


ユニバーサルリンクはディープリンクの一種ですか?

Appleディープリンクを作成するために開発者ユーザーにユニバーサルリンクを強制します。したがって、ユニバーサルリンクはAppleによるディープリンクの一種です。 iOS 9.0 +でのディープリンク。したがって、Appleユニバーサルリンクはディープリンクよりも優れています。

13

これはサンプルのユニバーサルリンクです:「 http://sample-universal-link.demoapp.com

それはuniqueであり、タップされるとSafariを経由せずにアプリを開きます(アプリがインストール済み)またはSafariでウェブサイトを開きます(アプリがインストールされていない場合)

これはサンプルURLスキームです:“ demoapp”(demoapp:// params)

このは一意ではない可能性があり、タップされるとインストールされている場合はアプリが開きます。アプリがインストールされていない場合何もしません。 1つ以上のアプリが同じURLスキームを持つ場合があります。

ユニバーサルリンクとURLスキームの実装(requirements)はまったく異なるため、ユニバーサルリンクがURLスキームに置き換わることは非常に疑わしいです。

ユニバーサルリンクは、ディープリンクを実装する方法の1つです。

8
Arpit Dongre