Кодирование приложения для экспериментов

После создания проекта и определения удаленных переменных в Центре партнеров вы можете обновить код в приложении универсальная платформа Windows (UWP), чтобы:

  • Получение значений удаленных переменных из Центра партнеров.
  • Использование удаленных переменных для настройки процесса взаимодействия пользователей с приложением.
  • Регистрируйте в Центре партнеров события, которые указывают, когда пользователи просматривали ваш эксперимент и выполняли требуемое действие (также называемое преобразованием).

Чтобы добавить это поведение в приложение, используйте API-интерфейсы из пакета Microsoft Store Services SDK.

В следующих разделах описывается общий процесс получения вариантов эксперимента и ведения журнала событий в Центре партнеров. После написания кода приложения для экспериментов можно определить эксперимент в Центре партнеров. Пошаговое руководство, демонстрирующее весь процесс создания и выполнения эксперимента, можно найти в разделе Создание и проведение первого эксперимента с использованием A/B-тестирования.

Примечание

Некоторые API экспериментирования в Microsoft Store Services SDK использовать асинхронный шаблон для получения данных из Центра партнеров. Это означает, что эти методы могут частично выполняться после их вызова, чтобы интерфейс приложения реагировал на действия пользователя во время выполнения операции. В рамках асинхронной модели приложение должно использовать ключевое слово async и оператор await при вызове API-интерфейсов, как показано в примерах кода в этой статье. По соглашению асинхронные методы заканчиваются на Async.

Настройка проекта

Сначала необходимо установить пакет Microsoft Store Services SDK на компьютер, на котором ведется разработка, и добавить в проект необходимые ссылки.

  1. Установите пакет Microsoft Store Services SDK.
  2. Откройте проект в Visual Studio.
  3. В обозревателе решений разверните узел проекта, щелкните правой кнопкой мыши Ссылки, а затем — Добавить ссылку.
  4. В диалоговом окне Диспетчер ссылок разверните список Универсальная платформа Windows и выберите Расширения.
  5. В списке пакетов SDK установите флажок рядом с пунктом Microsoft Engagement Framework и нажмите кнопку ОК.

Примечание

В примерах кода в этой статье предполагается, что файл кода содержит инструкции using для пространств имен System.Threading.Tasks и Microsoft.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. Объявите переменную типа string, которой будет назначен идентификатор проекта для эксперимента, который вы хотите получить.

    Примечание

    Идентификатор проекта можно получить при создании проекта в Центре партнеров. Указанный ниже идентификатор проекта используется только в качестве примера.

    private string projectId = "F48AC670-4472-4387-AB7D-D65B095153FB";
    
  3. Получите текущее назначение кэшированного варианта для эксперимента, вызвав статический метод GetCachedVariationAsync, и передайте методу идентификатор проекта для вашего эксперимента. Этот метод возвращает объект 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. Используйте методы GetBoolean, GetDouble, GetInt32 или GetString объекта StoreServicesExperimentVariation для получения значений назначения варианта. В каждом методе первым параметром является имя варианта, который требуется получить (это то же имя варианта, которое вы вводите в Центре партнеров). Второй параметр — это значение по умолчанию, которое должен возвращать метод, если ему не удается получить указанное значение из Центра партнеров (например, если нет сетевого подключения), а кэшированная версия варианта недоступна.

    В следующем примере используется метод 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 и имя события преобразования для эксперимента. Оно должно соответствовать одному из имен событий преобразования, которые вы вводите для эксперимента в Центре партнеров.

    В следующем примере в журнал записывается событие преобразования с именем userClickedButton из обработчика события Click для кнопки. В этом примере цель эксперимента — заставить пользователя нажать кнопку.

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

Дальнейшие действия

После создания кода для проведения эксперимента в приложении можно выполнять следующие действия.

  1. Определите эксперимент в Центре партнеров. (создание эксперимента, определяющего события просмотра и преобразования, а также уникальные варианты для A/B-теста).
  2. Запустите эксперимент и управляйте им в Центре партнеров.