實作應用程式的試用版

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

本文說明如何使用 Windows.Services.Store 命名空間中的 StoreContext 類別成員,以判斷使用者是否有您應用程式的試用授權,以及是否在應用程式執行時授權的狀態發生變更的情況下收到通知。

注意

Windows.Services.Store 命名空間是在 Windows 10 版本 1607 中引進的,而且在 Visual Studio 中只能用於以 Windows 10 年度版本 (10.0;組建 14393) 或更新版本為目標的專案。 如果您的應用程式以舊版 Windows 10 為目標,您必須使用 Windows.ApplicationModel.Store 命名空間,而不是 Windows.Services.Store 命名空間。 如需詳細資訊,請參閱這篇文章

實作試用版的指導方針

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

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

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

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

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

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

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

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

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

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

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

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

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

請務必說明您的應用程式在免費試用期間和之後的行為,如此一來,您的客戶就不會對應用程式的行為感到措手不及。 如需描述應用程式的詳細資訊,請參閱建立應用程式描述

必要條件

此範例具有以下必要條件:

  • Windows 10 年度版本 (10.0;組建 14393) 或更新版本為目標之通用 Windows 平台 (UWP) 應用程式的 Visual Studio 專案。
  • 您已在合作夥伴中心建立一個設定為 免費試用版的應用程式,沒有時間限制,且此應用程式會在市集中發佈。 您可以選擇將應用程式設定為在您進行測試時無法在市集中探索。 如需詳細資訊,請參閱我們測試指導方針

此範例中的程式碼假設:

  • 程序碼會在 Page 的內容中執行,其中包含名為 workingProgressRingProgressRing 和名為 textBlockTextBlock。 這些物件是用來指出非同步作業正在發生,以及分別顯示輸出訊息。
  • 程式碼檔案具有 Windows.Services.Store 命名空間的 using 陳述式。
  • 應用程式是單一使用者應用程式僅會在啟動應用程式的使用者內容中執行。 如需詳細資訊,請參閱應用程式內購買和試用版

注意

如果您有使用傳統型橋接器的傳統型應用程式,可能需要新增未顯示在本範例中的其他程式碼來設定 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.
        }
    }
}

如需完整的範例應用程式,請參閱市集範例