Adobe Targetを使用した最適化とパーソナライズ

Platform Mobile SDKとAdobe Targetを使用して、モバイルアプリのエクスペリエンスを最適化およびパーソナライズする方法について説明します。

Target は、顧客体験をカスタマイズおよびパーソナライズするために必要なすべてを提供します。 Target は、Web サイト、モバイルサイト、アプリ、ソーシャルメディア、その他のデジタルチャネルの売上高を最大化するのに役立ちます。 Target は、A/B テスト、多変量分析テスト、製品とコンテンツのレコメンデーション、コンテンツのターゲット設定、AI を使用したコンテンツの自動パーソナライズなどを実行できます。 このレッスンでは、Target の A/B テスト機能に焦点を当てます。 詳しくは、A/B テストの概要 ​ 参照してください。

アーキテクチャ {modal="regular"}

Target で A/B テストを実行する前に、設定と統合が適切に行われていることを確認する必要があります。

NOTE
このレッスンはオプションで、A/B テストの実施を検討しているAdobe Target ユーザーにのみ適用されます。

前提条件

学習目標

このレッスンでは、次の操作を行います。

  • Target 統合のデータストリームを更新します。
  • Offer Decisioningと Target の拡張機能を使用してタグプロパティを更新します。
  • 提案イベントを取り込むようにスキーマを更新します。
  • Assuranceの設定を検証します。
  • Target で簡単な A/B テストを作成します。
  • アプリを更新して、Optimizer 拡張機能を登録します。
  • アプリに A/B テストを実装します。
  • Assuranceでの実装を検証します。

セットアップ

TIP
アプリを Journey Optimizer オファー ​ レッスンの一部として既に設定している場合は、この設定の節の手順のいくつかが既に実行されている可能性があります。

データストリーム設定を更新

Adobe Target

モバイルアプリからExperience Platform Edge NetworkAdobe Targetにデータが確実に転送されるようにするには、データストリーム設定を更新する必要があります。

  1. データ収集 UI で「データストリーム」を選択し、データストリームを選択します(例:Luma Mobile App)。

  2. サービスを追加 を選択してから、{ サービス リストから 2 Adobe Target} を選択してください。

  3. Target Premium ユーザーがプロパティトークンを使用する場合は、この統合に使用する Target プロパティトークン 値を入力します。 Target Standard ユーザーは、この手順をスキップできます。

    Target UI の 管理/プロパティ で、プロパティを確認できます。 「 コード 」を選択して、使用するプロパティのプロパティトークンを表示します。 プロパティトークンには "at_property": "xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxx" のような形式があります。値 xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxx のみを入力する必要があります。

    オプションで、ターゲット環境 ID を指定できます。 Target では、環境を使用してサイトと実稼動前の環境を整理し、管理を容易にし、レポートを個別に作成できます。 プリセットされた環境には、実稼働、ステージング、開発が含まれます。 詳しくは、​ 環境 ​ および ​ ターゲット環境 ID を参照してください。

    オプションで、Target サードパーティ ID 名前空間を指定して、ID 名前空間(例:CRM ID)でのプロファイル同期をサポートすることができます。 詳しくは、Target サードパーティ ID 名前空間 ​ を参照してください。

  4. 保存」を選択します。

    ​ データストリームへのターゲットの追加 ​ {modal="regular"}

Adobe Journey Optimizer

モバイルアプリからEdge Networkに送信されるデータがJourney Optimizer - Decision Management に転送されるようにするには、データストリーム設定を更新します。

  1. データ収集 UI で「データストリーム」を選択し、データストリームを選択します(例:Luma Mobile App)。

  2. 2Experience Platform の「詳細 」を選択し、コンテキストメニューから 編集 編集 を選択します。

  3. データストリーム/ フォルダー /Adobe Experience Platform 画面で、「Offer Decisioning」、「Edge セグメント化」、「Personalizationの宛先」が選択されていることを確認します。 Journey Optimizerのレッスンにも従う場合は、「Adobe Journey Optimizer」を選択します。 詳しくは、Adobe Experience Platform 設定を参照してください。

  4. データストリーム設定を保存するには、「保存」を選択します。

    AEP データストリーム設定 ​ {modal="regular"}

