Windows Phone 7 - 學習製作試用版(Trial)程式
在開發程式的經驗裡,以前總是就開啟Visual Studio後,接著就把自己要開發出來的App實作出來。
其實也沒有特別去想說要不要給別人試用,或者對於試用的程式版本該怎麼來開發也不是非常有概念。
基於這二個模糊不清的概念下,還好這次WP7開發手冊蠻完整的,也提供了幾篇相關的文件,
讓個人類型的開發人員,可以學習試做一些試用版的程式提供給用戶嘗試。
〉實作試用版與正式版程式差異的要點:
(1) 思考在設計Trial Mode與Full Mode二者之間的差異,例如:內容、功能、使用時間長度等
(2) 在Windows Phone 7中提供一個屬性的方式來識別用戶目前使用的版本為何(true:Trial; false: Full)
(3) XNA Framework(使用GameService.Guide類別中二個重要的方法建立二個不同的版本)
例如:使用Guide.IsTrialMode()取得現在的license model;或Guide.ShowMarketplace()初始化正式版內容。
(4) Silverlight App也可以使用XNA Framework提供的功能;或是使用IsTrial()直接取得現在的license state。配合
MarketplaceDetailTask類別中的Show()初始化正式版內容。
(5) 如果經常會需要去確認Trial State時,由於IsTrial()與Guide.IsTrialMode()事件觸發需要約60 milliseconds或更多,
所以建議Cache起來。
〉實作試用版(Trial)應用程式
製作試用版應用程式可以依照設計者針對它與正式版二者之間分隔出一個簡單或複雜的差別,然而在實作裡有三個
重要的目標一定要做到:
(1) 清楚標示出Trial與Full mode二者的差異性
(2) 在應用程式中提供一個可購買程式的途徑
(3) 定義一個試用版的使用限制範圍
舉例來說:
通常設計Trial與Full Mode二者的差異,可能會以功能(例如:設定鬧鐘只有1組且不能選擇自訂的鈴聲)或是內容(例如:
遊戲只能玩到第1關,要繼續往下就要購買正式版),這些都是清楚定義二者之間的差異,並且限制了試用版可使用的
範圍,另外,在使用者嘗試完試用版之後要自動提供一個導向Marketpalce提供購買的路徑。
[注意]
當導向Marketplace程式進行購買該應用程式(或遊戲)時,目前試用版的程式會變成tombstone。等到用戶購買完畢,
回到應用程式(或遊戲)時,此時的應用程式的License會被自動覆寫變成完整版。
以下以Silverlight應用程式為例:
a. 識別目前應用程式是屬於試用版還是完整版
1: using Microsoft.Phone.Marketplace;
2:
3: //LicenseInformation類別允許去識別應用程式是否運作於試用版模組下
4: public LicenseInformation gLicenseInfo = new LicenseInformation();
5:
6: private void GetFullMode ()
7: {
8: if (!gLicenseInfo.IsTrial())
9: {
10: //IsTrial() == false,代表為Full Mode。
11: InitializationFullMode();
12: }
13: else
14: {
15: //IsTrial() == true,代表為Trial Mode。
16: NavigatePurchasePage();
17: }
18: }
19:
b. 透過Microsofot.Phone.Task命名空間裡的:MarketplaceDetailTask.Show(),開啟Windows Phone Marketplace並導向目前
應用程式的詳細說明頁面。詳細Phone.Task可以參考<Windows Phone 7-重要的操作-Microsoft.Phone.Tasks>
1: using Microsoft.Phone.Tasks;
2:
3: //應用程式執行WP中的Marketplace程式,並呈現指定商品的詳細資訊。
4: //提供設定ContentType、ContentIdentifier來指定產品內容的呈現。
5: public MarketplaceDetailTask gDetailTask = new MarketplaceDetailTask();
6:
7: private void btnPurchaseApp_Click(object sender, RoutedEventArgs e){
8: gDetailTask.Show();
9: }
看完上面介紹,有沒有感覺要在已開發完成的應用程式裡,加上Trial Mode與Full Mode的應用是非常容易的事情呢。
但是開發的時候,使用的是WP7 Emulator或是Unlocked Device,執行測試或Debug時會出現無法連結Marketplace Service
與取得IsTrial()為false的值。
為了讓在開發階段就可以實際測試Trial與Full Mode的差異是否能按我們期望的進行,WP7開發手冊也提供二種模擬方法,
以下將仔細說明:
〉測試版程式如何做Unit Test與Debug (Trial Mode Testing Overview)
由於在針對Trial mode的程式進行Debug時,會遭遇到我們在程式中識別目前程式是Trial Mode或Full Mode來進行功能或
內容的使用,另外Full Mode又會牽扯到Marketplace ID的使用,造成整個測試上會以傳統有很大的差異。
因此,在測試Trial Mode與Full Mode時就需要透過模擬(Simulating)的方式來進行。
‧XNA Framework程式必須透過GameService.Guide類別進行二種不同版本的模擬情境。
使用GameService.Guide在模擬情境與實際WP7 Device上使用有幾點需要注意的地方:
A. Guide.SimulateTrialMode屬性:
專門設定目前執行情境是在模擬情境或真實情境下。True:代表模擬情境;False:代表真實情境。
在Silverlight程式中,透過引入Microsoft.XNA.Framework.GameServices命名空間使用,在XNA中該屬性為唯讀值。
B. 在模擬情境(Guide.SimulateTrialMode = true)下:
=> Guide.IsTrialMode() 會回傳Guide.SimulateTrialMode的屬性值;
=> Guide.ShowMarketplace() 將會轉換Guide.SimulateTrialMode值為false,並且透過一個MessageBox詢問你是否要轉換情境。
C. 在真實情境下(Guide.SimulateTrialMode = false)下:
=> Guide.IsTrialMode() 如同Silverlight程式中使用的IsTrial()方法相同;
=> Guide.ShowMarketplace() 如同Silverlight程式中使用的MarketplaceDetailTask.Show()方法有相同功能。
範例程式:
(1) 先到App.xaml中設定Guide.IsTrialMode為true;如果是XNA遊戲程式的話,Guide.IsTrialMode為唯讀的。
1: using Microsoft.Xna.Framework.GamerServices;
2:
3: public App()
4: {
5: //設定IsTrialMode為true
6: #if DEBUG
7: Guide.SimulateTrialMode = true;
8: #endif
9: }
10:
(2) 判斷是否目前為試用版與進入Marketplace中購買的詳細說明頁面
1: using Microsoft.XNA.Framework.GameServices;
2: using Microsoft.Xna.Framework;
3:
4: private void GetFullMode ()
5: {
6: if (Guide.IsTrialMode == false)
7: {
8: InitializationFullMode();
9: }
10: else
11: {
12: //設定ShowMarketplace中使用的Player列舉,PlayerIndex列舉支援:One, Two, Three, Four。
13: Guide.ShowMarketplace(PlayerIndex.One);
14: }
15: }
‧Silverlight程式除了可以使用GameService.Guide類別之外,有支援透過自訂的方法(使用LicenseInformation.IsTrial()與
MarketplaceDetailTask.Show())來進行測式。
A. 自訂方法 (加入這段指令的話,在上傳至marketplace時,記得上傳Release版本,不要上傳Debug版本。)
1: LicenseInformation gLicenseInfo = new LicenseInformation();
2:
3: private bool CheckIsTrial()
4: {
5: #if DEBUG
6: MessageBoxResult tResult = MessageBox.Show("是否模擬Full Mode(正式版License)?", "模擬版本類型", MessageBoxButton.OKCancel);
7:
8: if (tResult == MessageBoxResult.OK)
9: {
10: return false;
11: }
12: else
13: {
14: return true;
15: }
16: #else
17: gLicenseInfo.IsTrial();
18: #endif
19: }
B. 測試MarketplaceDetailTask.Show()是否正常導向該程式於Marketplace上的詳細說明畫面。
如果得到這個訊息(Error code 80070057)代表程式有成功連上Marketplace。
==========
以上是分享關於製作WP7 應用程式時,如果要開發具有試用版的能力時,可以參考的地方。
撰寫篇文章是因為我在送審WP7程式時,它有一個選項讓我勾選是否該程式支援Trial Version,
我打勾了,但我發現我自己也沒有做Trial Mode與Full Mode的差異性限制,變成全都是完整版的使用。
因此,特別補一下該篇文章的介紹。也當作自己的筆記。
References:
‧Creating Trial Applications for Windows Phone (必讀)
‧Updating Applications in Windows Phone Marketplace
‧How to: Test and Debug your Trial Application for Windows Phone
‧Simulating Trial Mode for Marketplace Content (Xbox 360, Windows Phone)
‧GamerPrivileges.AllowPurchaseContent Property