意思決定管理機能を使用したオファーの作成と表示

Experience Platform Mobile SDKを使用して、モバイルアプリでJourney Optimizer Decision Managementのオファーを表示する方法について説明します。

TIP
意思決定管理の後継について詳しくは、決定付きオファーの作成と表示を参照してください。

Journey Optimizer Decision Managementは、あらゆる顧客接点をまたいで、最適なオファーとエクスペリエンスをタイミングよく提供するのに役立ちます。 設計が完了したら、パーソナライズされたオファーでオーディエンスをターゲティングします。

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

意思決定管理では、さまざまなオファーを一元管理するライブラリと、Adobe Experience Platformで構築された詳細なリアルタイムプロファイルにルールと定義を適用する意思決定エンジンを利用して、容易にパーソナライズできます。 その結果、適切なオファーをタイミングよく顧客に提供できるようになります。 詳しくは、意思決定管理についてを参照してください。

NOTE
このレッスンはオプションで、意思決定管理機能を使用してモバイルアプリでオファーを表示することを検討しているJourney Optimizer ユーザーにのみ適用されます。

前提条件

  • SDKがインストールされ、設定されたアプリが正常に構築され、実行されました。
  • Adobe Experience Platform用アプリを設定します。
  • Journey Optimizerへのアクセス – オファーと決定を管理するための適切な権限を持つ意思決定管理

学習目標

このレッスンでは、次のことをおこないます

  • Decision Management用にEdge設定を更新します。
  • Offer DecisioningおよびTarget拡張機能でタグプロパティを更新します。
  • スキーマを更新して、提案イベントを取得します。
  • Assuranceで設定を検証します。
  • Journey Optimizer - Decision Managementのオファーに基づいて、オファーの決定を作成します。
  • アプリを更新して、Optimizer拡張機能を登録します。
  • アプリに意思決定管理からのオファーを実装します。

セットアップ

TIP
Target🔗 レッスンでのA/B テストの一部として環境を既に設定している場合は、この設定セクションの手順の一部を既に実行している可能性があります。

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

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

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

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

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

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

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

Offer Decisioningと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"}

プレースメントを作成

実際にオファーを作成する前に、これらのオファーをモバイルアプリ内でどのように、どこに配置できるかを定義する必要があります。 意思決定管理では、この目的のプレースメントを定義し、JSON ペイロードをサポートするモバイルチャネルのプレースメントを定義します。

  1. Journey Optimizer UIで、左側のパネルの​ DECISION MANAGEMENT ​から ​ コンポーネント ​ コンポーネント​を選択します。

  2. 上部バーから「配置」を選択します。

  3. Mobile JSONチャネルタイプ​として​Mobile、および​ コンテンツタイプ ​として​ JSON ​の名前のプレースメントがリストされていない場合は、プレースメントを作成する必要があります。 それ以外は、​ オファーの作成に進みます。

モバイル JSON プレースメントを作成するには:

  1. 追加 プレースメントの作成」を選択します。

    1. 詳細 セクションで、名前​としてMobile JSONと入力し、チャネルタイプ​から​ モバイル ​を、コンテンツタイプ​から​ JSON ​を選択します。
    2. プレースメントを保存するには、保存​を選択します。

    ​ プレースメントの作成 {modal="regular"}

