针对实验为你的应用编码

在合作伙伴中心创建项目并定义远程变量后,可以在通用 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 命名空间的 using 语句。

获取变体数据并记录实验的视图事件

在你的项目中,找到你想要在实验中修改的功能代码。 添加检索变体数据的代码、使用此数据修改正在测试的功能的行为,然后将实验的视图事件记录到合作伙伴中心中的 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 传递给该方法。 此方法将返回可通过 ExperimentVariation 属性访问变体分配的 StoreServicesExperimentVariationResult 对象。

    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 的变量,并指定 Grey Button 的默认变量值。

    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. 在合作伙伴中心中运行并管理实验