このページ:メールや SMS コンテンツにディープリンクを作成し、Adobe Journey Optimizer で設定し、iOS および Android アプリで追跡されたリンクを処理して、受信者がアプリ内の適切な画面に表示されるようにする方法について説明します。
ディープリンクは、メールや SMS メッセージの受信者を、モバイルアプリの特定の画面やコンテンツに移動するのに役立ちます。人物を web ブラウザーやアプリストアを通じてルーティングすることなく、意図したアプリ内エクスペリエンスに直接移動できるので、関連性の高いブランドに即したジャーニーを維持できます。
受信者がディープリンクをクリックすると、受信者は意図したアプリ内コンテンツに直接移動します(以下を完了した場合)。
/ee/v1/mclick/*)を使用して、iOS と Android の両方でディープリンクをサポートし、互換性とクリックのトラッキングを確保します。ディープリンクのオーサリング authoring
メール authoring-email
メールメッセージの場合、ディープリンクを挿入するには、次の 2 つのオプションがあります。
-
E メールデザイナー:リンクトラッキングが有効になっていることを確認します。リンクする要素(テキスト、ボタン、画像)を選択し、コンテキストツールバーの「リンクを挿入」をクリックして、「ディープリンク」を選択し、ディープリンク URL を入力します。 リンクの挿入の詳細情報
-
パーソナライゼーションエディター(コード):次のスニペットを使用して、ディープリンクを HTML に直接挿入します。
code language-html <a class="arc-link" data-nl-type="DEEPLINK" href="<<deeplink_url>>" id="acr-link-7821368" style="text-decoration:underline;" target="_blank" data-tracking-type="DEEPLINK">Click Here</a>note tip TIP <<deeplink_url>>を実際のディープリンク URL に置き換え、各ブロックに一意のidを使用して競合を回避します。
SMS authoring-sms
SMS の場合、ディープリンクは、パーソナライゼーションエディターの URL ヘルパー関数を使用して作成されます。SMS コンテンツにリンクを追加する方法について詳しくは、この節を参照してください。
SMS コンテンツにディープリンクを挿入するには、次の構文を使用します。
{{url originalUrl='<<url>>' type='DEEPLINK' action='CLICK'}}
<<url>> を実際のディープリンク URLに置き換えます。Adobe Journey Optimizer の設定 configuration
モバイルアプリのメールや SMS でディープリンクを使用するには、以下の設定手順を完了します。
-
Journey Optimizer で、ディープリンクが有効になっているサブドメインをデリゲートします。詳細情報
-
iOS の AASA ファイルや Android の assetLinks.json ファイルをサブドメインにホストします。詳しくは、アドビカスタマーケアまたはアドビ担当者にお問い合わせください。
-
iOS(AASA)の場合:
- 委任されたサブドメイン
- アプリバンドル ID
-
Android(assetLinks.json)の場合:
- 委任されたサブドメイン
- アプリバンドル ID
- SHA-256 証明書のフィンガープリント
-
/ee/v1/mclick/* の下にある URL が使用されます。モバイルアプリの実装 mobile-implementation
この節では、一般的な HTTPS 設定(ユニバーサルリンクとアプリリンク)で、単一の URL で次の操作が実行できるように、Adobe Journey Optimizer を使用してモバイルディープリンクを実装する方法について説明します。
- アプリがインストールされた場合は、モバイルアプリ内の特定の画面を開く。
- アプリがインストールされていない場合は、web サイトをフォールバックとして開く。
メッセージに対してリンクトラッキングが有効になっている場合、Journey Optimizer は引き続きこれらのクリックを追跡して、レポートに含め、メッセージで実行する場合は、コンテンツ実験に使用できます。
この節では、ディープリンクの一般的な実装パターンについて説明します。正確な設定は、アプリアーキテクチャとルーティングフレームワークによって異なります。
iOS(ユニバーサルリンク) ios-implementation
-
Xcodeで、署名と機能/+ 機能/関連ドメインを通じてターゲットを選択します。
-
デリゲートされたサブドメインのエントリを追加します。例:
code language-text applinks:www.mybusiness.com applinks:data.email.mybusiness.com -
アプリ内のユニバーサルリンクを処理し、応答ヘッダーから元のリンクを取得します。
accordion 例:シーンを使用する iOS 13 以降 code language-swift class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let incomingURL = userActivity.webpageURL else { return } handleUniversalLink(url: incomingURL) } private func handleUniversalLink(url: URL) { // Only handle AJO tracked mobile clicks guard url.host == "data.email.mybusiness.com", url.path.hasPrefix("/ee/v1/mclick") else { // Could also handle direct www.mybusiness.com links here return } resolveTrackedUrlAndRoute(url) } private func resolveTrackedUrlAndRoute(_ trackedUrl: URL) { var request = URLRequest(url: trackedUrl) request.httpMethod = "GET" URLSession.shared.dataTask(with: request) { _, response, error in guard error == nil, let httpResponse = response as? HTTPURLResponse, let locationValue = httpResponse.allHeaderFields["Location"] as? String, let finalUrl = URL(string: locationValue) else { return } DispatchQueue.main.async { self.routeToDestination(finalUrl) } }.resume() } private func routeToDestination(_ url: URL) { // Example: map URL paths to screens // https://www.mybusiness.com/dashboard/offers/coupons // → OffersViewController for Coupons } }
mclick URL に対して GET を実行し、Location ヘッダーを読み取り、最終的な URL に基づいてルーティングする必要があります。mclick URL を開くようなことはしないでください。それではディープリンクの目的が果たせなくなります。Android(アプリリンク) android-implementation
-
Android アプリにアプリリンクのインテントフィルターを追加します。
code language-xml <activity android:name=".DeepLinkActivity" android:exported="true"> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="data.email.mybusiness.com" android:pathPrefix="/ee/v1/mclick" /> </intent-filter> </activity> -
ディープリンクハンドラーを実装します。
accordion Kotlin の場合: code language-kotlin class DeepLinkActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val trackedUri = intent?.data if (trackedUri == null || trackedUri.host != "data.email.mybusiness.com" || !trackedUri.path.orEmpty().startsWith("/ee/v1/mclick")) { finish() return } resolveTrackedUrlAndRoute(trackedUri) } private fun resolveTrackedUrlAndRoute(trackedUri: Uri) { lifecycleScope.launch(Dispatchers.IO) { try { val finalUrl = followRedirect(trackedUri.toString()) withContext(Dispatchers.Main) { routeToDestination(finalUrl) finish() } } catch (e: Exception) { // Optionally log error, fallback to browser finish() } } } private fun followRedirect(trackedUrl: String): Uri { val client = OkHttpClient.Builder() .followRedirects(false) // We want to read Location ourselves .build() val request = Request.Builder() .url(trackedUrl) .get() .build() client.newCall(request).execute().use { response -> val location = response.header("Location") ?: throw IllegalStateException("Missing Location header") return Uri.parse(location) } } private fun routeToDestination(finalUri: Uri) { // Example: interpret https://www.mybusiness.com/dashboard/offers/coupons // and open the correct Activity / Fragment } }
mclick URLを呼び出し、Location ヘッダーを使用して最終的な宛先を決定する必要があります。followRedirects(false) を使用して、リダイレクト処理を制御し、必要に応じて分析を正確にログ記録できます。推奨プラクティス deeplink-best-practices
- 安定したパスを使用:アプリの UI 変更の影響を受けにくいルート(例:
/tab/3/view/2の代わりに/account/orders)を優先します。 - 追跡されるパスを考慮:リンクトラッキングが有効な場合、クリックしたリンクは追跡されるパスパターン(例:
/ee/v1/mclick/)を使用する場合があります。追跡されるリンクを解決した後の最終的な URL を、ルーターが解析できることを確認してください。 - パラメーターを予測可能なままにする:一貫性のあるパラメータスキーム(例:
?orderId=12345)を定義します。 - URL 内の機密データを回避:秘密鍵や個人データをディープリンクの URL に直接配置しないようにします。
- ディープリンクをテスト:本配信前確認を送信し、アプリがインストールされているデバイスでディープリンクをクリックします。
- 実際のデバイスで検証:ユニバーサルリンクやトラッキングリンクの解決動作は、シミュレーターではなく物理デバイス検証する方が信頼性が高くなります。
- アプリサイドのルーティングを検証:ディープリンクで予想される画面が開かない場合は、アプリサイドのルーティングと URL の形式(ホスト/パス/クエリおよび URL エンコーディング)を検証します。
- アプリの初期化を念頭に置く:アプリリンクやユニバーサルリンクの動作は、アプリがインストールされ、1 回以上開かれた後に最も信頼性が高くなります。
トラブルシューティングと FAQ troubleshooting-faq
- URLが、アプリが処理するように登録されているホストおよびパスのパターンと一致することを確認してください。これには、リンクトラッキングが有効な場合の追跡されるクリックパス(例:
/ee/v1/mclick/の下にあるパス)も含まれます。 - iOS のユニバーサルリンクやAndroid のアプリリンクの場合は、ドメインの関連付け(AASA/
assetlinks.json)が正しく設定され、到達できることを確認してください。 - 実際のデバイスでテストしてください(シミュレーター/エミュレーターでは、リンクの関連付けに関する動作が異なる場合があります)。
- アプリサイドのルーターが URL のパス/クエリを正しく解析することを確認してください。
- URL エンコーディングを確認してください。予約済みの文字は URL エンコードされている必要があります。
- パラメーター名と値が、ルーターの想定と一致することを検証してください。
- 同じ HTTPS URL を web サイトで指定できる場合、アプリがインストールされていない際に、そのリンクをフォールバックとして web ページで開くことができます(web の宛先やルーティングを適切に設定してください)。
-
ディープリンクを含む本配信前確認を作成し、iOS デバイスや Android デバイス(アプリがインストールされている場合とされていない場合の両方)でクリックしてください。
-
以下の点について検証してください。
- 最終的なメールまたは SMS のリンク値(ホスト/パス/クエリ)
- OS レベルでの関連付け(ユニバーサルリンクやアプリリンクを使用している場合)
- アプリ内でのルーティング結果
assetlinks.json の設定をリクエストしてください。appname://path)を使用する必要がありますか?appname://path)を使用できますが、推奨されるアプローチはユニバーサルリンクまたはアプリリンク(例:https://)で、このページの設定および実装の節で説明されている HTTPS ベースの設定と一致します。mclick の URL に対して GET を実行した際に Location ヘッダーで返される最終的な URL に含まれるので、アプリ内分析に使用できます。/ee/v1/click/ URL のユーザーエクスペリエンスは何ですか?mclick フローを通じたアプリのディープリンクとして処理されるのではなく、デバイスのデフォルトの web ブラウザーで開かれます(標準的なクリックの追跡の動作)。