オファーの作成

  1. Journey Optimizer UIで、左側のパネルの​ DECISION MANAGEMENT ​から Offers Offers​を選択します。

  2. オファー​画面で、参照​を選択して、オファーのリストを表示します。

  3. オファーを作成」を選択します。

  4. 新しいオファー ダイアログで、パーソナライズされたオファー​を選択し、次へ​をクリックします。

  5. 新しいパーソナライズされたオファーを作成​の​詳細 ステップで:

    1. オファーの​名前 (例:Luma - Juno Jacket)を入力し、開始日時​と​ 終了日時 ​を入力します。 これらの日付内のオファーのみが決定エンジンによって選択されます。
    2. 次へ」を選択します。
      ​ オファー – 詳細 {modal="regular"}
  6. 新しいパーソナライズされたオファーを作成​の​表示域を追加 ステップで:

    1. チャネル リストから ​ モバイル ​ モバイル​を選択し、配置 リストから​ モバイル JSON ​を選択します。

    2. コンテンツ​の​ カスタム ​を選択します。

    3. コンテンツを追加」を選択します。 パーソナライゼーションを追加 ダイアログで、次の操作を行います。

      1. ​ モード ​ セレクターが使用可能な場合は、JSON​に設定されていることを確認してください。

      2. 次のJSONを入力します。

        code language-json
        {
            "title": "Juno Jacket",
            "text": "On colder-than-comfortable mornings, you'll love warming up in the Juno All-Ways Performance Jacket, designed to compete with wind and chill. Built-in Cocona™ technology aids evaporation, while a special zip placket and stand-up collar keep your neck protected.",
            "image": "https://newluma.enablementadobe.com/images/wj06-purple_main.jpg"
        }
        
      3. 保存」を選択します。
        ​ オファー – カスタムコンテンツ ​ {modal="regular"}

    4. 次へ」を選択します。
      ​ オファー表示域 {modal="regular"}

  7. 新しいパーソナライズされたオファーを作成​の​制約を追加 ステップで:

    1. 優先度​を10に設定します。
    2. キャッピングを含める」をオフに切り替えます。
    3. 次へ」を選択します。
      ​ オファー – 制約 {modal="regular"}
  8. 新しいパーソナライズされた オファーを作成する​ レビュー ​手順で:

    1. オファーを確認し、終了​を選択します。
    2. オファーを保存 ダイアログで、保存して承認​を選択します。
  9. 手順3~8を繰り返して、名前とコンテンツが異なる4つのオファーを作成します。 その他のすべての設定値(開始日時や優先度など)は、作成した最初のオファーと同様です。 重複するオファーをすばやく作成し、編集できます。

    1. Journey Optimizer UIで、左側のパネルから「 ​ オファー オファー」を選択し、上部のバーから「オファー」を選択します。

    2. 作成したオファーの行を選択します。

    3. 右側のペインで、 詳細 詳細アクション​を選択し、コンテキストメニューから「 複製 複製」を選択します。

      以下の表を使用して、その他の4つのオファーを定義します。

      table 0-row-2 1-row-2 2-row-2 3-row-2 4-row-2 layout-fixed
      オファー名 JSONでのオファーコンテンツ
      Luma - Affirm Water Bottle { "title": "Affirm Water Bottle", "text": "You'll stay hydrated with ease with the Affirm Water Bottle by your side or in hand. Measurements on the outside help you keep track of how much you're drinking, while the screw-top lid prevents spills. A metal carabiner clip allows you to attach it to the outside of a backpack or bag for easy access.", "image": "https://newluma.enablementadobe.com/images/ug06-lb-0.jpg" }
      Luma - Desiree Fitness Tee { "title": "Desiree Fitness Tee", "text": "When you're too far to turn back, thank yourself for choosing the Desiree Fitness Tee. Its ultra-lightweight, ultra-breathable fabric wicks sweat away from your body and helps keeps you cool for the distance.", "image": "https://newluma.enablementadobe.com/images/ws05-yellow_main.jpg" }
      Luma - Adrienne Trek ジャケット { "title": "Adrienne Trek Jacket", "text": "You're ready for a cross-country jog or a coffee on the patio in the Adrienne Trek Jacket. Its style is unique with stand collar and drawstrings, and it fits like a jacket should.", "image": "https://newluma.enablementadobe.com/images/wj08-gray_main.jpg" }
      Luma - Aeroデイリーフィットネスティー { "title": "Aero Daily Fitness Tee", "text": "Need an everyday action tee that helps keep you dry? The Aero Daily Fitness Tee is made of 100% polyester wicking knit that funnels moisture away from your skin. Don't be fooled by its classic style; this tee hides premium performance technology beneath its unassuming look.", "image": "https://newluma.enablementadobe.com/images/ms01-black_main.jpg" }
  10. 最後の手順として、フォールバックオファーを作成する必要があります。これは、顧客が他のオファーを受ける資格がない場合に顧客に送信されるオファーです。

    1. オファーを作成」を選択します。

    2. 新しいオファー ダイアログで、パーソナライズされたオファー​を選択し、次へ​を選択します。

    3. 新しいフォールバックオファーを作成​の​詳細 ステップで、オファーの​ 名前 ​を入力し(例:Luma - Fallback Offer)、次へ​を選択します。

    4. 新しいフォールバックオファーを作成​の​表示域を追加 ステップで:

      1. チャネル リストから ​ モバイル ​ モバイル​を選択し、配置 リストから​ モバイル JSON ​を選択します。

      2. コンテンツ​の​ カスタム ​を選択します。

      3. コンテンツを追加」を選択します。

      4. パーソナライゼーションを追加 ダイアログで、次のJSONを入力し、保存​を選択します。

        code language-json
        {
           "title": "Luma",
           "text": "Your store for sports wear and equipment.",
           "image": "https://newluma.enablementadobe.com/images/logo.png"
        }
        
      5. 次へ」を選択します。

  11. 新しいフォールバックを作成 オファーの​レビュー ステップで:

    1. オファーを確認し、終了​を選択します。
    2. オファーを保存 ダイアログで、保存して承認​を選択します。

