为应用编写试验代码

在合作伙伴中心创建项目并定义远程变量后,即可将通用 Windows 平台 (UWP) 应用中的代码更新为:

  • 从合作伙伴中心接收远程变量值。
  • 使用远程变量为用户配置应用体验。
  • 将事件记录到合作伙伴中心,指示用户何时已查看您的实验并执行了所需的操作(也称为 转换)。

若要将此行为添加到应用,你将使用 Microsoft Store Services SDK 提供的 API。

以下部分介绍了为您的试验获取变体和将事件记录到合作伙伴中心的一般过程。 在对应用进行实验编码后,可以在合作伙伴中心 定义实验。 有关演示创建和运行试验的端到端过程的演练,请参阅 使用 A/B 测试创建和运行第一个试验。

注释

Microsoft Store Services SDK 中的一些试验 API 使用 异步模式 从合作伙伴中心检索数据。 这意味着在调用这些方法后,可能会执行它们的一部分,因此在操作完成时,应用的 UI 可以保持响应。 异步模式要求应用在调用 API 时使用 async 关键字和 await 运算符,如本文中的代码示例所示。 按照约定,异步方法以 Async 结尾。

配置你的项目

若要开始,请在开发计算机上安装 Microsoft Store Services SDK,并添加必要的项目引用。

  1. 安装 Microsoft Store Services SDK
  2. 在 Visual Studio 中打开项目。
  3. 在解决方案资源管理器里,展开项目节点,右键单击 引用,再单击 添加引用
  4. 引用管理器中,展开 通用 Windows 并单击 扩展
  5. 在 SDK 列表中,选中 Microsoft Engagement Framework 旁边的复选框,然后单击 确定。

注释

本文中的代码示例假设您的代码文件使用 语句来处理 System.Threading.TasksMicrosoft.Services.Store.Engagement 命名空间。

获取变体数据并记录试验中的查看事件

在项目中,找到要在试验中修改的功能的代码。 添加用于检索变体数据的代码,使用此数据修改要测试的功能的行为,然后将试验的视图事件记录到合作伙伴中心的 A/B 测试服务。

所需的特定代码将取决于你的应用,但以下示例演示了基本过程。 有关完整的代码示例,请参阅 使用 A/B 测试创建和运行您的第一个实验。

private StoreServicesExperimentVariation variation;
private StoreServicesCustomEventLogger logger;

// Assign this variable to the project ID for your experiment from Dev Center.
// The project ID shown below is for example purposes only.
private string projectId = "F48AC670-4472-4387-AB7D-D65B095153FB";

private async Task InitializeExperiment()
{
    // Get the current cached variation assignment for the experiment.
    var result = await StoreServicesExperimentVariation.GetCachedVariationAsync(projectId);
    variation = result.ExperimentVariation;

    // Refresh the cached variation assignment if necessary.
    if (result.ErrorCode != StoreServicesEngagementErrorCode.None || result.ExperimentVariation.IsStale)
    {
        result = await StoreServicesExperimentVariation.GetRefreshedVariationAsync(projectId);

        if (result.ErrorCode == StoreServicesEngagementErrorCode.None)
        {
            variation = result.ExperimentVariation;
        }
    }

    // Get the remote variable named "buttonText" and assign the value
    // to the button.
    var buttonText = variation.GetString("buttonText", "Grey Button");
    await button.Dispatcher.RunAsync(
        Windows.UI.Core.CoreDispatcherPriority.Normal,
        () =>
        {
            button.Content = buttonText;
        });

    // Log the view event named "userViewedButton" to Dev Center.
    if (logger == null)
    {
        logger = StoreServicesCustomEventLogger.GetDefault();
    }

    logger.LogForVariation(variation, "userViewedButton");
}

