メインコンテンツまでスキップ

Universal Links

Universal Linksは、iOSが標準機能として提供しているディープリンクです。

Universal Linksとして登録するURLは以下のようなHTTP URLであるため、1つのURLでアプリとウェブサイトの両方に対応できます。

https://example.com/account/profile

また、後述するアプリとドメインの関連付けにより、このアプリが提供するUniversal Linksを他のアプリに乗っ取られるようなリスクはありません。

Universal Linksの処理概要

Universal Linksの登録

  1. ユーザは、アプリをインストールする
  2. OSは、アプリとドメインの関連付けを検証して登録する

Universal Linksの処理

  1. ユーザは、ディープリンクURLをタップする
  2. OSは、タップされたディープリンクを処理する
  3. OSは、ディープリンクURLがUniversal Linksとして登録されているかを判断する
    • 登録されている場合、OSはアプリを開く
    • 登録されていない場合、OSはブラウザでディープリンクURLを開く
  4. アプリは、起動時のディープリンクURLを受け取るので、そのURLに応じた処理をする

アプリとドメインの関連付け

Universal Linksは、アプリとドメインを関連付けることでディープリンクURLの安全を保証します。

アプリとドメインの関連付けは、Supporting associated domainsに記載されている通り、以下の設定が必要です。

  • Associated Domains Entitlementの追加
  • associated domain fileをウェブサイトに配置

Associated Domains Entitlementの追加

Associated Domains Entitlementには、アプリと関連付けるドメインを設定します。ここで設定されたドメインからassociated domain fileをダウンロードし、アプリとドメインが関連付けられます。

Associated Domains Entitlementは、以下の手順で追加します。

  1. XcodeのCapabilitiesからAssociated Domainsを選択
  2. 追加されたEntitlementのDomainsにapplinks:[関連付けるドメイン]を追加
    • 複数のサブドメインをサポートする場合は、全てのドメインを追加

詳細は、以下のドキュメントを参照してください。

なお、XcodeのSigning & CapabilitiesAutomatically manage signingを設定していない場合は、追加で以下の手順が必要になります。

  1. Apple Developer Programにログイン
  2. Apple Developer ProgramのCertificates, Identifiers & Profiles > IdentifiersでアプリのApp IDを選択
  3. CapabilitiesにAssociated Domainsを追加
  4. Apple Developer ProgramのCertificates, Identifiers & Profiles > ProfilesでProvisioning Profileを更新
  5. 更新したProvisioning Profileをダウンロードして、XcodeのProvisioning Profileに設定
注記

XcodeのSigning & CapabilitiesAutomatically manage signingを設定している場合は、上記手順をXcodeが自動で実施してくれます。

associated domain fileをウェブサイトに配置

associated domain fileは、アプリと関連付けるドメインに配置するファイルです。ファイル名はapple-app-site-associationとし、JSON形式で記述します。

このファイルには、関連付けるアプリのApplication Identifier PrefixBundle Identifier、Universal Linksとして受け付けるパスなどを指定します。

詳細は、以下のドキュメントを参照してください。

apple-app-site-associationの例
{
"applinks": {
"details": [
{
"appIDs": [ "ABCDE12345.com.example.app"],
"components": [
{
"/": "/account/profile",
"comment": "プロフィール画面を表示する。"
},
{
"/": "/questions",
"?": { "page": "?*" },
"comment": "質問一覧画面を表示する。クエリパラメータとしてページ番号を受け取る。"
}
]
}
]
}
}
注記

1つのドメインを複数のアプリと関連付けるには、detailsに複数のアプリを設定します。

{
"applinks": {
"details": [
{
"appIDs": [ "ABCDE12345.com.example.app1"],
"components": [{ "/": "/app1/users"}]
},
{
"appIDs": [ "ABCDE12345.com.example.app2"],
"components": [{ "/": "/app2/books"}]
}
]
}
}

作成したassociated domain fileは、ウェブサイトの.well-knownディレクトリに配置します。

https://[ドメイン]/.well-known/apple-app-site-association

また、以下の要件を満たして配信する必要があります。

  • Content-Typeapplication/jsonである
  • HTTPS接続でアクセスできる
  • リダイレクトなしでアクセスできる(301リダイレクトや302リダイレクトがない)
  • 複数のサブドメインをサポートしている場合、各ドメインでassociated domain fileを公開する必要がある

ウェブサイトに配置されたassociated domain fileは、アプリのインストール時や一定周期で、OSがAppleのCDNを経由してダウンロードします。

危険

Appleのドキュメントには、ウェブサイトのassociated domain fileがAppleのCDNに反映されるまで最大24時間かかると記載されています。

Apple’s content delivery network requests the apple-app-site-association file for your domain within 24 hours.

注記

Appleのドキュメントには、associated domain fileをダウンロードするタイミングとして以下の記載があります。

When a user installs your app, the system attempts to download the associated domain file and verify the domains in your entitlement. Devices check for updates approximately once per week after app installation.

アプリのインストール時や、約1週間に一度の頻度でassociated domain fileをダウンロードするようです。

注記

Appleのドキュメントには、associated domain fileがAppleのCDN経由でダウンロードされるのは、iOS14以降と記載されています。 iOS14未満の場合は、ウェブサイトから直接ダウンロードされます。

Starting with macOS 11 and iOS 14, apps no longer send requests for apple-app-site-association files directly to your web server. Instead, they send these requests to an Apple-managed content delivery network (CDN) dedicated to associated domains.

なお、開発時はassociated domain fileを配置するウェブサイトのアクセスがIPなどにより制限されている場合があります。その場合、AppleのCDNがassociated domain fileにアクセスできません。

上記を解決する手段として、Associated Domains Entitlementで指定したドメインにalternate modeを設定する方法があります。

alternate modeを設定することでAppleのCDN経由ではなく、ウェブサイトから直接ダウンロードが可能です。

詳細は、Enable alternate mode for unreachable serversを参照してください。

危険

alternate modeは、開発用のProvisioning Profileで署名されたアプリでしか使用できません。