次のオファーのリストが表示されます。
​ オファーリスト ​ {modal="regular"}

コレクションの作成

モバイルアプリユーザーにオファーを表示するには、作成した1つ以上のオファーで構成されるオファーコレクションを定義する必要があります。

  1. Journey Optimizer UIで、左側のパネルから「オファー」を選択します。

  2. 上部バーから「コレクション」を選択します。

  3. Add Create collection​を選択します。

  4. 新しいコレクション ダイアログで、コレクションの​ 名前 ​を入力します(例:Luma - Mobile App Collection)。「静的コレクションを作成」を選択し、次へ」をクリックします。

  5. Luma - Mobile App Collection​で、コレクションに含めるオファーを選択します。 このチュートリアルでは、作成した5つのオファーを選択します。 例えば、Luma​と入力すると、検索フィールドを使用してリストを簡単にフィルタリングできます。

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

    ​ オファー – コレクション ​ {modal="regular"}

決定の作成

最後のステップは、決定を定義することです。決定は、1つ以上の決定範囲とフォールバックオファーを組み合わせたものです。

決定範囲は、特定のプレースメント(電子メールのHTML、モバイルアプリのJSONなど)と1つ以上の評価条件を組み合わせたものです。

評価基準は、次の要素の組み合わせです

  • オファーコレクション,
  • 適格性ルール:たとえば、特定のオーディエンスでのみ利用可能なオファーです。
  • ランキング方法:複数のオファーを選択できる場合、どの方法を使用してランキングするか(オファーの優先順位、数式の使用、AI モデルなど)。

プレースメント、ルール、ランキング、オファー、リプレゼンテーション、コレクション、決定などの方法を理解する場合は、​ オファーを作成および管理するための主な手順を参照してください。 このレッスンでは、Journey Optimizer Decision Management内で決定を柔軟に定義するのではなく、決定の出力のみを使用することに焦点を当てています。

  1. Journey Optimizer UIで、左側のパネルから「オファー」を選択します。

  2. 上部バーから「決定」を選択します。

  3. Add Create decision」を選択します。

  4. 新しいオファー決定を作成​の​詳細 ステップで:

    1. 決定の​ 名前 ​を入力します(例:Luma - Mobile App Decision)。開始日時​と​ 終了日時 ​を入力します。
    2. 次へ」を選択します。
  5. 新しいオファー決定を作成​の​決定範囲を追加 ステップで:

    1. 配置 リストから​ モバイル JSON ​を選択します。

    2. 評価条件 タイルで、 追加 追加​を選択します。

      1. オファーコレクションを追加 ダイアログで、オファーコレクションを選択します。 例:Luma - Mobile App Collection

      2. 追加」を選択します。

        決定 – コレクションを選択 {modal="regular"}

    3. 実施要件​に​ なし ​が選択されており、ランキング方法​として​ オファー優先度 ​が選択されていることを確認してください。

    4. 次へ」を選択します。

      決定範囲 {modal="regular"}

  6. 新しいオファー決定を作成​の​フォールバックオファーの追加 ステップで:

    1. フォールバックオファー(例:Luma - Fallback offer)を選択します。
    2. 次へ」を選択します。
  7. ​​概要​​ステップで、新しいオファー決定を作成:

    1. 完了」を選択します。
    2. オファー決定を保存 ダイアログで、保存してアクティブ化​を選択します。
    3. 決定」タブに、ステータスが​ ライブ ​の決定が表示されます。

