• 前言

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的原理。

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。

  • 将应用集成到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钱包的使用相关推荐

  1. [置顶] iOS中 支付宝钱包详解/第三方支付

    [置顶] iOS中 支付宝钱包详解/第三方支付 韩俊强的博客 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 一.在app中成功完成支付宝支付的过程 1.申请支付 ...

  2. 使用 Windows Decrapifier 和 Debloater 从 Windows 10 中去除

    使用 Windows Decrapifier 和 Debloater 从 Windows 10 中去除 使用 Windows Decrapifier 和 Debloater 从 Windows 10 ...

  3. 【独家打造】DOGX wallet钱包注册下载以及量化收益操作教程

    2 DOGX wallet钱包是基于微区块链技术信的数字钱包,是34一个58去76中278心 化.安全.高效存储ETH.Bitcoin的钱包APP,主流货币的余额 宝.BTC.ETH.BCH.ETC. ...

  4. ip设置 kali 重置_在 Windows 系统中如何重置 TCP/IP 协议堆栈修复网络连接问题

    Internet 在 TCP/IP 协议上工作,如果 TCP/IP 协议堆栈在 Windows 或任何其他操作系统(例如 Linux 或 MacOS)中无法正常工作,则您的 Internet 连接会出 ...

  5. 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库

    在<在windows程序中嵌入Lua脚本引擎--建立一个简易的"云命令"执行的系统>一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序.这是个非 ...

  6. 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统

    在<在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎>开始处,我提到某公司被指责使用"云命令"暗杀一些软件.本文将讲述如何去模拟一个 ...

  7. 在 Windows XP 中,无法使用 Windows 图片和传真查看器来查看图片

    在 Microsoft Windows XP 中试图使用 Windows 图片和传真查看器查看图片时,图片未按预期显示.不过,当使用 Microsoft 画图工具查看图片时,图片会按预期显示. 注意: ...

  8. linux svn missingargument -m,缺少參數-m在windows powershell中使用svn。

    I'm trying to run this at Windows PowerShell: 我試着在Windows PowerShell中運行它: svn ci -m "" dir ...

  9. Windows 7中200M神秘隐藏分区

    裸机全新安装Windows 7的用户,在安装完成后运行diskmgmt.msc打开磁盘管理器,可以看到在系统分区(一般为C分区)之前有一个大小为200MB的隐藏分区.这个特殊的隐藏分区与Windows ...

最新文章

  1. java jdwp如何关闭_蚀-本机方法中的致命错误:JDWP没有初始化传输,jvmtiError = AGENT_ERROR_TRANSPORT_INIT(197)...
  2. STM32的8种GPIO输入输出模式深入详解
  3. 电脑销售技巧_汝州市,如何查询楼盘详细销售数据?官方公布,精确到房间
  4. restful服务端客户端_测试RESTful服务的客户端
  5. ping不通自己的ip地址_如何批量Ping N个IP地址,掌握一个命令让你节省N小时,让老板给你加鸡腿!...
  6. 从源码角度理解 FragmentTransaction实现
  7. MongoDB 数据迁移 备份 导入(自用)
  8. Windows系统cmd命令检测dll文件
  9. 编程实现 无符号加法溢出判断
  10. 并发环境下的缓存容器性能优化(上):不可变的哈希表
  11. 强化学习的数学基础2---PPO算法
  12. 基于stm32F4的项目总结:控制层设计(四)直流有刷电机驱动原理及驱动器选型
  13. HorizontalScrollView+recyclerView
  14. 【精读论文】2015-BMVC-Learning Deep Representations of Appearance and Motion for Anomalous Event Detection
  15. springMVC 生成Excel和PDF
  16. JS实现关闭网页广告弹窗特效
  17. 腾讯离职元老的内部邮件:马化腾的趣事
  18. android基础夯实2
  19. C语言娱乐项目————4、一箭双心
  20. 计算两幅图之间的旋转角

热门文章

  1. 学习工作即游戏:游戏化生存的现实物语
  2. 2016rMBP登录后自动关机、帐户数据丢失
  3. 深入【Get】与【Post】区别
  4. 数据库面试题【五、索引的优缺点,什么时候使用索引,什么时候不能使用索引】
  5. 美团在Redis上踩过的一些坑-3.redis内存占用飙升
  6. 详解 Too many open files
  7. nagios监控-多用户管理
  8. Linux stty
  9. mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式
  10. 【Django】ORM操作#2