Windows Phone中In-App Purchase在應用程式內購買

來源:互聯網
上載者:User

前言

在應用程式內購買(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/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.