一連のオファーで構成されるオファーの決定が使用可能になりました。 アプリで決定を使用するには、コードで決定範囲を参照する必要があります。

  1. Journey Optimizer UIで、「オファー」を選択します。

  2. 上部バーから「決定」を選択します。

  3. 決定を選択します(例:Luma - Mobile App Decision)。

  4. 決定範囲 タイルで、 ​ コピー コピー​を選択します。

  5. コンテキストメニューから、決定範囲​を選択します。

    決定範囲をコピー {modal="regular"}

  6. 任意のテキストエディターを使用して、後で使用するために決定範囲を貼り付けます。 決定範囲には、次のJSON形式があります。

    code language-json
    {
        "xdm:activityId":"xcore:offer-activity:xxxxxxxxxxxxxxx",
        "xdm:placementId":"xcore:offer-placement:xxxxxxxxxxxxxxx"
    }
    

アプリにオファーを実装する

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

iOS
  1. Xcodeで、AEP Optimizeがパッケージ依存関係のパッケージのリストに追加されていることを確認します。 Swift パッケージマネージャーを参照してください。

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

  3. AEPOptimizeがインポートのリストに含まれていることを確認してください。

    code language-swift
    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 > Model > Data > general​に移動します。 showPersonalisationtrueに設定され、showDecisioningconfig セクションのfalseに設定されていることを確認します。

    code language-json
    ...
    "showPersonalisation": true,
    "showDecisioning": false,
    ...
    

    これらの設定により、アプリの「パーソナライゼーション」タブのオファーに意思決定管理が使用されていることを確認できます。

  6. Xcode プロジェクトナビゲーターで、Luma > Luma > Model > Data > 決定​に移動します。 Journey Optimizer インターフェイスからコピーした決定範囲の詳細を使用して、activityIdplacementIdの値を更新します。

  7. Xcode プロジェクトナビゲーターで​Luma > Luma > Utils > MobileSDK​に移動します。 func updatePropositionOD(ecid: String, activityId: String, placementId: String, itemCount: Int) 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(activityId: activityId, placementId: placementId, itemCount: UInt(itemCount))
       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)")
             }
       }
    }
    

    この関数:

    • オファーを提示する必要があるプロファイルを識別するためのECIDを含むXDM ディクショナリ xdmDataを設定します。

    • decisionScopeを定義します。これは、Journey Optimizer - Decision Management インターフェイスで定義した決定に基づくオブジェクトで、決定を作成からコピーした決定範囲を使用して定義されます。 Luma アプリは、次のJSON形式に基づいてスコープパラメーターを取得する設定ファイル (decisions.json)を使用します。

      code language-json
      "scopes": [
          {
              "name": "name of the scope",
              "activityId": "xcore:offer-activity:xxxxxxxxxxxxxxx",
              "placementId": "xcore:offer-placement:xxxxxxxxxxxxxxx",
              "itemCount": 2
          }
      ]
      

      ただし、実装の有効なDecisionScope オブジェクトを構築するために、Optimize APIが適切なパラメーター(activityIdplacementIdおよびitemCount)を取得するように、任意の種類の実装を使用できます。
      お客様の情報のため:decisions.json ファイル内のその他のキー値は将来の使用に使用され、現在このレッスンおよびチュートリアルの一部で使用されていません。

    • 2つのAPIを呼び出します:Optimize.clearCachePropositionsOptimize.updatePropositions。 これらの関数は、キャッシュされた提案をクリアし、このプロファイルの提案を更新します。

  8. Xcode プロジェクトナビゲーターで、Luma > Luma > Views > Personalization > EdgeOffersView​に移動します。 func onPropositionsUpdateOD(activityId: String, placementId: String, itemCount: Int) async関数を検索し、この関数のコードを調べます。 この関数の最も重要な部分はOptimize.onPropositionsUpdate API呼び出しです。この呼び出しは、次の要素を含みます。

    • (Journey Optimizer - Decision Managementで定義した)決定範囲に基づいて、現在のプロファイルの提案を取得します。
    • 提案からオファーを取得します。
    • アプリ内で適切に表示できるように、オファーのコンテンツをラップ解除します。
    • オファーに関するdisplayed() アクションをトリガーします。これにより、オファーが表示されることを知らせるイベントがEdge Networkに送り返されます。
  9. まだ​ EdgeOffersView ​にある場合は、次のコードを.onFirstAppear修飾子に追加します。 このコードは、オファーを更新するためのコールバックが1回だけ登録されることを保証します。

    code language-swift
    // Invoke callback for offer updates
    Task {
        await self.onPropositionsUpdateOD(activityId: decision.activityId, placementId: decision.placementId, itemCount: decision.itemCount)
    }
    
  10. 引き続き​ EdgeOffersView ​で、.task修飾子に次のコードを追加します。 このコードは、ビューが更新されたときにオファーを更新します。

    code language-swift
    // Clear and update offers
    await self.updatePropositionsOD(ecid: currentEcid, activityId: decision.activityId, placementId: decision.placementId, itemCount: decision.itemCount)
    
