Windows Phone中Wallet钱包的使用
2014-04-09 21:48
357 查看
[b]前言[/b]
Windows Phone 8中加入了钱包Wallet这个功能,这个功能非常的有意思,开发者可以通过Wallet提供的API创建获取Wallet中的商品。统一管理用户的收集优惠券、信用卡、成员资格、会员卡和一些自定义的信息。甚至可以将自己开发的应用集成到系统的Wallet中,不仅方便了用户的管理,还可以让用户直接从Wallet中得到关联的应用。这个关联的功能非常适合一些笔记类、旅行类、金融管理类的应用,比如,印象笔记、有道笔记、挖宝和携程、艺龙。
[b]Deals、Membership和Transactions[/b]
在使用Wallet的API之前,你必须要开启应用的Wallet能力,在WMAppManifest.xml中勾选ID_CAP_WALLET,如下图。
Deals是一种常用的Wallet类型,你可以理解为是一个优惠劵的集合,你可以在你的应用内创建优惠劵信息并将其添加到系统的Wallet中,并提供了更新、删除的功能。
上面我们就创建了一个deal并通过SaveAsync方法将其保存到了Wallet中。deal的Logo有三种格式,分别对应不同分辨率的手机。CustomProperties是一个字典类,来保存自定义的信息。
GetItemsAsync方法返回的是一个WallteItemCollection的集合,这个集合是包括我们应用内创建爱你的WalletItem,不包括其他入口创建的WalletItem,所以你只能对自己应用内创建的Item做修改。你可以使用Linq来获取单个的元素,使用Wallet的Remove方法从Wallet中删除deal。
Wallet也可以用来支付,通过OnlinePaymentInstrument,PaymentInstrument,WalletTransactionItem可以实现不同需求,下面我们主要讲的还是最后一种WalletItem,前两种需要你的开发者账号到MarketPlace注册。下面我们来创建一个会员卡的WalletItem。
WalletTransactionItem需要通过AddWalletItemTask添加到Wallet中,这时我们在Wallet中就可以看到我们刚刚创建的会员卡了。通常我们还要特别记录会员卡的使用情况,这个记录也可以记录在Wallet中,通过WalletTransactionItem的
[b]WalletAgent[/b]
上面的例子都是我们在自己创建的App内操作Wallet中的数据,试想如果我们在网站上贴出了一个优惠劵,通过自己的App将这个优惠劵添加到了Wallet中,如果这个优惠劵过期了我们能否在不打开原应用的情况下直接在Wallet中刷新优惠劵呢?答案是可以的,这就需要我们在应用内添加一个WalletAgent,如果之前没有使用过BackgroundAgent,那么最好先自行Google一下BackgroundAgent的原理。
继承自WalletAgent的代理类只需要重写OnRefreshData就可以对Wallet中的优惠劵做出相应的操作,args.Items代表可以更新的优惠劵的项。用户通过点击相应优惠劵下的刷新按钮处罚OnRefreshData事件,我们可以通过一个WebService获取网络上有关优惠劵最新的信息,然后更新Wallet。
[b]将应用集成到Wallet中[/b]
为了让用户在Wallet的其他选项中发现你的应用,你需要将你的应用添加为Wallet的扩展。这样当用户点击“添加”时,会使您的应用出现在 Wallet 的“其他”应用列表中。随后,用户可以从该列表中挑选您的应用,该应用将在手机上下载并安装。若要出现在 Wallet 的“其他”列表中,请注册为一项 Wallet 扩展。扩展在您的应用项目的 WMAppManifest.xml 文件中指定。以下是 WMAppManifest.xml 文件的一个示例,其中包含用于将应用注册为 Wallet 扩展的 Extension 元素。
在以上代码中,通过在 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。
Windows Phone 8中加入了钱包Wallet这个功能,这个功能非常的有意思,开发者可以通过Wallet提供的API创建获取Wallet中的商品。统一管理用户的收集优惠券、信用卡、成员资格、会员卡和一些自定义的信息。甚至可以将自己开发的应用集成到系统的Wallet中,不仅方便了用户的管理,还可以让用户直接从Wallet中得到关联的应用。这个关联的功能非常适合一些笔记类、旅行类、金融管理类的应用,比如,印象笔记、有道笔记、挖宝和携程、艺龙。
[b]Deals、Membership和Transactions[/b]
在使用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 });
[b]WalletAgent[/b]
上面的例子都是我们在自己创建的App内操作Wallet中的数据,试想如果我们在网站上贴出了一个优惠劵,通过自己的App将这个优惠劵添加到了Wallet中,如果这个优惠劵过期了我们能否在不打开原应用的情况下直接在Wallet中刷新优惠劵呢?答案是可以的,这就需要我们在应用内添加一个WalletAgent,如果之前没有使用过BackgroundAgent,那么最好先自行Google一下BackgroundAgent的原理。
protected override async void OnRefreshData(Microsoft.Phone.Wallet.RefreshDataEventArgs args) { foreach (var walletItem in args.Items) { var transactionitem = walletItem as WalletTransactionItem; if (transactionitem == null) continue; int balance; if (int.TryParse(transactionitem.DisplayBalance.Split(' ')[0], out balance)) { balance = balance + 10; transactionitem.DisplayBalance = balance + " points"; transactionitem.TransactionHistory.Add(Guid.NewGuid().ToString(), new WalletTransaction { Description = "Agent operation", DisplayAmount = "+ 10", IsTransactionTimeValid = true, }); await transactionitem.SaveAsync(); } else { // Error, do something } } base.OnRefreshData(args); }
继承自WalletAgent的代理类只需要重写OnRefreshData就可以对Wallet中的优惠劵做出相应的操作,args.Items代表可以更新的优惠劵的项。用户通过点击相应优惠劵下的刷新按钮处罚OnRefreshData事件,我们可以通过一个WebService获取网络上有关优惠劵最新的信息,然后更新Wallet。
[b]将应用集成到Wallet中[/b]
为了让用户在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。
相关文章推荐
- Windows Phone中Wallet钱包的使用
- Windows Phone 8 Wallet 手机钱包 / 电子钱包
- Simple_Wallet 使用Python来操控钱包
- Windows Phone 8 Wallet 手机钱包 / 电子钱包
- 使用 neon-wallet-db + neon-js + NEO-cli /rpc 搭建轻钱包服务端
- Windows Phone 7 中使用的MD5加密算法
- oracle wallet使用与维护---oracle无密码登录
- Windows Phone 7开发学习(4):Style样式的四种使用
- 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议
- windows phone 8 使用页面传对象的方式 实现页面间的多值传递
- Windows Phone 使用ZXing库实现二维条码扫描和生成
- windows phone 8 使用一段时间后收集的bug及临时解决办法
- 解决windows phone中使用sqlite时报SQLiteClient.SQLiteException: unrecognized token错误
- [技术分享]使用Windows Phone 7打开SharePoint上的文档
- Windows Phone 7触摸屏事件Manipulation的使用
- 如何使用 Windows Phone 商城详细信息任务
- 【技术直通车】在Windows Phone上使用SQLite,并获取和编辑模拟器中的数据库文件
- [翻译]使用XAML创建Windows Phone用户界面
- 在你的Windows Phone 7 应用程序中植入广告(广告控件的使用)
- ETH在线钱包推荐使用,简单安全,无任何费用也是最老的ETH在线钱包