실험용 앱 코딩

파트너 센터에서 프로젝트를 만들고 원격 변수를 정의하면 다음 작업에 대해 UWP(유니버설 Windows 플랫폼) 앱의 코드를 업데이트할 준비가 된 것입니다.

  • 파트너 센터에서 원격 변수 값 수신
  • 사용자를 위한 앱 환경을 구성하기 위해 원격 변수를 사용합니다.
  • 사용자가 실험을 보고 원하는 작업(변환이라고도 함)을 수행한 때를 나타내는 이벤트를 파트너 센터에 기록합니다.

이 동작을 앱에 추가하려면 Microsoft Store Services SDK에서 제공하는 API를 사용합니다.

다음 섹션에서는 실험에 대한 변형을 가져오고 이벤트를 파트너 센터에 기록하는 일반적인 프로세스를 설명합니다. 실험용 앱을 코딩한 후 파트너 센터에서 실험을 정의할 수 있습니다. 실험을 만들고 실행하는 엔드투엔드 프로세스를 보여 주는 연습은 A/B 테스트를 사용하여 첫 번째 실험 만들기 및 실행을 참조하세요.

참고 항목

Microsoft Store Services SDK의 실험 API 중 일부는 비동기 패턴을 사용하여 파트너 센터에서 데이터를 검색합니다. 따라서 이러한 메서드 실행의 일부는 메서드가 호출된 후에 발생할 수 있으므로, 작업이 완료되는 동안 앱의 UI가 다시 반응할 수 있습니다. 비동기 패턴을 사용하려면 이 문서의 코드 예제에서 설명한 대로 앱이 API를 호출할 때 비동기 키워드 및 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 네임스페이스에 대한 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 개체의 GetBoolean, GetDouble, GetInt32 또는 GetString 메서드를 사용하여 변형 할당에 대한 값을 가져옵니다. 각 메서드에서 첫 번째 매개 변수는 검색할 변형의 이름(파트너 센터에서 입력하는 변형과 동일한 이름)입니다. 두 번째 매개 변수는 파트너 센터에서 지정된 값을 검색할 수 없고(예: 네트워크에 연결되지 않은 경우) 캐시된 변형의 버전을 사용할 수 없는 경우 메서드에서 반환하는 기본값입니다.

    다음 예제에서는 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 테스트 서비스에 기록합니다. StoreServicesCustomEventLogger 개체로 logger 필드를 초기화하고 LogForVariation 메서드를 호출합니다. 현재 변형 할당과 실험에 대한 보기 이벤트의 이름을 나타내는 StoreServicesExperimentVariation 개체(이 개체는 파트너 센터에 이벤트에 대한 컨텍스트를 제공함)를 전달합니다. 이 개체는 파트너 센터에서 실험에 대해 입력하는 보기 이벤트 이름과 일치해야 합니다. 사용자가 실험의 일부인 변형을 보기 시작하면 코드에 보기 이벤트를 기록해야 합니다.

    다음 예제는 userViewedButton이라는 보기 이벤트를 기록하는 방법을 보여줍니다. 이 예제에서 실험의 목표는 사용자가 앱에서 버튼을 클릭하도록 하는 것이므로 앱이 변형 데이터(이 경우 버튼 텍스트)를 검색하고 버튼 내용에 할당한 뒤 보기 이벤트가 기록됩니다.

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

파트너 센터에 변환 이벤트 기록

다음으로 파트너 센터의 A/B 테스트 서비스에 변환 이벤트를 기록하는 코드를 추가합니다. 사용자가 실험의 목표에 도달하면 코드에 변환 이벤트가 기록되어야 합니다. 필요한 특정 코드는 앱에 따라 달라지지만 일반적인 단계는 다음과 같습니다. 전체 코드 예제는 A/B 테스트를 사용하여 첫 번째 실험 만들기 및 실행을 참조하세요.

  1. 사용자가 실험 목표 중 하나에 대한 목표에 도달할 때 실행되는 코드에서 LogForVariation 메서드를 다시 호출하고 StoreServicesExperimentVariation 개체와 실험에 대한 변환 이벤트의 이름을 전달합니다. 이 개체는 파트너 센터에서 실험에 대해 입력하는 변환 이벤트 이름과 일치해야 합니다.

    다음 예제는 버튼에 대한 클릭 이벤트 처리기에서 userClickedButton이라는 변환 이벤트를 기록합니다. 이 예제에서 실험의 목표는 사용자가 버튼을 클릭하도록 하는 것입니다.

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

다음 단계

앱에서 실험을 코딩하고 나면 다음 단계를 수행할 준비가 완료됩니다.

  1. 파트너 센터에서 실험을 정의하세요. A/B 테스트에 대한 보기 이벤트, 변환 이벤트 및 고유한 변형을 정의하는 실험을 만드세요.
  2. 파트너 센터에서 실험을 실행하고 관리하세요.