ユニバーサルリンクとApp Links
この記事では、Apple ユニバーサルリンクと Android App Links の設定方法について説明します。

すべてのメッセージングチャネルにおけるリンクタイプの比較と、AASA ファイルが必要なタイミングに関するガイダンスについては、iOS ディープリンクガイドを参照してください。
Apple ユニバーサルリンクと Android App Linksは、Webコンテンツとモバイルアプリ間のシームレスな遷移を提供するために考案されたメカニズムです。ユニバーサルリンクはiOS固有のものですが、Android App LinksはAndroidアプリケーションで同じ目的を果たします。
ユニバーサルリンクとApp Linksの仕組み
ユニバーサルリンク(iOS)とApp Links(Android)は、Webページとアプリ内のコンテンツの両方を指す標準的なWebリンク(http://mydomain.com)です。
ユニバーサルリンクまたはApp Linkが開かれると、オペレーティングシステムはそのドメインに登録されたインストール済みアプリがあるかどうかを確認します。アプリが見つかった場合、Webページを読み込むことなく即座にアプリが起動されます。アプリが見つからない場合、Web URLがユーザーのデフォルトWebブラウザーで読み込まれ、それぞれApp StoreまたはGoogle Play Storeにリダイレクトするように設定することもできます。
簡単に言えば、ユニバーサルリンクにより、WebサイトはそのWebページを特定のアプリ画面に関連付けることができます。そのため、ユーザーがアプリ画面に対応するWebページへのリンクをクリックすると、アプリを直接開くことができます(アプリが現在インストールされている場合)。
次の表は、ユニバーサルリンクと従来のディープリンクの主な違いをまとめたものです。
| ユニバーサルリンクとApp Links | ディープリンク | |
|---|---|---|
| プラットフォーム互換性 | iOS(バージョン9以降)およびAndroid(バージョン6.0以降) | さまざまなモバイルOSで使用 |
| 目的 | iOSおよびAndroidデバイスでWebとアプリのコンテンツをシームレスにリンク | 特定のアプリコンテンツにリンク |
| 機能 | コンテキストに基づいてWebページまたはアプリコンテンツに誘導 | 特定のアプリ画面を開く |
| アプリのインストール | アプリがインストールされている場合はアプリを開き、それ以外の場合はWebコンテンツを開く | アプリのインストールが必要 |
ユースケース
ユニバーサルリンクとApp Linksは、メールCampaignで最も一般的に使用されます。メールはデスクトップとモバイルデバイスの両方から開いてクリックできるためです。
一部のチャネルはこれらのリンクとうまく連携しません。たとえば、プッシュ通知、アプリ内メッセージ、Content Cardsでは、スキームベースのディープリンク(mydomain://)を使用する必要があります。

Android App Linksには、そのドメインからのリンクを他のWeb URLとは別に処理するロジックを持つカスタムIBrazeDeeplinkHandlerが必要です。代わりにディープリンクを使用し、メール以外のチャネルではリンクの方法を統一する方が簡単な場合があります。
前提条件
ユニバーサルリンクとApp Linksを使用するには、以下が必要です。
- WebサイトがHTTPS経由でアクセス可能であること
- アプリがApp Store(iOS)またはGoogle Play Store(Android)で利用可能であること
ユニバーサルリンクとApp Linksの設定
アプリがユニバーサルリンクまたはApp Linksをサポートするには、iOSとAndroidの両方で、リンクドメインに特別な権限ファイルをホストする必要があります。このファイルには、そのドメインからのリンクを開くことができるアプリの定義と、iOSの場合はそれらのアプリが開くことを許可されるパスが含まれています。
- iOS: Apple App Site Association(AASA)ファイル
- Android: Digital Asset Linksファイル
この権限ファイルに加えて、アプリが開くことを許可されるリンクドメインのハードコードされた定義がアプリ内に設定されます。
- iOS: Xcodeで「Associated Domains」として設定
- Android: アプリの
AndroidManifest.xmlファイルで定義
この2つのパートからなるドメインとアプリの関連付けは、ユニバーサルリンクまたはApp Linkが機能するために必要であり、任意のアプリが特定のドメインからのリンクを乗っ取ったり、任意のドメインが特定のアプリを開いたりすることを防ぎます。
これらの手順はApple開発者ドキュメントから適応されたものです。詳細については、Allowing apps and websites to link to your contentを参照してください。
ステップ1:アプリのエンタイトルメントを設定する

Xcode 13以降では、Xcodeがエンタイトルメントのプロビジョニングを自動的に処理できます。ステップ1cに進み、問題が発生した場合にこれらの手順を参照してください。
ステップ1a:アプリを登録する
- developer.apple.comにアクセスしてログインします。
- Certificates, Identifiers & Profilesをクリックします。
- Identifiersをクリックします。
- 登録済みのApp Identifierがまだない場合は、+をクリックして作成します。 a. Nameを入力します。任意の名前を設定できます。 b. Bundle IDを入力します。Bundle IDは、適切なビルドターゲットのXcodeプロジェクトのGeneralタブから確認できます。
ステップ1b:App IdentifierでAssociated Domainsを有効にする
- 既存または新しく作成したApp Identifierで、App Servicesセクションを見つけます。
- Associated Domainsを選択します。
- Saveをクリックします。

ステップ1c:XcodeプロジェクトでAssociated Domainsを有効にする
続行する前に、XcodeプロジェクトでApp Identifierを登録した場所と同じチームが選択されていることを確認してください。
- Xcodeで、プロジェクトファイルのCapabilitiesタブに移動します。
- Associated Domainsを有効にします。
トラブルシューティングのヒント
「An App ID with Identifier ‘your-app-id’ is not available. Please enter a different string」というエラーが表示された場合は、以下を行ってください。
- 正しいチームが選択されていることを確認します。
- Xcodeプロジェクトの Bundle ID(ステップ1a)が、App Identifierの登録に使用したものと一致していることを確認します。
ステップ1d:ドメインエンタイトルメントを追加する
ドメインセクションで、適切なドメインタグを追加します。applinks:をプレフィックスとして付ける必要があります。この例では、applinks:yourdomain.comを追加しています。

ステップ1e:エンタイトルメントファイルがビルドに含まれていることを確認する
プロジェクトブラウザーで、新しいエンタイトルメントファイルがTarget Membershipで選択されていることを確認します。
Xcodeはこれを自動的に処理します。
ステップ2:AASAファイルをホストするようにWebサイトを設定する
WebサイトのドメインをiOSのネイティブアプリに関連付けるには、WebサイトにApple App Site Association(AASA)ファイルをホストする必要があります。このファイルは、iOSに対してドメインの所有権を安全に検証する方法として機能します。iOS 9より前は、開発者は検証なしで任意のURIスキームを登録してアプリを開くことができました。しかし、AASAにより、このプロセスはより安全で信頼性の高いものになりました。
AASAファイルには、アプリのリストと、ユニバーサルリンクとして含めるまたは除外するドメイン上のURLパスを含むJSONオブジェクトが含まれています。以下はAASAファイルのサンプルです。
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"applinks": {
"apps": [],
"details": [
{
"appID": "JHGFJHHYX.com.facebook.ios",
"paths": [
"*"
]
}
]
}
}
appID: アプリのTeam ID(https://developer.apple.com/account/#/membership/にアクセスしてTeam IDを取得)とBundle Identifierを組み合わせて構築されます。上記の例では、「JHGFJHHYX」がTeam IDで、「com.facebook.ios」がBundle IDです。paths: 関連付けに含めるまたは除外するパスを指定する文字列の配列です。パスの前にNOTを使用してパスを無効にできます。この例では、このパス上のすべてのリンクはアプリを開く代わりにWebに移動します。*をワイルドカードとして使用してディレクトリ内のすべてのパスを有効にしたり、?を使用して単一の文字に一致させたりできます(例:/archives/201?/ で2010〜2019のすべての数字に一致)。

これらの文字列は大文字と小文字が区別され、クエリ文字列とフラグメント識別子は無視されます。
ステップ3:ドメインにAASAファイルをホストする
AASAファイルの準備ができたら、https://<<yourdomain>>/apple-app-site-associationまたはhttps://<<yourdomain>>/.well-known/apple-app-site-associationのいずれかでドメインにホストできます。
apple-app-site-associationファイルをHTTPS Webサーバーにアップロードします。ファイルはサーバーのルートまたは.well-knownサブディレクトリに配置できます。ファイル名に.jsonを追加しないでください。

iOSはHTTPSによる安全な接続経由でのみAASAファイルの取得を試みます。
AASAファイルをホストする際は、ファイルが以下のガイドラインに従っていることを確認してください。
- HTTPS経由で提供されていること。
application/jsonMIMEタイプを使用していること。- 128 KBを超えないこと(iOS 9.3.1以降の要件)
ステップ4:ユニバーサルリンクを処理するようにアプリを準備する
ユーザーがiOSデバイスでユニバーサルリンクをタップすると、デバイスはアプリを起動し、NSUserActivityオブジェクトを送信します。アプリはNSUserActivityオブジェクトをクエリして、どのように起動されたかを判断できます。
アプリでユニバーサルリンクをサポートするには、以下の手順を実行します。
- アプリがサポートするドメインを指定するエンタイトルメントを追加します。
- NSUserActivityオブジェクトを受信したときに適切に応答するようにアプリデリゲートを更新します。
Xcodeで、CapabilitiesタブのAssociated Domainsセクションを開き、アプリがサポートする各ドメインのエントリをapplinks:をプレフィックスとして追加します。例:applinks:www.mywebsite.com。

Appleはこのリストを20〜30ドメイン以内に制限することを推奨しています。
ステップ5:ユニバーサルリンクをテストする
ユニバーサルリンクをメールに追加し、テストデバイスに送信します。SafariのURLフィールドにユニバーサルリンクを直接貼り付けても、アプリは自動的に開きません。その場合は、Webサイトを手動で下にプルして、該当するアプリを開くかどうかを尋ねるプロンプトが上部に表示されるようにする必要があります。
これらの手順はAndroid開発者ドキュメントから適応されたものです。詳細については、Add Android App LinksおよびCreate Deep Links to App Contentを参照してください。

Android App Linksには、そのドメインからのリンクを他のWeb URLとは別に処理するロジックを持つカスタムIBrazeDeeplinkHandlerが必要です。代わりにディープリンクを使用し、メール以外のチャネルではリンクの方法を統一する方が簡単な場合があります。
ステップ1:ディープリンクを作成する
まず、Androidアプリのディープリンクを作成する必要があります。これは、AndroidManifest.xmlファイルにインテントフィルターを追加することで行えます。インテントフィルターには、VIEWアクションとBROWSABLEカテゴリ、およびデータ要素にWebサイトのURLを含める必要があります。
ステップ2:アプリをWebサイトに関連付ける
アプリをWebサイトに関連付ける必要があります。これは、Digital Asset Linksファイルを作成することで行えます。このファイルはJSON形式で、Webサイトへのリンクを開くことができるAndroidアプリの詳細が含まれています。Webサイトの.well-knownディレクトリに配置する必要があります。
ステップ3:アプリのマニフェストファイルを更新する
AndroidManifest.xmlファイルで、application要素内にmeta-data要素を追加します。meta-data要素には、android:name属性に「asset_statements」を、android:resource属性にWebサイトのURLを含む文字列配列を持つリソースファイルを指定する必要があります。
ステップ4:ディープリンクを処理するようにアプリを準備する
Androidアプリで、受信するディープリンクを処理する必要があります。これは、アクティビティを開始したインテントを取得し、そこからデータを抽出することで行えます。
ステップ5:ディープリンクをテストする
最後に、ディープリンクをテストできます。メッセージングアプリまたはメールを通じて自分にリンクを送信し、クリックします。すべてが正しく設定されていれば、アプリが開くはずです。
ユニバーサルリンク、App Links、およびクリックトラッキング

クリックトラッキングリンクは通常、メールのオンボーディングの一環として設定されます。顧客のオンボーディング中に完了しなかった場合は、アカウントマネージャーにお問い合わせください。
メール送信パートナーであるSendGridとSparkPostは、クリックトラッキングドメインを使用してすべてのリンクをラップし、BrazeメールのクリックトラッキングのURLパラメーターを含めます。
たとえば、https://www.example.comのようなリンクはhttps://links.email.example.com/uni/wf/click?upn=abcdef123456…のようになります。
クリックトラッキング付きのメールリンクをユニバーサルリンクまたはApp Linksとして機能させるには、追加の設定が必要です。クリックトラッキングドメイン(links.email.example.com)を、アプリが開くことを許可されるドメインとして追加してください。さらに、クリックトラッキングドメインはAASA(iOS)またはDigital Asset Links(Android)ファイルを提供する必要があります。これにより、クリックトラッキング付きのメールリンクがシームレスに機能するようになります。
すべてのクリックトラッキングリンクをユニバーサルリンクまたはApp Linkにしたくない場合は、メール送信パートナーに基づいてどのリンクをユニバーサルリンクにするかを指定できます。詳細については、以下のセクションを参照してください。
SendGrid
SendGridのクリックトラッキングリンクをユニバーサルリンクとして扱うには、以下を行います。
- AASAまたはAndroidManifestのpathPrefix値を設定して、URLパスに
/uni/を含むリンクのみをユニバーサルリンクとして扱うようにします。 - リンクのアンカータグ(
<a>)に属性universal="true"を追加します。これにより、ラップされたリンクのURLパスに/uni/が含まれるようになります。

AMPメールの場合、この属性はdata-universal=”true”にする必要があります。
例:
1
<a href=”https://www.example.com” universal="true">
- アプリがラップされたリンクを適切に処理するように設定されていることを確認します。SendGridの記事Resolving SendGrid Click Tracking Linksを参照し、お使いのオペレーティングシステムの手順に従ってください。この記事にはiOSとAndroidのサンプルコードが含まれています。
この設定により、URLパスに/uni/を含むリンクはユニバーサルリンクとして機能し、その他のすべてのリンクはWebリンクとして機能します。
SparkPost
SparkPostのクリックトラッキングリンクをユニバーサルリンクとして扱うには、メールのドラッグ&ドロップエディターの属性セクションに以下の属性を追加するか、リンクのHTMLを手動で編集してリンクのアンカータグに以下の属性を含めます:data-msys-sublink="custom_path"。
このカスタムパスにより、その値を持つURLを選択的にユニバーサルリンクとして扱うことができます。
例:
1
<a href=”https://www.example.com” data-msys-sublink="open-in-app">
次に、アプリがカスタムパスを適切に処理するように設定されていることを確認します。SparkPostの記事Using SparkPost click tracking on deep linksを参照してください。この記事にはiOSとAndroidのサンプルコードが含まれています。
リンクごとのクリックトラッキングの無効化
特定のリンクのクリックトラッキングを無効にするには、HTMLエディターのメールメッセージにHTMLコードを追加するか、ドラッグ&ドロップエディターのHTMLブロックに追加します。
SendGrid
メールサービスプロバイダー(ESP)がSendGridの場合、次のようにHTMLコードclicktracking=offを使用します。
<a clicktracking=off href="[INSERT https LINK HERE]">click here</a>
SparkPost
メールサービスプロバイダー(ESP)がSparkPostの場合、次のようにHTMLコードdata-msys-clicktrack="0"を使用します。
<a data-msys-clicktrack="0" href="[INSERT https LINK HERE]">click here</a>
Amazon SES
メールサービスプロバイダー(ESP)がAmazon SESの場合、次のようにHTMLコードses:no-trackを使用します。
<a ses:no-track href="[INSERT https LINK HERE]">click here</a>
ドラッグ&ドロップエディター
ドラッグ&ドロップメールエディターを使用する場合、リンクがテキスト、ボタン、または画像に添付されている場合は、HTMLコードをカスタム属性として入力します。
テキストリンクのカスタム属性
SendGrid
カスタム属性に以下を選択します。
- Name:
clicktracking - Value:
off
SparkPost
カスタム属性に以下を選択します。
- Name:
data-msys-clicktrack - Value:
0
![]()
ボタンまたは画像のカスタム属性
SendGrid
カスタム属性に以下を選択します。
- Name:
clicktracking - Value:
off - Type: Link
SparkPost
カスタム属性に以下を選択します。
- Name:
data-msys-clicktrack - Value:
0 - Type: Link
![]()
クリックトラッキング付きユニバーサルリンクのトラブルシューティング
メール内のユニバーサルリンクが期待どおりに機能しない場合(受信者がメールアプリからWebブラウザーに移動し、最終的にアプリにリダイレクトされるなど)、以下のヒントを参照してユニバーサルリンクの設定をトラブルシューティングしてください。
リンクファイルの場所を確認する
AASAファイル(iOS)またはDigital Asset Linksファイル(Android)が正しい場所にあることを確認します。
- iOS:
https://click.tracking.domain/.well-known/apple-app-site-association - Android:
https://click.tracking.domain/.well-known/assetlinks.json
これらのファイルが常に公開アクセス可能であることを確認することが重要です。アクセスできない場合は、メール用のユニバーサルリンクの設定手順を見落としている可能性があります。
ドメイン定義を確認する
アプリが開くことを許可されるドメインの定義が正しいことを確認します。
- iOS: XcodeでアプリのAssociated Domainsを確認します(ステップ1c)。クリックトラッキングドメインがそのリストに含まれていることを確認します。
- Android: アプリ情報ページを開きます(アプリアイコンを長押しして ⓘ をクリック)。アプリ情報メニュー内でOpen by defaultを見つけてタップします。アプリが開くことを許可されているすべての検証済みリンクが表示される画面が表示されます。クリックトラッキングドメインがそのリストに含まれていることを確認します。