建立試用版的應用程式 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
如果客戶可以免費試用您的應用程式一段時間,您可以將應用程式設計為在試用期間排除或限制某些功能。您也可以啟用橫幅或浮水印之類的功能,這些功能僅在客戶購買您的應用程式之前的試用期間顯示。 讓我們看看如何將它新增至應用程式。
如果您想要嘗試使用試用版應用程式和其他主要的 Windows 8 功能,請下載 Windows 8 的實機操作實驗室。這些實驗室提供一個模組化的逐步介紹,以您選擇的程式設計語言 (JavaScript 和 HTML 或 C# 和 XAML) 建立 Windows 市集應用程式範例。
您必須知道的事
技術
- Windows Runtime
- Windows.ApplicationModel.Store
先決條件
- 要修改的 Windows 執行階段應用程式
指示
步驟 1: 挑選要在免費試用期間啟用或停用的功能
應用程式目前的授權狀態會儲存為 LicenseInformation 類別的屬性。一般而言,您會將依存於授權狀態的函式放在條件性區塊中,如下個步驟所述。考量這些功能時,請確定您實作功能的方式,可在所有授權狀態下運作。
此外,決定您在應用程式執行時要如何處理應用程式授權的變更。您的試用版應用程式可具備完整功能,但應用程式內會有付費版本所沒有的廣告橫幅。或者,試用版應用程式可以停用特定功能,或是定期顯示訊息,詢問使用者是否要購買。
考慮您正在製作的應用程式類型,以及適合採用哪種試用或到期策略。對於遊戲試用版,採用的策略最好是限制使用者可玩的遊戲內容。對於試用版公用程式,您可考慮設定到期日,或是限制潛在買家會使用的功能。
對於大部分非遊戲類型的應用程式,設定到期日是一種很好的做法,因為使用者可以對完整的應用程式有比較深入的了解。這裡提供幾個常見的到期日案例以及您如何處理的選項。
試用授權在應用程式執行時到期
如果您的應用程式正在執行時試用到期,應用程式可以:
- 什麼也不做。
- 對客戶顯示訊息。
- 關閉。
- 提示客戶購買應用程式。
最佳做法是顯示一個提示購買應用程式的訊息;如果客戶購買應用程式,就啟用所有功能讓他們繼續使用。如果客戶決定不要購買,就關閉應用程式,或定期提示他們購買應用程式。
試用授權在應用程式啟動之前到期
如果試用期在使用者啟動應用程式之前就已到期,應用程式將無法啟動。使用者將會看到一個對話方塊,提供他們從市集購買應用程式的選項。
客戶在應用程式執行時購買應用程式
如果客戶在您的應用程式執行時購買它,這裡是您應用程式可以採取的動作。
- 什麼也不做,讓客戶在試用模式下繼續使用,直到重新啟動應用程式。
- 感謝他們購買,或是顯示一則訊息。
- 不顯示訊息直接啟用完整授權的所有功能 (或停用試用版通知)。
如果您想要偵測授權變更並在應用程式中執行一些動作,您必須按照下個步驟中的做法,新增事件處理常式。
步驟 2: 初始化授權資訊
當您的應用程式初始化時,為您的應用程式取得 LicenseInformation 物件,如此範例中所示。我們假設 licenseInformation 是類型 LicenseInformation 的全域變數或欄位。
初始化 CurrentApp 或 CurrentAppSimulator 以存取應用程式的授權資訊。
function initializeLicense()
{
// (some app initialization functions)
// Initialize the license info for use in the app that is uploaded to the Store.
// uncomment for release
// currentApp = Windows.ApplicationModel.Store.CurrentApp;
// Initialize the license info for testing.
// comment the next line for release
currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;
// get the license info
licenseInformation = currentApp.licenseInformation;
// (other app initialization functions)
}
新增事件處理常式,以在應用程式執行時接收授權變更的通知。例如,如果試用期到期,或是客戶透過市集購買應用程式,則應用程式的授權會有所變更。
function initializeLicense()
{
// some app initialization functions
// Initialize the license info for use in the app that is uploaded to the Store.
// uncomment for release
// currentApp = Windows.ApplicationModel.Store.CurrentApp;
// Initialize the license info for testing.
// comment the next line for release
currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;
// Get the license info
licenseInformation = currentApp.licenseInformation;
// Register for the license state change event.
licenseInformation.addEventListener("licensechanged", reloadLicense);
// other app initializations function
}
function reloadLicense()
{
// (code is in next steps)
}
步驟 3: 以條件性區塊撰寫功能程式碼
授權變更事件觸發時,您的應用程式必須呼叫授權 API 來判斷試用狀態是否有所變更。此步驟中的程式碼顯示如何為此事件建構處理常式。此時,如果使用者購買應用程式,最好可以對使用者提供授權狀態有所變更的回應。根據程式碼的撰寫方式,您可能必須要求使用者重新啟動應用程式。但請盡可能讓轉換流暢、輕鬆。
此範例顯示如何評估應用程式的授權狀態,據以啟用或停用您應用程式的功能。
function 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: 取得應用程式的試用版到期日 (僅限 Windows)
納入可決定應用程式試用版到期日的程式碼。
此範例中的程式碼定義的函式可以取得應用程式試用版授權的到期日。如果授權仍然有效,就會顯示到期日與試用版到期之前的剩餘天數。
function displayTrialVersionExpirationTime()
{
if (licenseInformation.isActive)
{
if (licenseInformation.isTrial)
{
var longDateFormat = Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");
// Display the expiration date using the DateTimeFormatter.
// For example, longDateFormat.format(licenseInformation.expirationDate)
var daysRemaining = (licenseInformation.expirationDate - new Date()) / 86400000;
// Let the user know the number of days remaining before the feature expires.
}
else
{
// ...
}
}
else
{
// ...
}
}
步驟 5: 透過模擬呼叫授權 API 來測試功能
現在請模擬呼叫授權伺服器來測試您的應用程式。在 JavaScript、C#、Visual Basic 或 Visual C++ 中,以 CurrentAppSimulator 取代應用程式初始化程式碼中對 CurrentApp的參照。
CurrentAppSimulator 會從稱為 "WindowsStoreProxy.xml" 的 XML 檔案取得測試專用的授權資訊,該檔案位於 %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData。如果這個路徑或檔案不存在,您必須在安裝或執行階段期間建立。如果您嘗試存取 CurrentAppSimulator.LicenseInformation 屬性,但該特定位置中卻沒有 WindowsStoreProxy.xml,則會發生錯誤。
此範例說明如何將程式碼新增至您的應用程式,以在不同的授權狀態下測試程式。
function appInit
{
// some app initialization functions
// Initialize the license info for use in the app that is uploaded to the Store.
// uncomment for release
// currentApp = Windows.ApplicationModel.Store.CurrentApp;
// Initialize the license info for testing.
// comment the next line for release
currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;
// Get the license info
licenseInformation = currentApp.licenseInformation;
// other app initialization functions
}
您可以編輯 WindowsStoreProxy.xml,變更您應用程式與其功能的模擬到期日。測試所有可能的到期日與授權組態,確認一切無誤。
步驟 6: 以實際的 API 取代模擬的授權 API 方法
以模擬的授權伺服器測試您的應用程式之後,在將應用程式送出至市集進行認證之前,請以 CurrentApp 取代 CurrentAppSimulator,如下一個程式碼範例所示。
重要 在將您的應用程式送出至市集時,該應用程式必須使用 CurrentApp 物件,否則將無法通過認證。
function appInit
{
// (some app initialization functions)
// Initialize the license info for use in the app that is uploaded to the Store.
// uncomment for release
currentApp = Windows.ApplicationModel.Store.CurrentApp;
// Initialize the license info for testing.
// comment the next line for release
// currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;
// Get the license info
licenseInformation = currentApp.licenseInformation;
// (other app initialization functions)
}
步驟 7: 為客戶說明免費試用版的運作方式
務必對客戶說明您的應用程式在免費試用期間或到期之後的行為,客戶才不會對應用程式的行為感到意外。
如需描述應用程式的詳細資訊,請參閱您的應用程式描述。