在 Android 中预取选件内容

Adobe Target 预取功能使用 Android Mobile SDK 获取选件内容,并通过缓存服务器响应来尽量减少获取次数。

重要

Adobe Target 中的“自动定位”、“自动分配”和“自动个性化”活动类型不支持 Android Mobile SDK 中的预取功能。

此过程可缩短加载时间、阻止多个网络调用,并允许Adobe Target通知移动应用用户访问了哪个mbox。 在预回迁调用期间,将检索和缓存所有内容,并从缓存中检索此内容,以备将来所有调用(包含指定mbox名称的缓存内容)。

在启动时,预取内容不会持久保留。只要应用程序处于活动状态,或者在调用 clearPrefetchCache() 方法之前,都会一直缓存预取内容。

重要

Target 预取 API 自 SDK 版本 4.14.0 起便已推出。有关参数限制的更多信息,请参阅批量处理输入参数

在 SDK 版本 4.14 或更高版本中,如果已指定 environmentId,则在发起 v2 批量 mbox TNT 调用时,会从 ADBMobileConfig.json 文件中选取指定的 environmentId。如果未在此文件中指定 environmentId,则不会在 TNT 批量 mbox 调用中发送任何环境参数,将交付默认环境的选件。

例如:

if (MobileConfig.getInstance().mobileUsingTarget()){ 
            long environmentID = MobileConfig.getInstance().getEnvironmentID(); 
            if(environmentID != 0L){ 
                parametersJson.put(TargetJson.ENVIRONMENT_ID, environmentID); 
            } 
        }

预取方法

以下是可用于在 Android 中进行预取的方法:

  • prefetchContent

    将包含位置数组的预取请求发送到配置的 Target 服务器,并在提供的回调中返回请求状态。

    • 以下是此方法的语法:

      public static void prefetchContent(
      final List<TargetPrefetchObject> targetPrefetchArray,
      final Map<String, Object> profileParameters,
      final TargetCallback<Boolean> callback)
      
    • 以下是此方法的参数:

      • targetPrefetchArray

        TargetPrefetchObjects 的数组,其中包含要预取的每个 Target 位置的名称和 mboxParameters。

      • profileParameters

        包含要在此请求中用于每个位置预取的配置文件参数的键和值。

      • callback

        在预取完成时被调用。如果预取成功,则返回 true;如果预取失败,则返回 false

  • loadRequests

    执行批量请求,以获取请求数组中指定的多个 mbox 位置。 数组中的每个对象都包含一个回调函数,当内容可用于其给定mbox位置时,将调用该函数。

    重要

    如果所请求位置的内容已经缓存,则会立即在提供的回调中返回该内容。否则,SDK 将向 Target 服务器发送网络请求,以检索该内容。

    • 以下是此方法的语法:

      public static void loadRequests( final List<TargetRequestObject> requestArray,  final Map<String, Object> profileParameters)
      
    • 以下是此方法的参数:

      • requestArray

        TargetRequestObjects 的数组,其中包含要检索的每个位置的名称、默认内容、参数和回调函数。

      • profileParameters

        包含要在此请求中用于每个位置预取的配置文件参数的键和值。

  • clearPrefetchCache

    清除通过 Target 预取缓存的数据。

    • 以下是此方法的语法:

      public static void clearPrefetchCache();
      
    • 此方法没有参数。

  • createTargetRequestObject

    使用提供的数据创建并返回 TargetRequestObject 的实例。

    • 以下是此方法的语法:

      public static TargetPrefetchObject createTargetRequestObject( 
      final String mboxName,
      final String defaultContent, 
      final Map<String, Object> mboxParams, 
      final Map<String, Object> orderParams, 
      final Map<String, Object> productParams, 
      final Target.TargetCallback<String> callback)
      
  • createTargetPrefetchObject

    使用提供的数据创建并返回 TargetPrefetchObject 的实例。

    • 以下是此方法的语法:

      public static TargetPrefetchObject createTargetPrefetchObject( 
      final String mboxName, 
      final Map<String, Object> mboxParams) 
      final Map<String, Object> orderParams, 
      final Map<String, Object> productParams)
      

公共类

以下是 Android 中支持预取的公共类:

类引用:TargetPrefetchObject

