メールや SMS でのディープリンクの使用と設定 deeplinks

このページ:​メールや SMS コンテンツにディープリンクを作成し、Adobe Journey Optimizer で設定し、iOS および Android アプリで追跡されたリンクを処理して、受信者がアプリ内の適切な画面に表示されるようにする方法について説明します。

ディープリンクは、メールや SMS メッセージの受信者を、モバイルアプリの特定の画面やコンテンツに移動するのに役立ちます。人物を web ブラウザーやアプリストアを通じてルーティングすることなく、意図したアプリ内エクスペリエンスに直接移動できるので、関連性の高いブランドに即したジャーニーを維持できます。

受信者がディープリンクをクリックすると、受信者は意図したアプリ内コンテンツに直接移動します(以下を完了した場合)。

NOTE
Adobe Journey Optimizer は、追跡された URL(/ee/v1/mclick/*)を使用して、iOS と Android の両方でディープリンクをサポートし、互換性とクリックのトラッキングを確保します。

ディープリンクのオーサリング authoring

CAUTION
このページの設定およびモバイルアプリ実装の手順を完了しない限り、ディープリンクは機能しません。

メール 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'}}
TIP
<<url>> を実際のディープリンク URLに置き換えます。

Adobe Journey Optimizer の設定 configuration

モバイルアプリのメールや SMS でディープリンクを使用するには、以下の設定手順を完了します。

NOTE
この節は、ユニバーサルリンク(iOS)​や​アプリリンク(Android)(HTTPS ベースのディープリンク)を使用する場合に適用されます。
  1. Journey Optimizer で、ディープリンクが有効になっているサブドメインをデリゲートします。詳細情報

  2. iOS の AASA ファイルや Android の assetLinks.json ファイルをサブドメインにホストします。詳しくは、アドビカスタマーケアまたはアドビ担当者にお問い合わせください。

    • iOS(AASA)の場合

      • 委任されたサブドメイン
      • アプリバンドル ID
    • Android(assetLinks.json)の場合

      • 委任されたサブドメイン
      • アプリバンドル ID
      • SHA-256 証明書のフィンガープリント
IMPORTANT
Adobe インフラストラクチャを経由するディープリンクは、メッセージの「メールトラッキング設定」セクションまたは SMS キャンペーンの「アクショントラッキング」セクションでリンクトラッキングが有効になっている場合に適用されます。追跡されるディープリンククリックでは、アドビがホストおよび解決する /ee/v1/mclick/* の下にある URL が使用されます。
追跡されていない​リンクの場合、URL は Adobe システム経由で書き換えられません。リンクが意図したとおりにアプリを開くようにするには、独自のドメインとホスティングでユニバーサルリンクまたはアプリリンクを設定する必要があります。

モバイルアプリの実装 mobile-implementation

この節では、一般的な HTTPS 設定(ユニバーサルリンクとアプリリンク)で、単一の URL で次の操作が実行できるように、Adobe Journey Optimizer を使用してモバイルディープリンクを実装する方法について説明します。

  • アプリがインストールされた場合は、モバイルアプリ内の特定の画面を開く。
  • アプリがインストールされていない場合は、web サイトをフォールバックとして開く。

メッセージに対してリンクトラッキングが有効になっている場合、Journey Optimizer は引き続きこれらのクリックを追跡して、レポートに含め、メッセージで実行する場合は、コンテンツ実験に使用できます。

この節では、ディープリンクの一般的な実装パターンについて説明します。正確な設定は、アプリアーキテクチャとルーティングフレームワークによって異なります。

iOS(ユニバーサルリンク) ios-implementation

  1. Xcodeで、署名と機能+ 機能関連ドメイン​を通じてターゲットを選択します。

  2. デリゲートされたサブドメインのエントリを追加します。例:

    code language-text
    applinks:www.mybusiness.com
    applinks:data.email.mybusiness.com
    
  3. アプリ内のユニバーサルリンクを処理し、応答ヘッダーから元のリンクを取得します。

    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
        }
    }
    
IMPORTANT
アプリは mclick URL に対して GET を実行し、Location ヘッダーを読み取り、最終的な URL に基づいてルーティングする必要があります。
単に Safari で mclick URL を開くようなことはしないでください。それではディープリンクの目的が果たせなくなります。

Android(アプリリンク) android-implementation

  1. 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>
    
  2. ディープリンクハンドラーを実装します。

    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
        }
    }
    
IMPORTANT
iOS と同様に、アプリは mclick URLを呼び出し、Location ヘッダーを使用して最終的な宛先を決定する必要があります。
followRedirects(false) を使用して、リダイレクト処理を制御し、必要に応じて分析を正確にログ記録できます。
ルーティングロジックはアプリに固有です。URL から画面への明確なマッピングを定義します。
  • 安定したパスを使用:アプリの 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 の宛先やルーティングを適切に設定してください)。
パラメーターに特殊文字を安全に含めるにはどうすればよいですか?
クエリパラメーターの値を URL エンコードしてください。 これにより、配信とレンダリングの問題を軽減し、アプリの解析エラーを防ぐことができます。
エンドツーエンドのテストはどのように行う必要がありますか?
  • ディープリンクを含む本配信前確認を作成し、iOS デバイスや Android デバイス(アプリがインストールされている場合とされていない場合の両方)でクリックしてください。

  • 以下の点について検証してください。

    • 最終的なメールまたは SMS のリンク値(ホスト/パス/クエリ)
    • OS レベルでの関連付け(ユニバーサルリンクやアプリリンクを使用している場合)
    • アプリ内でのルーティング結果
1 つのアプリがありますが、組織用に異なるサブドメインがあります。サブドメインごとに AASA と assetLinks.json の作成をリクエストする必要がありますか?
はい。 デリゲートされたすべてのサブドメインでディープリンクが必要な場合は、その機能をサポートする必要がある各サブドメインに対する AASA と assetlinks.json の設定をリクエストしてください。
設定する URL には、ディープリンク形式(例:appname://path)を使用する必要がありますか?
カスタム URL スキーム(例:appname://path)を使用できますが、推奨されるアプローチはユニバーサルリンクまたはアプリリンク(例:https://)で、このページの設定および実装の節で説明されている HTTPS ベースの設定と一致します。
URL の UTM パラメーターは、分析用にモバイルアプリで使用できますか?
はい。 Journey Optimizer で設定した UTM パラメーターは、アプリが mclick の URL に対して GET を実行した際に Location ヘッダーで返される最終的な URL に含まれるので、アプリ内分析に使用できます。
/ee/v1/click/ URL のユーザーエクスペリエンスは何ですか?
リンクは、このページで説明されている mclick フローを通じたアプリのディープリンクとして処理されるのではなく、デバイスのデフォルトの web ブラウザーで開かれます(標準的なクリックの追跡の動作)。
recommendation-more-help
journey-optimizer-help