Adobe Targetによる最適化とパーソナライゼーション

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

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

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

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

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

前提条件

学習目標

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

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

セットアップ

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

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

Adobe Target

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

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

  2. 「サービスを追加」を選択し、サービス リストから「Adobe Target」を選択します。

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

    プロパティは、管理/プロパティ​のTarget UIで確認できます。 ​ コード ​を選択して、使用するプロパティのプロパティトークンを表示します。 プロパティトークンの形式は"at_property": "xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxx"です。値xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxxのみを入力してください。

    オプションで、ターゲット環境IDを指定できます。 Adobe Targetでは、環境を使用してサイトとプリプロダクション環境を整理し、管理とレポートの分離を容易にします。 あらかじめ用意されている環境には、実稼動、ステージングと開発があります。 詳しくは、環境および​ ターゲット環境IDを参照してください。

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

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

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

Adobe Journey Optimizer

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

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

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

  3. データストリーム > ​ フォルダー > Adobe Experience Platform​画面で、Offer Decisioning、Edge セグメンテーション​および​ Personalization宛先 ​が選択されていることを確認します。 Journey Optimizer レッスンにも従う場合は、Adobe Journey Optimizer​を選択します。 詳しくは、Adobe Experience Platform settingsを参照してください。

  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. 左側のパネルで「Configure」を選択し、OFFER DECISIONINGとTARGET​の下の「セットアップを検証」の横にある「 Add」を選択します。
  3. 「保存」を選択します。
  4. 左側のパネルで「設定を検証」を選択します。 データストリーム設定とSDK設定の両方がアプリケーションで検証されます。
    AJO Decisioningの検証 {modal="regular"}

A/B テストの作成

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

  1. Target UIで、上部バーから​ アクティビティ ​を選択します。

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

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

  4. 「作成」を選択します。
    ​ ターゲットアクティビティの作成 {modal="regular"}

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

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

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

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

      code language-json
      {
          "title": "Luma Analog 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://newluma.enablementadobe.com/images/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://newluma.enablementadobe.com/images/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」を選択し、場所(mbox)名(例:luma-mobileapp-abtest)を入力します。

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

      目標設定 {modal="regular"}

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

    1. アクティビティで 詳細を選択します。
    2. 「 再生 アクティベート」を選択して、A/B テストをアクティベートします。

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

アプリへのTargetの実装

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

NOTE
Install SDKs セクションを完了した場合、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を設定し、次の操作を実行します。
    • decisionScopeを定義します。A/B テストを表示する場所の配列です。

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

  6. Xcode プロジェクトナビゲーターで​Luma > Luma > Views > Personalization > TargetOffersView​に移動します。 func onPropositionsUpdateAT(location: String) async {関数を検索し、この関数のコードを調べます。 この関数の最も重要な部分はOptimize.onPropositionsUpdate API呼び出しです。この呼び出しは次のとおりです。

    • 決定範囲(A/B テストで定義した場所)に基づいて、現在のプロファイルの提案を取得します。
    • 提案からオファーを取得します。
    • アプリ内で適切に表示できるように、オファーのコンテンツをラップ解除します。
    • オファーに関するdisplayed() アクションをトリガーします。これにより、オファーが表示されることを知らせるイベントがPlatform Edge Networkに送られます。
  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-androidが​Android 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を設定し、次の操作を実行します。
    • decisionScopeを定義します。A/B テストを表示する場所の配列です。

    次に、関数は2つのAPIを呼び出します:Optimize.clearCachedPropositionsとOptimize.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 ​にある場合は、「LaunchedEffect」関数を追加して、「Personalization」タブの起動時にオファーが更新されるようにします。

    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 ネットワークに送信できます。 詳しくは、​ ターゲットパラメーターを参照してください。

アプリを使用して検証

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

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

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

    {width="300"}

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

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

  3. A/B テストで定義した2つのオファーのうち1つが、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 オファー設定の検証に役立つ追加機能については、Simulate​および​ イベントリスト ​のタブを参照できます。

次の手順

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 コミュニティのディスカッション投稿で共有してください。

次:結論と次の手順

recommendation-more-help
platform-learn-help-tutorial-mobile-sdk