Windows Phone中Wallet钱包的使用
- 前言
???? Windows Phone 8中加入了錢包Wallet這個功能,這個功能非常的有意思,開發者可以通過Wallet提供的API創建獲取Wallet中的商品。統一管理用戶的收集優惠券、信用卡、成員資格、會員卡和一些自定義的信息。甚至可以將自己開發的應用集成到系統的Wallet中,不僅方便了用戶的管理,還可以讓用戶直接從Wallet中得到關聯的應用。這個關聯的功能非常適合一些筆記類、旅行類、金融管理類的應用,比如,印象筆記、有道筆記、挖寶和攜程、藝龍。
- Deals、Membership和Transactions
?? 在使用Wallet的API之前,你必須要開啟應用的Wallet能力,在WMAppManifest.xml中勾選ID_CAP_WALLET,如下圖。
??? Deals是一種常用的Wallet類型,你可以理解為是一個優惠劵的集合,你可以在你的應用內創建優惠劵信息并將其添加到系統的Wallet中,并提供了更新、刪除的功能。
var deal = new Deal(guid); deal.MerchantName = "Contoso"; deal.MerchantAddress.Business1.Street = "boulevard Roi Albert II"; deal.MerchantAddress.Business1.PostalCode = "1030"; deal.MerchantAddress.Business1.City = "Schaerbeek"; deal.MerchantAddress.Business1.CountryRegion = "Belgium"; deal.OfferWebsite = new Uri("http://www.contoso.com"); deal.IssuerName = "Contoso"; deal.StartDate = DateTime.Now.Date.AddDays(1); deal.ExpirationDate = deal.StartDate.Value.AddMonths(2); var barcode = new BitmapImage(); barcode.SetSource(Application.GetResourceStream(new Uri("Assets/barcode.bmp", UriKind.Relative)).Stream); deal.BarcodeImage = barcode; var logo99 = new BitmapImage(); logo99.SetSource(Application.GetResourceStream(new Uri("Assets/DealIcon99.png", UriKind.Relative)).Stream); deal.Logo99x99 = logo99; var logo159 = new BitmapImage(); logo159.SetSource(Application.GetResourceStream(new Uri("Assets/DealIcon159.png", UriKind.Relative)).Stream); deal.Logo159x159 = logo159; var logo336 = new BitmapImage(); logo336.SetSource(Application.GetResourceStream(new Uri("Assets/DealIcon336.png", UriKind.Relative)).Stream); deal.Logo336x336 = logo336; deal.CustomProperties.Add("Perso", new CustomWalletProperty("Custom field", "This is a custom message.")); await deal.SaveAsync();????? 上面我們就創建了一個deal并通過SaveAsync方法將其保存到了Wallet中。deal的Logo有三種格式,分別對應不同分辨率的手機。CustomProperties是一個字典類,來保存自定義的信息。
var walletItems = await Wallet.GetItemsAsync(); var item = walletItems.FirstOrDefault(s => s.Id == guid); if(item != null) {Wallet.Remove(item); }?????? GetItemsAsync方法返回的是一個WallteItemCollection的集合,這個集合是包括我們應用內創建愛你的WalletItem,不包括其他入口創建的WalletItem,所以你只能對自己應用內創建的Item做修改。你可以使用Linq來獲取單個的元素,使用Wallet的Remove方法從Wallet中刪除deal。
?????? Wallet也可以用來支付,通過OnlinePaymentInstrument,PaymentInstrument,WalletTransactionItem可以實現不同需求,下面我們主要講的還是最后一種WalletItem,前兩種需要你的開發者賬號到MarketPlace注冊。下面我們來創建一個會員卡的WalletItem。
var membership = new WalletTransactionItem("ContosoRewards"); var logo99 = new BitmapImage(); logo99.SetSource(Application.GetResourceStream(new Uri("Assets/Icon99.png", UriKind.Relative)).Stream); membership.Logo99x99 = logo99; var logo159 = new BitmapImage(); logo159.SetSource(Application.GetResourceStream(new Uri("Assets/Icon159.png", UriKind.Relative)).Stream); membership.Logo159x159 = logo159; var logo336 = new BitmapImage(); logo336.SetSource(Application.GetResourceStream(new Uri("Assets/Icon336.png", UriKind.Relative)).Stream); membership.Logo336x336 = logo336; membership.DisplayName = "Contoso Shop"; var task = new AddWalletItemTask {Item = Membership}; task.Completed += taskCompleted; task.Show();private void taskCompleted(object sender, AddWalletItemResult e){if (e.TaskResult == TaskResult.OK){MessageBox.Show("Membership created");}else{MessageBox.Show("Membership not created !");}}????? WalletTransactionItem需要通過AddWalletItemTask添加到Wallet中,這時我們在Wallet中就可以看到我們剛剛創建的會員卡了。通常我們還要特別記錄會員卡的使用情況,這個記錄也可以記錄在Wallet中,通過WalletTransactionItem的TransactionHistory屬性向Wallet中添加使用記錄。
Membership.TransactionHistory.Add(Guid.NewGuid().ToString(), new WalletTransaction{Description = "超市消費",DisplayAmount = "-100",IsTransactionTimeValid = true,TransactionDate = DateTime.Now});- WalletAgent
??? 上面的例子都是我們在自己創建的App內操作Wallet中的數據,試想如果我們在網站上貼出了一個優惠劵,通過自己的App將這個優惠劵添加到了Wallet中,如果這個優惠劵過期了我們能否在不打開原應用的情況下直接在Wallet中刷新優惠劵呢?答案是可以的,這就需要我們在應用內添加一個WalletAgent,如果之前沒有使用過BackgroundAgent,那么最好先自行Google一下BackgroundAgent的原理。
??????繼承自WalletAgent的代理類只需要重寫OnRefreshData就可以對Wallet中的優惠劵做出相應的操作,args.Items代表可以更新的優惠劵的項。用戶通過點擊相應優惠劵下的刷新按鈕處罰OnRefreshData事件,我們可以通過一個WebService獲取網絡上有關優惠劵最新的信息,然后更新Wallet。
- 將應用集成到Wallet中
??? 為了讓用戶在Wallet的其他選項中發現你的應用,你需要將你的應用添加為Wallet的擴展。這樣當用戶點擊“添加”時,會使您的應用出現在 Wallet 的“其他”應用列表中。隨后,用戶可以從該列表中挑選您的應用,該應用將在手機上下載并安裝。若要出現在 Wallet 的“其他”列表中,請注冊為一項 Wallet 擴展。擴展在您的應用項目的 WMAppManifest.xml 文件中指定。以下是 WMAppManifest.xml 文件的一個示例,其中包含用于將應用注冊為 Wallet 擴展的 Extension 元素。
<Extensions><Extension ExtensionName="Wallet_app_membership" ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5683}" TaskID="_default"/> </Extensions>???? 在以上代碼中,通過在 WMAppManifest.xml 文件中將一個 Extension 元素添加至 Extensions擴展。
???? ExtensionName: 定義所注冊擴展的類型。注冊為 Wallet 擴展時,此屬性的有效值為:
-
Wallet_app_other – 用于非特定 Wallet 項目
-
Wallet_app_loyalty – 用于信用卡
-
Wallet_app_membership – 用于會員卡
-
Wallet_app_transit – 用于儲值卡
-
Wallet_app_payment – 用于支付卡
???? 即使你的應用將用于多種 Wallet 項目類型也只需要注冊一次,。可以按需要注冊為多種 Wallet 項目類型的擴展,方法是在 WMAppManifest.xml 文件中將多個 Extension 元素添加到 Extensions 中。目前,當用戶在Wallet中點擊“其他”以顯示“添加到 Wallet”對話框并查找 Wallet 擴展時,將返回所有擴展,無論注冊為哪種 Wallet 項目類型。
-
ConsumerID: 這是一個固定值,在手機上設置為 Wallet 應用的 id,即 {5B04B775-356B-4AA0-AAF8-6491FFEA5683}。
-
TaskID: 將此設置為 default。
?
?
轉載于:https://www.cnblogs.com/ghostwutao/p/3654589.html
總結
以上是生活随笔為你收集整理的Windows Phone中Wallet钱包的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装了C
- 下一篇: store前台数据过滤