前言
在應用程式內購買(In-App Purchase)對於開發人員來說絕對是一個非常重要的功能,它提供了一個便捷的入口供使用者來購買付費。在IAP盛行之前的遊戲電訊廠商一般都是通過接入第三方支付入口來收費。之前做過的一個安卓手機遊戲伺服器(Asp.Net),他們採用的付費方式有兩種,一個是接入支付寶的介面,讓使用者可以通過支付寶來付費。還有一種是通過手機電訊廠商來付費,先由使用者把錢付給電訊廠商,電訊廠商通過你註冊的伺服器的API告知該使用者已付費。在Windows Phone 8中就不用擔心第三方付費伺服器的問題了,微軟為我們提供了一個付費的功能,也就是之前提到的IAP,付費的整個過程都是由微軟的交易平台(Microsoft Commerce Platform)來提供支援的,通過Windows.ApplicationModel.Store命名空間下的API可以非常容易的實現IAP的功能,省去了很多接入第三方付費介面的調試時間。下面這張圖介紹了建立和購買虛擬物品的流程。
a/b:開發人員通過Dev Center註冊自己的付費App和所有虛擬物品資訊。如果商品要從伺服器下載,那麼你需要自己提供這個伺服器。
c/d:開發人員拉取Store上註冊的虛擬物品並展示在App內,由使用者來點擊購買。
e/f:微軟交易平台告知你的App使用者付費成功,並擷取電子收據。
g/h:通過微軟交易平台提供的收據作為憑證,從你的伺服器下載虛擬物品。並告知交易平台該商品已經成功分發。
整個過程還是非常簡單清晰的,需要注意的是如果你的遊戲非常的輕量,比如是個單機遊戲,那麼虛擬商品就不需要伺服器的支援,電子收據這步可以省略掉。大型的手機遊戲一般都會有後端伺服器的支援。電子收據為我們從伺服器下載外掛程式時提供了有效憑證。下面我們就先省略掉註冊應用和虛擬物品這兩個步驟,做一個簡易用戶端IAP的例子。
private async void LoadListingInformationAsync() { try { // Query the Windows Phone Store for the in-app products defined for the currently-running app. var listingInformation = await CurrentApp.LoadListingInformationAsync(); foreach (var v in listingInformation.ProductListings) { Products.Add(new ProductViewModel() { Title = v.Value.Name, ProductId = v.Value.ProductId, ImageUri = v.Value.ImageUri }); } } catch { // An exception is expected to be raised by CurrentApp.LoadListingInformationAsync() //when it is not called from an app installed from the Windows Phone Store. } }
上面這段代碼就是非同步從Store中擷取我們事先註冊好的虛擬物品集合。CurrentApp是一個非常重要的類,它包含了所有主要操作虛擬物品的方法。通過上面的方法擷取到虛擬物品的資訊後,我們就可以對資料做進一步的處理,例子當中用一個ObservableCollection類型的集合Producets來儲存資料,並通過databinding將其展示在商品頁面上,供使用者選擇購買。
private async void PurchaseProduct(string productId){ try { // Kick off purchase; don't ask for a receipt when it returns await CurrentApp.RequestProductPurchaseAsync(productId, false); // Now that purchase is done, give the user the goods they paid for // (DoFulfillment is defined later) //DoFulfillment(); } catch (Exception ex) { // When the user does not complete the purchase (e.g. cancels or navigates back from the Purchase Page), // an exception with an HRESULT of E_FAIL is expected. }}
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/