Android
  1. Android Studioで、aepsdk-optimize-androidが​Android ChevronDown > Gradle Scripts​の​ build.gradle.kts (モジュール :app) ​の依存関係の一部であることを確認します。 Gradleを参照してください。

  2. Android Studio ナビゲーターで​Android ChevronDown > 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 ChevronDown > app > assets > data > general.json​に移動します。 showPersonalisationtrueに設定され、showDecisioningconfig セクションのfalseに設定されていることを確認します。

    code language-json
    ...
    "showPersonalisation": true,
    "showDecisioning": false,
    ...
    

    これらの設定により、アプリの「パーソナライゼーション」タブのオファーに意思決定管理が使用されていることを確認できます。

  6. Xcode プロジェクトナビゲーターで​Android ChevronDown > app > assets > data > decisions.json​に移動します。 Journey Optimizer インターフェイスからコピーした決定範囲の詳細を使用して、activityIdplacementIdの値を更新します。

  7. Android Studio ナビゲーターで​Android ChevronDown > app > kotlin+java > com.adobe.luma.tutorial.android > models > MobileSDK​に移動します。 suspend fun updatePropositionsOD(ecid: String, activityId: String, placementId: String, itemCount: Int) 関数を検索します。 次のコードを追加します。

    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(activityId, placementId, itemCount)
       Optimize.clearCachedPropositions()
       Optimize.updatePropositions(listOf(decisionScope), xdmData, null, object :
             AdobeCallbackWithOptimizeError<MutableMap<DecisionScope?, OptimizeProposition?>?> {
             override fun fail(optimizeError: AEPOptimizeError?) {
                val responseError = optimizeError
                Log.i("MobileSDK", "updatePropositionsOD error: ${responseError}")
             }
             override fun call(propositionsMap: MutableMap<DecisionScope?, OptimizeProposition?>?) {
                val responseMap = propositionsMap
                Log.i("MobileSDK", "updatePropositionsOD call: ${responseMap}")
             }
       })
    }
    

    この関数:

    • オファーを提示する必要があるプロファイルを識別するためのECIDを含むXDM ディクショナリ xdmDataを設定します。

    • decisionScopeを定義します。これは、Journey Optimizer - Decision Management インターフェイスで定義した決定に基づくオブジェクトで、決定を作成からコピーした決定範囲を使用して定義されます。 Luma アプリは、次のJSON形式に基づいてスコープパラメーターを取得する設定ファイル (decisions.json)を使用します。

      code language-json
      "scopes": [
          {
              "name": "name of the scope",
              "activityId": "xcore:offer-activity:xxxxxxxxxxxxxxx",
              "placementId": "xcore:offer-placement:xxxxxxxxxxxxxxx",
              "itemCount": 2
          }
      ]
      

      ただし、実装の有効なDecisionScope オブジェクトを構築するために、Optimize APIが適切なパラメーター(activityIdplacementIdおよびitemCount)を取得するように、任意の種類の実装を使用できます。
      お客様の情報のため:decisions.json ファイル内のその他のキー値は将来の使用に使用され、現在このレッスンおよびチュートリアルの一部で使用されていません。

    • 2つのAPIを呼び出します:Optimize.clearCachePropositionsOptimize.updatePropositions。 これらの関数は、キャッシュされた提案をクリアし、このプロファイルの提案を更新します。

  8. Xcode プロジェクトナビゲーターで​Android ChevronDown > app > kotlin+java > com.adobe.luma.tutorial.android > views > EdgeOffers.kt​に移動します。 suspend fun onPropositionsUpdateOD(ecid: String, activityId: String, placementId: String, itemCount: Int)関数を検索し、この関数のコードを調べます。 この関数の最も重要な部分はOptimize.onPropositionsUpdate API呼び出しです。この呼び出しは、次の要素を含みます。

    • (Journey Optimizer - Decision Managementで定義した)決定範囲に基づいて、現在のプロファイルの提案を取得します。
    • 提案からオファーを取得します。
    • アプリ内で適切に表示できるように、オファーのコンテンツをラップ解除します。
    • オファーを返します。
  9. まだ​ EdgeOffers.kt ​にある場合は、「LaunchedEffect」関数を追加して、「Personalization」タブの起動時にオファーが更新されるようにします。

    code language-kotlin
    // recompose the view when the number of received offers changes
    LaunchedEffect(offersOD.count()) {
        updatePropositionsOD(
            currentEcid,
            decision.activityId,
            decision.placementId,
            decision.itemCount
        )
        offersOD =
            onPropositionsUpdateOD(decision.activityId, decision.placementId, decision.itemCount)
    }
    