以下步骤详细介绍了此过程的重要部分。

  1. 声明 一个 StoreServicesExperimentVariation 对象,该对象表示当前变体分配和 StoreServicesCustomEventLogger 对象,用于将视图和转换事件记录到合作伙伴中心。

    private StoreServicesExperimentVariation variation;
    private StoreServicesCustomEventLogger logger;
    
  2. 声明分配给要检索的试验的 项目 ID 的字符串变量。

    注释

    在合作伙伴中心创建项目时,获取项目 ID。 下面显示的项目 ID 仅用于示例目的。

    private string projectId = "F48AC670-4472-4387-AB7D-D65B095153FB";
    
  3. 通过调用静态 GetCachedVariationAsync 方法获取试验的当前缓存变体分配,并将实验的项目 ID 传递给该方法。 此方法返回 一个 StoreServicesExperimentVariationResult 对象,该对象通过 ExperimentVariation 属性提供对变体分配的访问权限。

    var result = await StoreServicesExperimentVariation.GetCachedVariationAsync(projectId);
    variation = result.ExperimentVariation;
    
  4. 检查 IsStale 属性,以确定是否需要使用来自服务器的远程变体分配来刷新缓存的变体分配。 如果需要刷新它,请调用静态 GetRefreshedVariationAsync 方法,检查服务器的更新变体分配并刷新本地缓存变体。

    if (result.ErrorCode != StoreServicesEngagementErrorCode.None || result.ExperimentVariation.IsStale)
    {
        result = await StoreServicesExperimentVariation.GetRefreshedVariationAsync(projectId);
    
        if (result.ErrorCode == StoreServicesEngagementErrorCode.None)
        {
            variation = result.ExperimentVariation;
        }
    }
    
  5. 使用 StoreServicesExperimentVariation 对象的 GetBooleanGetDoubleGetInt32GetString 方法获取变体分配的值。 在每个方法中,第一个参数是要检索的变体的名称(这是你在合作伙伴中心输入的变体的名称)。 第二个参数是当此方法无法从合作伙伴中心检索到指定值时应返回的默认值(例如,没有网络连接),并且缓存的变体版本不可用时返回该默认值。

    以下示例使用 GetString 获取名为 buttonText 的变量,并指定 灰色按钮的默认变量值。

    var buttonText = variation.GetString("buttonText", "Grey Button");
    
  6. 在代码中,使用变量值修改要测试的功能的行为。 例如,以下代码将 buttonText 值分配给应用中按钮的内容。 本示例假定已在项目中的其他地方定义了此按钮。

    await button.Dispatcher.RunAsync(
        Windows.UI.Core.CoreDispatcherPriority.Normal,
        () =>
        {
            button.Content = buttonText;
        });
    
  7. 最后,将 查看事件 记录到合作伙伴中心的 A/B 测试服务。 将 logger 字段初始化为 StoreServicesCustomEventLogger 对象并调用 LogForVariation 方法。 传递 StoreServicesExperimentVariation 对象,该对象表示当前变体分配(提供有关此事件的上下文信息给合作伙伴中心),同时包含用于试验的视图事件名称。 这必须与在合作伙伴中心为试验输入的视图事件名称匹配。 当用户开始查看属于试验的变体时,代码应记录视图事件。

    以下示例演示如何记录一个名为 userViewedButton的视图事件。 在此示例中,试验的目标是让用户单击应用中的按钮,因此在应用检索变体数据(在本例中,按钮文本)并将其分配给该按钮的内容后,将记录视图事件。

    if (logger == null)
    {
        logger = StoreServicesCustomEventLogger.GetDefault();
    }
    
    logger.LogForVariation(variation, "userViewedButton");
    

将转换事件记录到合作伙伴中心

接下来,添加代码,将 转换事件记录到合作伙伴中心 A/B 测试服务。 当用户达到试验目标时,代码应记录转换事件。 所需的特定代码将取决于你的应用,但下面是一般步骤。 有关完整的代码示例,请参阅 使用 A/B 测试创建和运行您的第一个实验。

  1. 在用户达到某个试验目标时运行的代码中,再次调用 LogForVariation 方法,并传递 StoreServicesExperimentVariation 对象和试验转换事件的名称。 这必须与在合作伙伴中心为试验输入的转换事件名称之一匹配。

    以下示例从按钮的 Click 事件处理程序中记录名为 userClickedButton 的转换事件。 在此示例中,试验的目标是让用户单击按钮。

    private void button_Click(object sender, RoutedEventArgs e)
    {
        if (logger == null)
        {
            logger = StoreServicesCustomEventLogger.GetDefault();
        }
    
        logger.LogForVariation(variation, "userClickedButton");
    }
    

后续步骤

在应用中编写试验代码后,即可完成以下步骤:

  1. 在合作伙伴门户中定义实验。 创建一个试验,用于定义 A/B 测试的视图事件、转换事件和唯一变体。
  2. 在合作伙伴中心运行和管理试验