封装 mbox 名称以及用于 mbox 预取的参数。

  • name

    将预取的位置的名称。

    • 类型:字符串
  • mboxParameters

    键值对的集合,将作为此 TargetPrefetchObject 请求的 mboxParameters 附加。

    • 类型:Map<String, Object>
  • orderParameters

    键值对的集合,将附加到当前位于 order 节点下方的 mbox。

    • 类型:Map <String, Object>
  • productParameters

    键值对的集合,将附加到当前位于 product 节点下方的 mbox。

    • 类型:Map <String, Object>

类引用:TargetRequestObject

此类封装用于 Target 位置请求的 mbox 名称、默认内容、mbox 参数以及返回的回调。

  • mboxName

    请求的位置的名称。

    • 类型:字符串
  • mboxParameters

    键值对的集合,将作为此 mboxParametersTargetRequestObject 附加。

    • 类型:Map<String, Object>
  • orderParameters

    键值对的集合,将附加到当前位于 order 节点下方的 mbox。

    • 类型:Map <String, Object>
  • productParameters

    键值对的集合,将附加到当前位于 product 节点下方的 mbox。

    • 类型:Map <String, Object>
  • defaultContent

    SDK 无法从 Target 服务器中检索内容时在回调中返回的字符串值。

    • 类型:字符串
  • callback

    给定 TargetRequestObject 的内容可用时将调用的函数指针。

    • 类型:Target.TargetCallback<String>

代码示例

以下是如何使用 Android SDK 预取内容的示例:

// When your app launches, prefetch the content for a list of locations. 
// Define the list of mboxes that you want to prefetch. 
List<TargetPrefetchObject> prefetchMboxesList = new ArrayList<>(); 
  
Map<String, Object> mboxParameters1 = new HashMap<>(); 
mboxParameters1.put("status", "platinum"); 
prefetchMboxesList.add(Target.createTargetPrefetchObject("mboxName1", mboxParameters1));

Map<String, Object> mboxParameters2 = new HashMap<>(); 
mboxParameters2.put("userType", "paid"); 
 
List<String> purchasedIds = new ArrayList<String>(); 
purchasedIds.add("34"); 
purchasedIds.add("125");  
Map<String, Object> orderParameters2 = new HashMap<>(); 
orderParameters2.put("id", "ADCKKIM"); 
orderParameters2.put("total", "344.30"); 
orderParameters2.put("purchasedProductIds",  purchasedIds); 
  
Map<String, Object> productParameters2 = new HashMap<>(); 
productParameters2.put("id", "24D3412"); 
productParameters2.put("categoryId","Books"); 
  
prefetchMboxesList.add(Target.createTargetPrefetchObject("mboxName2", mboxParameters2, orderParameters2, productParameters2));

// Define the profile parameters map. 
Map<String, Object> profileParameters = new HashMap<>(); 
profileParameters.put("ageGroup", "20-32");

// Define the target callback for the prefetch call status. 
Target.TargetCallback<Boolean> prefetchStatusCallback = new Target.TargetCallback<Boolean>() { 
    @Override 
    public void call(final Boolean status) { 
        // check the returned status for the prefetch call 
    }};

// Call the prefetchContent API. 
Target.prefetchContent(prefetchMboxesList, profileParameters, prefetchStatusCallback);

// When the content is required, you can initiate the locations request. 
// Define the list of target request objects. 
List<TargetRequestObject> locationRequests = new ArrayList<>(); 
  
Target.TargetCallback<String> callback1 = new Target.TargetCallback<String>() { 
    @Override 
    public void call(final String content) { 
        // check the returned content for mboxName1. 
    }}; 
  
locationRequests.add(Target.createTargetRequestObject("mboxName1", "defaultContent1", mboxParameters1, callback1));

Target.TargetCallback<String> callback2 = new Target.TargetCallback<String>() { 
    @Override 
    public void call(final String content) { 
        // check the returned content for mboxName2. 
    }}; 
  
locationRequests.add(Target.createTargetRequestObject("mboxName2", "defaultContent2", mboxParameters2, orderParameters2, productParameters2, callback2)); 
  
// Call the loadRequests API. 
Target.loadRequests(locationRequests, profileParameters); 

其他信息

以下是有关上述示例的其他一些信息:

  • ProductParameters 仅允许使用以下键:

    • id
    • categoryId
  • OrderParameters 仅允许使用以下键:

    • id
    • total
    • purchasedProductIds
  • purchasedProducts 接受字符串的数组列表。

On this page

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now