アプリを使用して検証

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

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

  3. 一番上までスクロールすると、DECISION LUMA - MOBILE APP DECISION タイルで定義したコレクションから2つのランダムオファーが表示されます。

    {width="300"}

    すべてのオファーに同じ優先順位を付けたので、オファーはランダムです。決定のランキングは優先順位に基づいています。

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

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

  3. 上にスクロールすると、DECISION LUMA - MOBILE APP DECISION タイルで定義したコレクションから、上のボックスに2つのランダム オファーが表示されます。

    {width="300"}

    すべてのオファーに同じ優先順位を付けたので、オファーはランダムです。決定のランキングは優先順位に基づいています。

Assuranceでの実装の検証

Assuranceでオファーの実装を検証するには:

  1. シミュレーターまたはデバイスをAssuranceに接続するには、設定の手順 セクションを確認してください。

  2. 左側のパネルで「Configure」を選択し、ADOBE JOURNEY OPTIMIZER DECISIONING​の下の「Review & Simulate」の横にある「 Add 」を選択します。

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

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

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

  6. Simulate​と​ Event List ​のタブで、さらに機能を確認し、Journey Optimizer Decision Managementの設定を確認できます。

次の手順

これで、Journey Optimizer - Decision Managementの実装に機能を追加するためのツールがすべて揃いました。 次に例を示します。

  • オファーに異なるパラメーターを適用します(例:優先度、キャップ)
  • アプリでプロファイル属性を収集し(​ プロファイル ​を参照)、これらのプロファイル属性を使用してオーディエンスを構築します。 そして、これらのオーディエンスを決定の適格性ルールの一部として使用します。
  • 複数の意思決定スコープを組み合わせる。
SUCCESS
Experience Platform Mobile SDKのOffer Decisioning拡張機能とTarget拡張機能を使用して、アプリにオファーを表示できるようにしました。
Adobe Experience Platform Mobile SDKについて学ぶために時間を割いていただきありがとうございます。 ご質問がある場合、一般的なフィードバックを共有したい場合、または今後のコンテンツに関する提案がある場合は、このExperience League コミュニティのディスカッション投稿で共有してください。

次:Decisioningを使用したオファーの作成と表示

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