다음을 통해 공유


앱의 평가판 버전 구현

고객이 평가 기간 동안 앱을 무료로 사용할 수 있도록 파트너 센터 무료 평가판으로 앱을 구성할 있는 경우 평가 기간 동안 일부 기능을 제외하거나 제한하여 고객이 앱의 전체 버전으로 업그레이드하도록 유도할 수 있습니다. 코딩을 시작하기 전에 제한해야 하는 기능을 결정한 다음 전체 라이선스를 구매한 경우에만 앱에서 작동하도록 허용해야 합니다. 고객이 앱을 구입하기 전에 평가판 중에만 표시되는 배너 또는 워터마크와 같은 기능을 사용하도록 설정할 수도 있습니다.

이 문서에서는 Windows.Services.Store 네임스페이스에서 StoreContext 클래스의 멤버를 사용하여 사용자에게 앱에 대한 평가판 라이선스가 있는지 확인하고 앱이 실행되는 동안 라이선스 상태가 변경되는지 여부를 확인하는 방법을 보여 줍니다.

메모

Windows.Services.Store 네임스페이스는 Windows 10 버전 1607에서 도입되었으며 Windows 10 Anniversary Edition(10.0; 대상으로 하는 프로젝트에서만 사용할 수 있습니다. 빌드 14393) visual Studio의 이상 릴리스입니다. 앱이 이전 버전의 Windows 10을 대상으로 하는 경우 Windows.Services.Store 네임스페이스 대신 Windows.ApplicationModel.Store 네임스페이스를 사용해야 합니다. 자세한 내용은 이 문서 참조하세요.

평가판 버전을 구현하기 위한 지침

앱의 현재 라이선스 상태는 StoreAppLicense 클래스의 속성으로 저장됩니다. 일반적으로 다음 단계에서 설명한 대로 라이선스 상태에 따라 달라지는 함수를 조건부 블록에 배치합니다. 이러한 기능을 고려할 때 모든 라이선스 상태에서 작동하는 방식으로 구현할 수 있는지 확인합니다.

또한 앱이 실행되는 동안 앱 라이선스의 변경 내용을 처리하는 방법을 결정합니다. 평가판 앱은 전체 기능을 사용할 수 있지만 유료 버전이 아닌 앱 내 광고 배너가 있습니다. 또는 평가판 앱이 특정 기능을 사용하지 않도록 설정하거나 사용자에게 구입하도록 요청하는 일반 메시지를 표시할 수 있습니다.

만드는 앱의 유형과 좋은 평가판 또는 만료 전략이 무엇인지 생각해 보세요. 게임 평가판의 경우 사용자가 플레이할 수 있는 게임 콘텐츠의 양을 제한하는 것이 좋습니다. 유틸리티의 평가판 버전의 경우 만료 날짜를 설정하거나 잠재적 구매자가 사용할 수 있는 기능을 제한하는 것이 좋습니다.

대부분의 비게임 앱의 경우 사용자가 전체 앱을 잘 이해할 수 있으므로 만료 날짜를 설정하는 것이 좋습니다. 다음은 몇 가지 일반적인 만료 시나리오와 이를 처리하기 위한 옵션입니다.

  • 앱이 실행되는 동안 평가판 라이선스가 만료됩니다.

    앱이 실행되는 동안 평가판이 만료되면 앱은 다음을 수행할 수 있습니다.

    • 아무 것도 하지 않습니다.
    • 고객에게 메시지를 표시합니다.
    • 닫다.
    • 고객에게 앱을 구입하라는 메시지를 표시합니다.

    가장 좋은 방법은 앱을 구매하라는 프롬프트가 포함된 메시지를 표시하고 고객이 앱을 구매하는 경우 모든 기능을 사용하도록 설정된 상태로 계속 진행하는 것입니다. 사용자가 앱을 구입하지 않기로 결정한 경우 앱을 닫거나 정기적으로 앱을 구입하도록 미리 알려 줍니다.

  • 평가판 라이선스는 앱을 시작하기 전에 만료됩니다

    사용자가 앱을 시작하기 전에 평가판이 만료되면 앱이 시작되지 않습니다. 대신 스토어에서 앱을 구매할 수 있는 옵션을 제공하는 대화 상자가 표시됩니다.

  • 고객이 실행하는 동안 앱을 구입합니다.

    고객이 앱을 실행하는 동안 구매하는 경우 앱이 수행할 수 있는 몇 가지 작업은 다음과 같습니다.

    • 아무 것도 하지 않으며 앱을 다시 시작할 때까지 평가판 모드에서 계속 진행하도록 합니다.
    • 구입해 주셔서 감사드리거나 메시지를 표시하세요.
    • 정식 라이선스에서 사용할 수 있는 기능을 자동으로 사용하도록 설정하거나 평가판 전용 알림을 사용하지 않도록 설정합니다.