Offer Decisioningと Target のタグ拡張機能のインストール

このレッスンでは、Target での A/B テストについて説明しますが、テスト結果はオファーと見なされ、Adobe Offer Decisioningと Target タグ拡張機能を使用してAdobe インフラストラクチャに実装されます。 この拡張機能では、Journey Optimizerと Target の両方が提供するオファーを処理します。

  1. Tags に移動し、モバイルタグプロパティを見つけて、プロパティを開きます。

  2. 拡張機能 を選択します。

  3. カタログ を選択します。

  4. Offer Decisioningと Target 拡張機能を検索します。

  5. 拡張機能をインストールします。 拡張機能では、追加の設定は必要ありません。

    Offer Decisioningと Target 拡張機能の追加 ​ {modal="regular"}

スキーマを更新

  1. データ収集インターフェイスに移動し、左パネルから スキーマ を選択します。
  2. 上部のバーから 参照 を選択します。
  3. スキーマを選択して開きます。
  4. スキーマエディターで、「フィールドグループ の横にある「 追加 追加 を選択します。
  5. フィールドグループの追加 ダイアログで、proposition を検索し、エクスペリエンスイベント – 提案インタラクション および フィールドグループの追加 を選択します。
    ​ 提案 ​ {modal="regular"}
  6. スキーマへの変更を保存するには、「保存」を選択します。

Assuranceでの設定の検証

