iOS ユニバーサルリンクの実装

このページでは、ユニバーサルリンクを使用するために、アプリとWebサーバーの設定手順を説明します。ユニバーサルリンクの概念については、下記をご参照ください。iOS Universal Links with TUNE.

また、ユニバーサルリンクの実装に関する追加情報は、Apple Developerサイトをご参照ください。Support Universal Links

Apple Developer Toolsサイトの設定

https://developer.apple.comにて、App IDを作成します。Xcodeプロジェクトでユニバーサルリンクをサポートできるように関連するドメインを有効にします。

  1. アプリケーションIDを作成するためにアプリを登録します。
    1. Apple Developer Member Centerのホームページで、Certificates, Identifiers & Profilesをクリックします。
    2. 上記のCertificates, Identifiers & Profilesページの、iOS Appsカラムの下のIdentifiersをクリック
    3. iOS App IDsページで、Register your App IDをクリック
    4. Registering an App IDページで、App IDを登録
    5. App IDを確認し、Submitボタンをクリック
    6. Registration completeページで、Doneをクリック
  2. App IDの関連ドメインを有効にします。
    1. iOS App IDsページで、App IDを選択し、Editをクリック
    2. iOS App ID Settingsページで、関連するドメインにチェック
    3. 確認ダイアログボックスで、OKをクリック
    4. iOS App ID SettingsページでDoneをクリック

これらのステップを完了することで、Xcodeプロジェクトは、ユニバーサルリンクをサポートするようになります。次のセクションでは、WebドメインとXcodeプロジェクトを関連付けます。

Xcodeプロジェクトの設定

ユニバーサルリンクを処理できるよう、Appleにアプリを登録する ”com.apple.developer.associated-domains”というエンタイトルメントを追加します。権限リストにはユニバーサルリンクとして扱えるすべてのドメインをリストします。

  1. 関連するドメインを有効にします
    1. Xcodeでアプリのプロジェクトをロード
    2. 左ペインのツリービューで、プロジェクトをクリック
    3. 右ペインで、Capabilitiesタブをクリック
    4. Capabilitiesタブで、トグルをOn(青)にすることで、関連ドメインを有効にします
  2. エンタイトルメントを追加します
    1. Domainボックスで、ユニバーサルリンクとして扱いたいすべてのドメインを追加。各ドメインの接頭辞は”applinks:”です。(例えば、applinks:mydomain.com)
    2. ビルドにエンタイトルメントファイルを含める。プロジェクトブラウザで、適切なターゲットのメンバーシップのエンタイトルメントファイルを選択

これらのステップを完了することで、ドメインがユニバーサルリンクをサポートします。次のセクションでは、Webサーバーの設定を行います。

Webサーバーの設定

ユニバーサルリンクが新規ユーザー(アプリをインストールしていないユーザー)を誘導するためのモバイルサイト(少なくともモバイルのランディングページ)を作成します。モバイルページは、ユーザーにとって代替の遷移先となり、ディープリンクがアプリを起動する、もしくは、モバイルページに遷移するようになります。

次に“-app-site-association”ファイルを作成し、Webサーバーのrootディレクトリにアップロードします。このファイルではアプリが処理できるドメインのURLパスを指定します。また、これらのURLを処理するアプリを許可(ホワイトリスト化)します。このファイルのサンプルは、iOS Developer Libraryのユニバーサルリンクにある Listing 6.1 をご参照ください。

  1. モバイルサイト/ランディングページを作成します。(もしお持ちでなければ)
    1. レポジティブデザインのサイト/ページを構築 (モバイル対応版).
    2. アプリを紹介し、ユーザーにアプリのインストールを促すコンテンツを追加
    3. ユーザーをアプリのランディングページに誘導する広告(またはスマートバナー)を表示します。
  2. App-Site-Associationファイルを作成
    1. “apple-app-site-association”ファイルで、iOSがユニバーサルリンクを処理するURLパス/モバイルページを指定します。
  3. Webサーバー/ドメインのrootディレクトリにファイルをアップロード
    1. Content Typeを”application/pkcs7-mime”に設定します。
    2. 有効な証明書を持つhttps://にホストされる必要があります。(Safariでサイトを表示するとき、証明書の警告が表示されないようにします)
    3. ファイルはリダイレクトを使用しない
    4. ファイルは有効なTLS証明書によって署名

これらのステップを完了することで、モバイルサイト/ページは、ユニバーサルリンクのための代替遷移先として機能します。(アプリがインストールされていないことを検出した場合、ユーザーをモバイルサイト/ページに遷移させます。インストールされていれば、アプリのディープリンクの画面をオープンします。)次のセクションでは、アプリのコードを更新し、特定のユニバーサルリンクと特定のアプリ画面にマッピングします。

AppDelegateの設定

ユニバーサルリンクを処理するためのロジックを組み込みます。このコードはユーザーがアプリをインストールしている場合に実行されます(そうでない場合、モバイルWebページを取得します)。ユニバーサルリンクと特定のアプリ画面を関連付けるマッピングを提供します。

例えば、下記のサンプルコードはユニバーサルリンクを取得するものです。

- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * _Nullable))restorationHandler {
   // App was opened from Universal Link
   if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
       NSURL *url = userActivity.webpageURL;
       // Pass deep link to TUNE SDK
       [Tune applicationDidOpenURL:url.absoluteString
                 sourceApplication:nil];
       // Then handle deep link redirection here
   }
   // App was opened from Spotlight Search
   else if ([userActivity.activityType isEqualToString:CSSearchableItemActionType]) {
       NSString *searchIndexUniqueId = userActivity.userInfo[CSSearchableItemActivityIdentifier];
       if (searchIndexUniqueId) {
           // Pass Spotlight Search referral info to TUNE SDK
           [Tune applicationDidOpenURL:searchIndexUniqueId
                     sourceApplication:@"spotlight"];
           // Then handle deep link redirection here
       }
   }
   return true;
}

 

キャンペーン用のパラメータを追加

通常の計測URLやアプリ固有のディープリンクの代わりに、ユニバーサルリンクを広告に設定します。次にキャンペーン用のパラメータをユニバーサルリンクに追加します(通常の計測URLにパラメータを追加するのと同じ方法)。

例えば、キャンペーン用のパラメータが付与されたAttribution Analyticsの計測URLは以下のようになります( ディープリンク先のinvoke_idを含んでいます)。

https://12345.measurementapi.com/serve?action=click&publisher_id=12345&invoke_id=1234&sub_campaign=Atomic%20Dodge%20Ball%20Lite%201&sub_adgroup=US%2018%2B&sub_ad=Challenge%20Friends%20Blue&sub_placement=Mobile%20News%20Feed

計測URLの問題点は、アプリがインストールされているか検出するため、通常、ブラウザのリダイレクトを必要とする点です(検出後、アプリを起動するか、ストアへリダイレクト)。リダイレクトが増えると、ユーザーの離脱につながり、コンバージョン率の低下につながります。

以下は、アプリ固有のディープリンク(TUNEのアプリ:Atomic Dodge Ball Lite)にキャンペーン用のパラメータを付与した例です。

adblite://up?publisher_id=12345&sub_campaign=Atomic%20Dodge%20Ball%20Lite%201&sub_adgroup=US%2018%2B&sub_ad=Challenge%20Friends%20Blue&sub_placement=Mobile%20News%20Feed

ディープリンクは(リダイレクトせず)直接アプリを起動することによって、ユーザーの離脱を最小限に抑えることができますが、アプリ固有のディープリンクでは、アプリがインストールされていなければ機能せず、ユーザー体験の低下につながります。

理想的な実装はユニバーサルリンクにパラメータを追加して起動することで、ユーザーは、アプリレベルではなくOSレベルで、適切な場所に遷移します。アプリの検出と遷移のためにブラウザを起動する必要はなく、iOS自体によって処理されます。

https://alpha.mobileapptracking.com/atomic/upgrade.php?publisher_id=12345&sub_campaign=Atomic%20Dodge%20Ball%20Lite%201&sub_adgroup=US%2018%2B&sub_ad=Challenge%20Friends%20Blue&sub_placement=Mobile%20News%20Feed

ユニバーサルリンクの具体的な例として、サンプルサイト(http://alpha.mobileapptracking.com/atomic)をご覧ください。このサイトはAtomic Dodge Ball Liteのモバイル版で、ユニバーサルリンクを処理するように構成されています。

サンプルサイトでのユニバーサルリンクのテスト

  1. iOS 9以上で、Atomic Dodge Ball Liteがインストールされていない端末を使用します(インストールされていれば、このテストのためにアプリを削除し、後ほど再インストール)。
  2. 以下のディープリンクを該当端末にメールします。
    • adblite://up (Upgrade 画面)
    • adblite://ng/e (新しいゲーム Easy レベル)
    • adblite://ng (新しいゲーム Hard レベル)
    • adblite://ng/ex (新しいゲーム Expert レベル)
  3. iOS端末でメールを開き、これらのディープリンクをクリックします。
    • アプリをインストールしていれば、ディープリンクは該当する画面を直接開きます。
    • アプリをインストールしていなければ、ディープリンクは機能しません。
  4. 以下のユニバーサルリンクを該当端末にメールします。
  5. iOS端末でメールを開き、ユニバーサルリンクをクリックします。
    • アプリをインストールしていれば、ユニバーサルリンクは該当する画面を直接開きます。
    • アプリをインストールしていなければ、iOSはユーザーをモバイルの関連ページに遷移させます。

このテストを通して

  • ユニバーサルリンクがなければ、新規ユーザーにとっては、ディープリンクが機能せず、ユーザー体験が下がります。
  • ユニバーサルリンクを使用すれば、モバイルウェブ版に遷移し、ユーザー体験を損ないません。
  • キャンペーン用のパラメータをいれたユニバーサルリンクを広告に埋め込むことができます。
  • クリック時に、iOSがアプリがインストールされているか判別し、
    • インストールされていなければ、ユニバーサルリンクは、通常のハイパーリンクとして処理され、Webページを開きます。
    • インストールされていれば、AppDelegateで指定されたディープリンクを開きます。