고객이 앱의 동작에 놀라지 않도록 평가판 기간 중 및 이후에 앱이 어떻게 동작하는지 설명해야 합니다. 앱 설명에 대한 자세한 내용은 앱 설명 만들기참조하세요.

필수 구성 요소

이 예제에는 다음과 같은 필수 구성 요소가 있습니다.

  • Windows 10 Anniversary Edition(10.0; 대상으로 하는 UWP(유니버설 Windows 플랫폼) 앱용 Visual Studio 프로젝트 빌드 14393) 이상 릴리스
  • 파트너 센터에서 시간 제한 없이 무료 평가판으로 구성된 앱을 만들었으며, 이 앱은 스토어에 게시되었습니다. 테스트하는 동안 스토어에서 검색할 수 없도록 필요에 따라 앱을 구성할 수 있습니다. 자세한 내용은 테스트 지침참조하세요.

이 예제의 코드는 다음을 가정합니다.

  • 코드는 TextBlockProgressRing를 포함하는 workingProgressRing의 컨텍스트에서 실행되며, 이들 컴포넌트는 각각 textBlock로 명명되었습니다. 이러한 개체는 비동기 작업이 발생함을 나타내고 출력 메시지를 각각 표시하는 데 사용됩니다.
  • 코드 파일은 문을 사용하여 Windows.Services.Store 네임스페이스를 포함하고 있습니다.
  • 앱은 앱을 시작한 사용자의 컨텍스트에서만 실행되는 단일 사용자 앱입니다. 자세한 내용은 앱 내 구매 및 평가판 참조하세요.

메모

데스크톱 브리지사용하는 데스크톱 애플리케이션이 있는 경우 이 예제에 표시되지 않는 코드를 추가하여 StoreContext 개체를 구성해야 할 수 있습니다. 자세한 내용은 데스크톱 브리지 사용하는 데스크톱 애플리케이션에서 StoreContext 클래스 사용참조하세요.

코드 예제

앱을 초기화할 때 앱에 대한 StoreAppLicense 개체를 가져오고 앱이 실행되는 동안 라이선스가 변경될 때 알림을 수신하는 OfflineLicensesChanged 이벤트를 처리합니다. 예를 들어 평가 기간이 만료되거나 고객이 스토어를 통해 앱을 구입하는 경우 앱의 라이선스가 변경됩니다. 라이선스가 변경되면 새 라이선스를 가져와서 그에 따라 앱의 기능을 사용하거나 사용하지 않도록 설정합니다.

이 시점에서 사용자가 앱을 구입한 경우 사용자에게 라이선스 상태가 변경되었다는 피드백을 제공하는 것이 좋습니다. 코딩한 방법인 경우 사용자에게 앱을 다시 시작하도록 요청해야 할 수 있습니다. 그러나 이러한 전환을 최대한 원활하고 고통없이 만드십시오.

private StoreContext context = null;
private StoreAppLicense appLicense = null;

// Call this while your app is initializing.
private async void InitializeLicense()
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    // Register for the licenced changed event.
    context.OfflineLicensesChanged += context_OfflineLicensesChanged;
}

private async void context_OfflineLicensesChanged(StoreContext sender, object args)
{
    // Reload the license.
    workingProgressRing.IsActive = true;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    if (appLicense.IsActive)
    {
        if (appLicense.IsTrial)
        {
            textBlock.Text = $"This is the trial version. Expiration date: {appLicense.ExpirationDate}";

            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
}

전체 샘플 애플리케이션은 Store 샘플참조하세요.