다음을 통해 공유


평가판의 기능 제외 또는 제한하기

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

중요

이 문서는 Windows.ApplicationModel.Store 네임스페이스의 멤버를 사용하여 평가판 기능을 구현하는 방법을 설명합니다. 이 네임스페이스는 더 이상 새 기능으로 업데이트되지 않으므로 Windows.Services.Store 네임스페이스를 대신 사용하는 것이 좋습니다. Windows.Services.Store 네임스페이스는 Store 관리 소모성 추가 기능 및 구독 등의 최신 추가 기능 유형을 지원하며 파트너 센터 및 Store에서 지원하는 이후 제품 및 기능 유형과 호환되도록 설계되었습니다. Windows.Services.Store 네임스페이스는 Windows 10 버전 1607에 도입되었으며 Windows 10 Anniversary Edition(10.0, 빌드 14393) 또는 Visual Studio의 최신 릴리스를 대상으로 하는 프로젝트에만 사용할 수 있습니다. Windows.Services.Store 네임스페이스를 사용하여 평가판 기능을 구현하는 방법에 대한 자세한 정보는 이 문서를 참조하세요.

필수 조건

고객이 구매할 수 있는 기능을 추가할 Windows 앱.

1단계: 평가 기간 동안 사용하거나 사용하지 않도록 설정할 기능 선택하기

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

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

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

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

  • 앱이 실행 중일 때 체험 라이선스 만료

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

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

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

  • 앱을 실행하기 전에 체험 라이선스 만료

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

  • 앱이 실행 중일 때 고객이 앱을 구입

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

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

라이선스 변경을 감지하고 앱에서 일부 작업을 수행하려면 다음 단계에서 설명한 대로 이에 대한 이벤트 처리기를 추가해야 합니다.

2단계: 라이선스 정보 초기화하기

앱이 초기화되면 이 예제와 같이 앱에 대한 LicenseInformation 개체를 가져옵니다. licenseInformationLicenseInformation 형식의 전역 변수 또는 필드라고 가정합니다.

지금은 CurrentApp 대신 CurrentAppSimulator를 사용하여 시뮬레이션된 라이선스 정보를 가져옵니다. 앱의 릴리스 버전을 Store에 제출하기 전에 코드의 모든 CurrentAppSimulator 참조를 CurrentApp으로 바꿔야 합니다.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    //   licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Other app initialization code...
}

다음으로, 앱이 실행되는 동안 라이선스가 변경될 때 알림을 받을 이벤트 처리기를 추가합니다. 예를 들어 평가판 기간이 만료되거나 고객이 Store를 통해 앱을 구매하는 경우 앱의 라이선스가 변경됩니다.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    //   licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Register for the license state change event.
    licenseInformation.LicenseChanged += LicenseInformation_LicenseChanged;

    // Other app initialization code...
}

void LicenseInformation_LicenseChanged()
{
    // This method is defined later.
    ReloadLicense(); 
}

3단계: 조건부 블록의 기능 코딩하기

라이선스 변경 이벤트가 발생하면 앱은 라이선스 API를 호출하여 평가판 상태가 변경되었는지 확인해야 합니다. 이 단계의 코드는 이 이벤트에 대한 처리기를 구성하는 방법을 보여 줍니다. 이 시점에서 사용자가 앱을 구입한 경우, 사용자에게 라이선스 상태가 변경되었다는 피드백을 제공하는 것이 좋습니다. 그렇게 코딩한 경우, 사용자에게 앱을 다시 시작하도록 요청해야 할 수 있습니다. 그러나 이러한 전환을 가능한 원활하고 손쉽게 만들어야 합니다.

이 예제는 앱의 기능을 적절하게 사용하거나 사용하지 않도록 설정할 수 있도록 앱의 라이선스 상태를 평가하는 방법을 보여 줍니다.

void ReloadLicense()
{
    if (licenseInformation.IsActive)
    {
        if (licenseInformation.IsTrial)
        {
            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
    else
    {
        // A license is inactive only when there' s an error.
    }
}

4단계: 앱의 평가판 만료 날짜 가져오기

앱의 평가판 만료 날짜를 결정하는 코드를 포함합니다.

이 예제의 코드는 앱 평가판 라이선스의 만료 날짜를 가져오는 함수를 정의합니다. 라이선스가 여전히 유효한 경우, 평가판이 만료될 때까지 남은 일 수로 만료 날짜를 표시합니다.

void DisplayTrialVersionExpirationTime()
{
    if (licenseInformation.IsActive)
    {
        if (licenseInformation.IsTrial)
        {
            var longDateFormat = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");

            // Display the expiration date using the DateTimeFormatter.
            // For example, longDateFormat.Format(licenseInformation.ExpirationDate)

            var daysRemaining = (licenseInformation.ExpirationDate - DateTime.Now).Days;

            // Let the user know the number of days remaining before the feature expires
        }
        else
        {
            // ...
        }
    }
    else
    {
        // ...
    }
}

5단계: 라이선스 API에 대한 시뮬레이션된 호출을 사용하여 기능 테스트하기

이제 시뮬레이션된 데이터를 사용하여 앱을 테스트합니다. CurrentAppSimulator는 %UserProfile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData에 위치한 WindowsStoreProxy.xml이라는 XML 파일에서 테스트 관련 라이선싱 정보를 가져옵니다. WindowsStoreProxy.xml을 편집하여 앱 및 해당 기능에 대한 시뮬레이션된 만료 날짜를 변경할 수 있습니다. 가능한 모든 만료 및 라이선스 구성을 테스트하여 모든 것이 의도한 대로 작동하는지 확인합니다. 자세한 정보는 CurrentAppSimulator에서 WindowsStoreProxy.xml 파일 사용하기를 참조하세요.

이 경로와 파일이 없는 경우, 설치 중 또는 런타임에 만들어야 합니다. 해당 특정 위치에 WindowsStoreProxy.xml가 없는 CurrentAppSimulator.LicenseInformation 속성에 액세스하려고 하면 오류가 발생합니다.

6단계: 시뮬레이션된 라이선스 API 메서드를 실제 API로 바꾸기

시뮬레이션된 라이선스 서버로 앱을 테스트한 후 인증을 위해 Store에 앱을 제출하기 전에 다음 코드 샘플과 같이 CurrentAppSimulatorCurrentApp으로 바꿉니다.

중요

앱을 Microsoft Store에 제출할 때 앱에서 CurrentApp 개체를 사용해야 하며, 그러지 않으면 앱 인증에 실패합니다.

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    // licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Register for the license state change event.
    licenseInformation.LicenseChanged += LicenseInformation_LicenseChanged;

    // Other app initialization code...
}

7단계: 고객에게 무료 평가판이 작동하는 방식 설명하기

평가판 기간 도중 및 이후에 앱이 어떻게 동작하는지 설명하여 고객이 앱의 동작에 놀라지 않도록 해야 합니다.

앱 설명에 대한 자세한 정보는 앱 설명 만들기를 참조하세요.