在 Android 中预取选件内容

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

重要

Adobe Target 中的 Auto Target、Auto Allocate 和 Automated Personalization 活动类型不支持 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 接受字符串的数组列表。

在此页面上