针对实验为你的应用编码

在合作伙伴中心创建项目并定义远程变量后,可以在通用 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 协议框架”旁边的复选框,然后单击“确定”。

注意

本文中的代码示例假定代码文件使用 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. 在合作伙伴中心中运行并管理实验