Skip to content

iOSディープリンクガイド

このガイドでは、使用するメッセージングチャネルやBranchなどのサードパーティリンクプロバイダーの利用有無に応じて、iOSアプリに適したディープリンク戦略を選択する方法を説明します。

実装の詳細については、ディープリンクを参照してください。トラブルシューティングについては、ディープリンクのトラブルシューティングを参照してください。

iOSアプリでBrazeメッセージからのリンクを処理する方法は3つあります。それぞれ動作が異なり、適したチャネルやユースケースも異なります。

リンクの種類 最適な用途 アプリ未インストールでも開けるか?
カスタムスキーム myapp://products/123 プッシュ通知、アプリ内メッセージ、Content Cards いいえ — リンクは失敗します
ユニバーサルリンク https://myapp.com/products/123 メール、SMS、クリックトラッキング付きチャネル はい — Webにフォールバックします
アプリ内でWeb URLを開く 任意の https:// URL モーダルWebViewでWebコンテンツを表示する N/A — WebViewに表示されます

カスタムスキームディープリンク(例:myapp://products/123)は、アプリを特定の画面に直接開きます。リンクがサードパーティによって変更されないチャネルにおいて、最もシンプルな選択肢です。

カスタムスキームディープリンクを使用する場合:

  • プッシュ通知、アプリ内メッセージ、またはContent Cardsを送信する場合
  • アプリがインストールされていない場合にリンクが機能する必要がない場合
  • クリックトラッキング(メールESPリンクラッピング)が不要な場合

カスタムスキームディープリンクを使用しない場合:

  • メールを送信する場合 — メールサービスプロバイダー (ESP)がクリックトラッキングのためにリンクをラップするため、カスタムスキームが機能しなくなります
  • アプリがインストールされていない場合にWebページへフォールバックするリンクが必要な場合

ユニバーサルリンク(例:https://myapp.com/products/123)は標準的なHTTPS URLであり、iOSはブラウザで開く代わりにアプリにルーティングできます。サーバー側の設定(AASAファイル)とアプリ側の設定(Associated Domainsエンタイトルメント)が必要です。

ユニバーサルリンクを使用する場合:

  • メールを送信する場合。メールサービスプロバイダー (ESP)がクリックトラッキングのためにリンクをラップするため、リンクはHTTPSである必要があります。
  • SMSやその他のチャネルで、リンクがラップまたは短縮される場合。
  • アプリがインストールされていない場合にWebページへフォールバックするリンクが必要な場合。
  • BranchやAppsFlyerなどのサードパーティリンクプロバイダーを使用している場合。

ユニバーサルリンクを使用しない場合:

  • プッシュ通知、アプリ内メッセージ、またはContent Cardsからのディープリンクのみが必要な場合。カスタムスキームの方がシンプルです。

「アプリ内でWeb URLを開く」

このオプションは、アプリ内のモーダルWebViewでWebページを開きます。Braze SDKのBraze.WebViewControllerによって完全に処理されるため、URL処理コードを記述する必要はありません。

「アプリ内でWeb URLを開く」を使用する場合:

  • アプリを離れることなくWebページ(プロモーションや記事など)を表示したい場合。
  • URLが標準的なHTTPS Webページであり、特定のアプリ画面へのディープリンクではない場合。

「アプリ内でWeb URLを開く」を使用しない場合:

  • アプリ内の特定のビューに移動する必要がある場合。代わりにカスタムスキームまたはユニバーサルリンクを使用してください。
  • Webページが認証を必要とする場合、または埋め込みをブロックするContent Security Policyヘッダーがある場合。

カスタムスキームディープリンク

要件 詳細
AASAファイル 不要
Info.plist CFBundleURLTypesにスキームを登録し、LSApplicationQueriesSchemesに追加します
アプリデリゲートメソッド application(_:open:options:)を実装してURLを解析しナビゲーションします
Braze SDKの設定 なし — SDKはデフォルトでカスタムスキームURLを開きます

ユニバーサルリンク

要件 詳細
AASAファイル 必須 — https://yourdomain.com/.well-known/apple-app-site-associationにホストします
Associated Domains XcodeのSigning & Capabilitiesapplinks:yourdomain.comを追加します
アプリデリゲートメソッド application(_:continue:restorationHandler:)を実装してNSUserActivityを処理します
Braze SDKの設定 configuration.forwardUniversalLinks = trueを設定します
BrazeDelegate(オプション) カスタムルーティング(例:Branch)のためにbraze(_:shouldOpenURL:)を実装します

「アプリ内でWeb URLを開く」

要件 詳細
AASAファイル 不要
アプリデリゲートメソッド 不要 — SDKが自動的に処理します
Braze SDKの設定 なし — CampaignコンポーザーでOpen Web URL Inside Appを選択します

AASAファイルが必要な場合

Apple App Site Association(AASA)ファイルは、ユニバーサルリンクを使用する場合にのみ必要です。AASAファイルは、アプリが処理できるURLをiOSに伝えます。

AASAファイルが必要な場合:

  • メールキャンペーンでディープリンクを送信する場合(メールサービスプロバイダー (ESP)がリンクをHTTPSクリックトラッキングURLでラップするため)。
  • SMSキャンペーンでディープリンクを送信する場合(リンクがHTTPS URLに短縮される可能性があるため)。
  • Branch、AppsFlyer、またはその他のリンクプロバイダーを使用する場合(独自のHTTPSドメインを使用するため)。
  • プッシュ通知、アプリ内メッセージ、またはContent Cardsからユニバーサルリンクを使用する場合(一般的ではありませんが、forwardUniversalLinks = trueで可能です)。

AASAファイルが不要な場合:

  • プッシュ通知、アプリ内メッセージ、またはContent Cardsからカスタムスキームディープリンク(例:myapp://)のみを使用する場合。
  • Open Web URL Inside Appオプションを使用する場合。

AASAの設定手順については、ユニバーサルリンクとアプリリンクを参照してください。

リンクを処理するためにアプリコードが必要な場合

実装するデリゲートメソッドは、使用するリンクの種類によって異なります。

デリゲートメソッド 処理対象 実装するタイミング
application(_:open:options:) カスタムスキームディープリンク(myapp:// 任意のチャネルからカスタムスキームディープリンクを使用する場合
application(_:continue:restorationHandler:) ユニバーサルリンク(https:// メール、SMSから、またはforwardUniversalLinks = trueでユニバーサルリンクを使用する場合
BrazeDelegate.braze(_:shouldOpenURL:) SDKによって開かれるすべてのURL カスタムルーティングロジックが必要な場合(例:Branch、条件分岐処理、分析)

BrazeとBranchを併用する

Branchをリンクプロバイダーとして使用する場合、標準的なユニバーサルリンクの設定に加えて、いくつかの追加ステップが必要です。

  1. Branch SDKBranchのドキュメントに従ってBranch SDKを統合します。
  2. Associated Domains:XcodeのSigning & CapabilitiesでBranchドメイン(例:applinks:yourapp.app.link)を追加します。
  3. BrazeDelegate:BranchリンクをBrazeが直接処理するのではなく、Branch SDKにルーティングするためにbraze(_:shouldOpenURL:)を実装します。
  4. ユニバーサルリンクの転送:Braze SDKの設定でconfiguration.forwardUniversalLinks = trueを設定します。

実装の詳細とデバッグのガイダンスについては、ディープリンク用のBranchを参照してください。

New Stuff!