Assuranceの設定を検証するには:

  1. Assurance UI に移動します。
  2. 左側のパネルで 設定 を選択し、{6 OFFER DECISIONINGと TARGET の下にある 設定を検証 の横にある「追加 を選択します。
  3. 保存」を選択します。
  4. 左パネルで 設定を検証 を選択します。 データストリームの設定と、アプリケーションでのSDKの設定の両方が検証されます。
    AJO Decisioning の検証 ​ {modal="regular"}

A/B テストの作成

概要で説明したように、Adobe Targetで作成してモバイルアプリに実装できるアクティビティには、多くの種類があります。 このレッスンでは、A/B テストを実装します。

  1. Target UI の上部バーで「アクティビティ」をクリックします。

  2. アクティビティを作成A/B テスト をコンテキストメニューから選択します。

  3. A/B テストアクティビティを作成 ダイアログで、タイプ として モバイル を選択し、Workspaceを選択 リストからワークスペースを選択します。 Target Premium ユーザーで、データストリームでプロパティトークンを指定した場合は、プロパティを選択 リストからプロパティを選択します。

  4. 作成」を選択します。
    Target アクティビティを作成 ​ {modal="regular"}

  5. 名称未設定アクティビティ 画面の エクスペリエンス ステップで、次の操作を行います。

    1. luma-mobileapp-abtest 場所 1 の下の 場所を選択 を入力します。 この場所名(mbox と呼ばれることが多い)は、アプリの実装で後で使用されます。

    2. コンテンツ の横にある 詳細 を選択し、コンテキストメニューから JSON オファーを作成 を選択します。

    3. JSON オファーを作成 ダイアログに、次の JSON を貼り付けます。

      code language-json
      {
          "title": "Luma Anaolog Watch",
          "text": "Designed to stand up to your active lifestyle, this women's Luma Analog Watch features a tasteful brushed chrome finish and a stainless steel, water-resistant construction for lasting durability.",
          "image": "https://luma.enablementadobe.com/content/dam/luma/en/products/gear/watches/Luma_Analog_Watch.jpg"
      }
      

      ​ エクスペリエンス A {modal="regular"}

      作成」を選択します。

    4. エクスペリエンス の横にある「+」を選択して、エクスペリエンス B を追加します。

    5. エクスペリエンス B に対して手順 b と c を繰り返しますが、代わりに Aim Analog Watch をタイトルとして使用し、次の JSON を貼り付けます。

      code language-json
      {
          "title": "Aim Analog Watch",
          "text": "The flexible, rubberized strap is contoured to conform to the shape of your wrist for a comfortable all-day fit. The face features three illuminated hands, a digital read-out of the current time, and stopwatch functions.",
          "image": "https://luma.enablementadobe.com/content/dam/luma/en/products/gear/watches/Aim_Watch.jpg"
      }
      
  6. Targeting のステップでは、A/B テストの設定をレビューします。 デフォルトでは、両方のオファーがすべての訪問者に均等に割り当てられます。 「次へ」をクリックして続行します。

    ​ ターゲティング ​ {modal="regular"}

  7. 目標と設定 手順で、次の操作を行います。

    1. 名称未設定アクティビティの名前を Luma Mobile SDK Tutorial - A/B Test Example などに変更します。

    2. A/B テストの 目的 を入力します(例:A/B Test for Luma mobile app tutorial)。

    3. 目標指標/自分のプライマリ目標 タイルで コンバージョンmbox を表示 を選択し、luma-mobileapp-abtest などの場所(mbox)名を入力します。

    4. 保存して閉じる を選択します。

      ​ 目標の設定 ​ {modal="regular"}

  8. すべてのアクティビティ 画面に戻ります。

    1. アクティビティで その他 を選択します。
    2. 再生 アクティベート を選択して、A/B テストをアクティベートします。

    アクティブ化 {modal="regular"}

アプリへの Target の実装

前のレッスンで説明したように、モバイルタグ拡張機能をインストールしても、設定のみが提供されます。 次に、Optimize SDKをインストールして登録する必要があります。 これらの手順が明確でない場合は、「SDK のインストール ​ の節を参照し ​ ください。

NOTE
SDK のインストール ​ の節を完了した場合、SDKは既にインストールされているので、この手順をスキップできます。
iOS
  1. Xcode で、AEP Optimize がパッケージの依存関係のパッケージの一覧に追加されていることを確認します。 Swift パッケージマネージャー ​ を参照してください。

  2. Xcode プロジェクトナビゲーターで Luma/Luma/AppDelegate に移動します。

  3. AEPOptimize が読み込みのリストに含まれていることを確認します。

    import AEPOptimize

  4. Optimize.self が、登録している拡張機能の配列の一部であることを確認します。

    code language-swift
    let extensions = [
        AEPIdentity.Identity.self,
        Lifecycle.self,
        Signal.self,
        Edge.self,
        AEPEdgeIdentity.Identity.self,
        Consent.self,
        UserProfile.self,
        Places.self,
        Messaging.self,
        Optimize.self,
        Assurance.self
    ]
    
  5. Xcode プロジェクトナビゲーターで Luma/Luma/Utils/MobileSDK に移動します。 func updatePropositionAT(ecid: String, location: String) async 関数を検索します。 次のコードを追加します。

    code language-swift
    // set up the XDM dictionary, define decision scope and call update proposition API
    Task {
        let ecid = ["ECID" : ["id" : ecid, "primary" : true] as [String : Any]]
        let identityMap = ["identityMap" : ecid]
        let xdmData = ["xdm" : identityMap]
        let decisionScope = DecisionScope(name: location)
        Optimize.clearCachedPropositions()
        Optimize.updatePropositions(for: [decisionScope], withXdm: xdmData) { data, error in
            if let error = error {
                Logger.aepMobileSDK.error("MobileSDK - updatePropositionsAT: Error updating propositions: \(error.localizedDescription)")
            }
        }
    }
    

    この関数:

    • a/B テストを提示する必要があるプロファイルを識別する ECID を含む、XDM 辞書 xdmData ードを設定します。
    • a/B テストを提示する場所の decisionScope 配列を定義します。

    次に、関数は Optimize.clearCachedPropositionsOptimize.updatePropositions の 2 つの API を呼び出します。 これらの関数は、キャッシュされた提案をすべてクリアし、このプロファイルの提案を更新します。 このコンテキストでの提案は、Target アクティビティ(A/B テスト)から選択され、A/B テストの作成 ​ で定義したエクスペリエンス(オファー)です。

  6. Xcode プロジェクトナビゲーターで Luma/Luma/Views/Personalization/TargetOffersView に移動します。 func onPropositionsUpdateAT(location: String) async { 関数を見つけて、この関数のコードを調べます。 この関数の最も重要な部分は、Optimize.onPropositionsUpdate API 呼び出しです。この呼び出しは、次のような特徴があります。

    • 決定範囲(A/B テストで定義した場所)に基づいて、現在のプロファイルの提案を取得します。
    • 提案からオファーを取得します。
    • オファーのコンテンツを展開して、アプリで適切に表示できるようにします。
    • オファーが表示されたことを通知するイベントを Platform Edge Networkに送り返す、オファーの displayed() アクションをトリガーに設定します。
  7. TargetOffersView のまま、次のコードを .onFirstAppear 修飾子に追加します。 このコードにより、オファーを更新するコールバックが 1 回だけ登録されるようになります。

    code language-swift
    // Invoke callback for offer updates
    Task {
        await self.onPropositionsUpdateAT(location: location)
    }
    
  8. TargetOffersView のまま、次のコードを .task 修飾子に追加します。 このコードは、ビューが更新されると、オファーを更新します。

    code language-swift
    // Clear and update offers
    await self.updatePropositionsAT(ecid: currentEcid, location: location)
    
Android
  1. Android Studio で、aepsdk-optimize-androidAndroid ChevronDown > Gradle Scripts build.gradle.kts の依存関係に含まれていることを確認します。 Gradle を参照。

  2. Android Studio ナビゲーターで app/kotlin+java/com.adobe.luma.tutorial.android/MainActivity に移動します。

  3. Optimize が読み込みのリストに含まれていることを確認します。

    code language-kotlin
    import com.adobe.marketing.mobile.optimize.Optimize
    
  4. Optimize.EXTENSION が、登録している拡張機能の配列の一部であることを確認します。

    code language-kotlin
    val extensions = listOf(
       Identity.EXTENSION,
       Lifecycle.EXTENSION,
       Signal.EXTENSION,
       Edge.EXTENSION,
       Consent.EXTENSION,
       UserProfile.EXTENSION,
       Places.EXTENSION,
       Messaging.EXTENSION,
       Optimize.EXTENSION,
       Assurance.EXTENSION
    )
    
  5. Android Studio ナビゲーターで Android ChevronDown /app/kotlin+java/com.adobe.luma.tutorial.android/models/MobileSDK に移動します。 suspend fun updatePropositionsAT(ecid: String, location: String) 関数を検索します。 次のコードを追加します。

    code language-kotlin
    // set up the XDM dictionary, define decision scope and call update proposition API
    withContext(Dispatchers.IO) {
        val ecidMap = mapOf("ECID" to mapOf("id" to ecid, "primary" to true))
        val identityMap = mapOf("identityMap" to ecidMap)
        val xdmData = mapOf("xdm" to identityMap)
        val decisionScope = DecisionScope(location)
        Optimize.clearCachedPropositions()
        Optimize.updatePropositions(listOf(decisionScope), xdmData, null, object :
            AdobeCallbackWithOptimizeError<MutableMap<DecisionScope?, OptimizeProposition?>?> {
            override fun fail(optimizeError: AEPOptimizeError?) {
                val responseError = optimizeError
                Log.i("MobileSDK", "updatePropositionsAT error: ${responseError}")
            }
            override fun call(propositionsMap: MutableMap<DecisionScope?, OptimizeProposition?>?) {
                val responseMap = propositionsMap
                Log.i("MobileSDK", "updatePropositionsOD call: ${responseMap}")
            }
        })
    }
    

    この関数:

    • a/B テストを提示する必要があるプロファイルを識別する ECID を含む、XDM 辞書 xdmData ードを設定します。
    • a/B テストを提示する場所の decisionScope 配列を定義します。

    次に、関数は 2 つの API (Optimize.clearCachedPropositionsOptimize.updatePropositions)を呼び出します。 これらの関数は、キャッシュされた提案をすべてクリアし、このプロファイルの提案を更新します。 このコンテキストでの提案は、Target アクティビティ(A/B テスト)から選択され、A/B テストの作成 ​ で定義したエクスペリエンス(オファー)です。

  6. Android Studio ナビゲーターで app/kotlin+java/com.adobe.luma.tutorial.android/views/TargetOffers.kt に移動します。 fun onPropositionsUpdateAT(location: String): List<OfferItem> 関数を見つけて、この関数のコードを調べます。 この関数の最も重要な部分は、Optimize.onPropositionsUpdate API 呼び出しです。この呼び出しは、次のような特徴があります。

    • 決定範囲(A/B テストで定義した場所)に基づいて、現在のプロファイルの提案を取得します。
    • 提案からオファーを取得します。
    • オファーのコンテンツを展開して、アプリで適切に表示できるようにします。
    • オファーを返します。
  7. 引き続き TargetOffers.kt で、「Personalization」タブを起動したときにオファーが確実に更新されるように、LaunchedEffect 関数を追加します。

    code language-kotlin
    // recompose the view when the number of received offers changes
    LaunchedEffect(offersAT.count()) {
        updatePropositionsAT(currentEcid, MobileSDK.shared.targetLocation.value)
        offersAT = onPropositionsUpdateAT(MobileSDK.shared.targetLocation.value)
    }
    

Optimize.updatePropositions API の呼び出し時にデータディクショナリに追加することで、パーソナライゼーションクエリリクエストで追加の Target パラメーター(mbox、プロファイル、製品、注文パラメーターなど)を Experience Edge Network に送信できます。 詳細については、「ターゲット・パラメータ ​ を参照 ​ てください。

アプリを使用した検証

iOS
  1. 再生 を使用して、シミュレータまたは Xcode の物理デバイスでアプリを再構築して実行します。

  2. Personalization」タブに移動します

  3. 一番下までスクロールすると、A/B テストで定義した 2 つのオファーのいずれかが TARGET タイルに表示されます。

    {width="300"}

Android
  1. 再生 を使用して、シミュレーターまたはAndroid Studio の物理デバイスでアプリを再構築して実行します。

  2. Personalization」タブに移動します。

  3. A/B テストで定義した 2 つのオファーのいずれかが TARGET タイルの下部のボックスに表示されます。

    {width="300"}

Assuranceでの実装の検証

Assuranceで A/B テストを検証するには:

  1. ​ 設定手順 ​ の節を参照して、シミュレーターまたはデバイスをAssuranceに接続します。

  2. 左側のパネルで 設定 を選択し、 OFFER DECSIONING AND TARGET の下の レビューとシミュレート の横にある「追加 を選択します。

  3. 保存」を選択します。

  4. 左パネルで レビューとシミュレート を選択します。 データストリームの設定と、アプリケーションでのSDKの設定の両方が検証されます。

  5. 上部のバーで「リクエスト」を選択します。 Target リクエストが表示されます。
    AJO Decisioning の検証 ​ {modal="regular"}

  6. シミュレート」タブと「イベントリスト」タブを探索して、Target オファーの設定を検証するのに役立つ追加機能を確認できます。

次の手順

これで、関連する場合および該当する場合に、A/B テストまたはその他の Target アクティビティ(エクスペリエンスのターゲット設定、多変量分析テストなど)のアプリへの追加を開始するためのすべてのツールが用意できました。 Optimize 拡張機能の GitHub リポジトリーでは ​Adobe Target オファーのトラッキング方法に関する専用の ​ チュートリアル ​ へのリンクも確認できます。

SUCCESS
A/B テストに対してアプリを有効にし、Adobe Experience Platform Mobile SDKのOffer Decisioningおよび Target 拡張機能を使用した A/B テストの結果を表示しました。
Adobe Experience Platform Mobile SDKの学習にご協力いただき、ありがとうございます。 ご不明な点がある場合や、一般的なフィードバックをお寄せになる場合、または今後のコンテンツに関するご提案がある場合は、この Experience League Community Discussion の投稿 ​ でお知らせください。

次のトピック:結論と次のステップ

recommendation-more-help
9fed61f5-c338-47ad-8005-0b89a5f4af8b