共用方式為


在試用版本中排除或限制某些功能

如果您讓客戶在試用期間免費使用您的應用程式,您可以藉由排除或限制試用期間的某些功能,吸引客戶升級至應用程式的完整版本。 在您開始編寫程式碼之前,請先判斷哪些功能應該受到限制,然後確定您的應用程式只允許在購買完整授權時運作。 您也可以在客戶購買您的應用程式之前,啟用只在試用期間顯示的功能,例如橫幅或浮水印。

重要

本文示範如何使用 Windows.ApplicationModel.Store 命名空間的成員來實作試用版功能。 此命名空間不再以新功能更新,建議您改用 Windows.Services.Store 命名空間。 Windows.Services.Store 命名空間支援最新的附加元件類型,例如市集管理的消耗性附加元件和訂用帳戶,其設計目的是與合作夥伴中心和市集支援的未來產品和功能類型相容。 Windows.Services.Store 命名空間是在 Windows 10 版本 1607 中引進的,而且在 Visual Studio 中只能用於以 Windows 10 年度版本 (10.0;組建 14393) 或更新版本為目標的專案。 如需使用 Windows.Services.Store 命名空間實作試用版功能的詳細資訊,請參閱本文

必要條件

要新增供客戶購買之功能的 Windows 應用程式。

步驟 1:挑選您想要在試用期間啟用或停用的功能

您應用程式的目前授權狀態會儲存為 LicenseInformation 類別的屬性。 一般而言,您會將相依於授權狀態的函式放在條件式區塊中,如下一個步驟所述。 考慮這些功能時,請確定您實作這些功能的方式都能在所有授權狀態中運作。

此外,決定在應用程式執行時如何處理應用程式授權的變更。 試用版應用程式可以提供完整功能,但有應用程式內廣告橫幅,而付費版本則沒有。 或者,您的試用版應用程式可以停用某些功能,或顯示要求使用者購買的一般訊息。

思考您要建立的應用程式類型,以及理想的試用或到期策略。 對於遊戲的試用版,良好的策略是限制使用者可以玩的遊戲內容量。 針對公用程式的試用版,您可以考慮設定到期日,或限制潛在買家可以使用的功能。

對於大多數非遊戲應用程式,設定到期日效果良好,因為使用者可以充分了解完整的應用程式。 以下是一些常見的到期案例,以及處理這些案例的選項。

  • 應用程式執行時試用版授權到期

    如果試用版在您的應用程式執行時到期,您的應用程式可以:

    • 不執行任何動作。
    • 向您的客戶顯示訊息。
    • 很接近了。
    • 提示您的客戶購買應用程式。

    最佳做法是顯示訊息並提示購買應用程式,如果客戶購買該應用程式,繼續啟用所有功能。 如果使用者決定不購買應用程式,關閉應用程式,或定期提醒他們購買應用程式。

  • 試用版授權在應用程式啟動之前到期

    如果試用版在使用者啟動應用程式之前到期,您的應用程式將不會啟動。 相反地,使用者會看到一個對話方塊,提供他們從市集購買您的應用程式的選項。

  • 客戶在應用程式執行時購買應用程式

    如果客戶在應用程式執行時購買應用程式,以下是您的應用程式可以採取的一些動作。

    • 不執行任何動作,並以試用模式繼續,直到重新啟動應用程式為止。
    • 感謝他們購買或顯示訊息。
    • 以無訊息方式啟用具有完整授權的功能 (或停用僅限試用版的通知)。

如果您想要偵測授權變更,並在應用程式中採取一些動作,您必須新增事件處理常式,如下一個步驟中所述。

步驟 2:初始化授權資訊

當您的應用程式正在初始化時,取得應用程式的 LicenseInformation 物件,如此範例中所示。 我們假設 licenseInformation 是型別 LicenseInformation 的全域變數或功能變數。

目前,您將使用 CurrentAppSimulator 而不是 CurrentApp 來取得模擬授權資訊。 將應用程式的發行版本提交至市集之前,您必須將程式碼中的所有 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...
}

接下來,新增事件處理常式,以在應用程式執行時變更授權時接收通知。 例如,如果試用期間到期,或客戶透過市集購買應用程式,則應用程式的授權可能會變更。

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 會從名為 WindowsStoreProxy.xml 的 XML 檔案取得測試特定授權資訊,該檔案位於 %UserProfile%\AppData\local\packages\<套件名稱>\LocalState\Microsoft\Windows Store\ApiData 中。 您可以編輯 WindowsStoreProxy.xml 來變更應用程式及其功能的模擬到期日。 測試所有可能的到期日和授權設定,以確保一切如預期般運作。 如需詳細資訊,請參閱 搭配 CurrentAppSimulator 使用 WindowsStoreProxy.xml 檔案

如果此路徑和檔案不存在,您必須在安裝期間或在執行階段建立它們。 如果您嘗試存取 CurrentAppSimulator.LicenseInformation 屬性,但 WindowsStoreProxy.xml 不存在於該特定位置,您將會收到錯誤。

步驟 6:將模擬的授權 API 方法取代為實際 API

使用模擬授權伺服器測試應用程式之後,以及將應用程式提交至市集以進行認證之前,請將 CurrentAppSimulator 取代為 CurrentApp,如下一個程式碼範例中所示。

重要

當您將應用程式提交至市集或認證失敗時,您的應用程式必須使用 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:向您的客戶描述免費試用版的運作方式

請務必說明您的應用程式在免費試用期間和之後的行為,如此一來,您的客戶就不會對應用程式的行為感到措手不及。

如需描述應用程式的詳細資訊,請參閱建立應用程式描述