NFC 与 Windows Phone 的那点事儿
说起NFC这个词儿应该已经不陌生了,在我们的生活中有很多使用场景都是使用的这项技术,例如公交卡,门禁,还有银联的闪付卡等等。并且近些年在移动设备上使用的场景也越来越多,例如 对 NFC TAG 的读写,对 NFC+蓝牙 耳机音响的支持,还有手机和手机之间的数据交换场景。
说起NFC这项技术其实也不算新奇了,许多手机都支持例如,Nokia、三星、SONY、HTC、小米都有机型硬件支持NFC的功能。在应用商店中搜索NFC也可以找到不少 NFC 相关的应用,但是目前来讲使用率还是个问题,不管怎样今天我还是想在这里为大家 分享一下在 Windows Phone 平台中对NFC功能的技术支持情况。对不对的请大家参考一下,多多提些意见。
从NFC在手机上支持的场景上看大致分为三种模式(点对点模式,主动模式,被动模式)
首先说一下点对点模式,点对点模式实际上就是在两台手机上都同时打开NFC后,将手机进行触碰(实现 Touch and Connect就是一个典型场景),通过NFC的数据交换,可以引导不同设备进行连接,例如应用和应用间的 Socket,蓝牙耳机、音响 (基于蓝牙配对)。这部分内容请参考我之前的文章 近场通信 NFC / Bluetooth Proximity
主动模式 (读/写 卡模式) 就是在移动设备中NFC模块产生射频场从外部采用相同标准的NFC标签中读写数据。这里面有一个典型的使用场景就是在Android手机上使用支付宝为公交卡充值。
或者从应用当中通过NFC读取银行卡的消费记录
以上两个场景都是属于主动模式,在 Windows Phone 生态系统中也不乏对NFC前景看好的朋友研究过此类功能。在 Windows Phone 8.0 SL 的框架下开发由于SDK的限制不能使用除了NDEN以外的通信格式。所以不能支持此功能,但是在现在的 Windows Universal 框架下 Windows Phone 8.1 可以通过Windows.Devices.SmartCards.SmartCardReader,Windows.Devices.Enumeration.DeviceInformation等SDK实现此功能,但是要有一点要注意的是和类似公交卡这样的NFC设备进行交互还需要手机硬件NFC芯片的支持,特需NXP PN547芯片 只要配置此种芯片的手机就可以实现 多种协议的NFC卡片交互例如:MIFARE Classic/Ultralight/DESfire 如果我没记错的话 公交卡是第一种。目前在Windows Phone 家族中使用此种芯片的设备有 (Lumia 830 & 73x)
这里我列举一个 Sample Code, 由于本人手上木有这新款设备暂时没有上手测试过,不过凭直觉看上去问题不大。(如果有测试设备或者有开发过Android类似应用的大牛,还请帮忙测试一下,很愿意和大家一起研究这部分功能)这里还有一个CodePlex上的开源项目用于介绍这部分功能:NFC Smart Card Reader PC/SC Library
public async void TestNFC()
{
string selector = SmartCardReader.GetDeviceSelector();
var deviceInfoCollection = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(selector, null); if (deviceInfoCollection.Count != )
{
var scReader = await Windows.Devices.SmartCards.SmartCardReader.FromIdAsync(deviceInfoCollection[].Id); scReader.CardAdded += async (s, c) =>
{
SmartCard sc = c.SmartCard;
SmartCardStatus scStatus = await sc.GetStatusAsync();
if (scStatus == SmartCardStatus.Ready) // This Check is not needed.
{
SmartCardConnection scConn = await c.SmartCard.ConnectAsync();
scConn.TransmitAsync(/*APDU command*/); // You can send the command and receive the response from Device
}
};
}
}
被动模式(卡模拟 - Card Emulation),顾名思义就是将具备NFC功能的手机模拟成一张消费/会员/银行/等。卡片进行数据(花)交互(钱)。谈到跟钱相关的交互不得不提的一个名词就是 NFC- Secure Element 既: NFC–SE 这个SE我们可以简单的理解成是我们在网上消费时使用网银过程中让我们插入电脑USB接口中的U盾。 这里存有用户支付相关的安全信息,需要由单独的设备保存。目前在所有手机平台中做法分为三种:
第一种,独立存储芯片(全终端的解决方案 - Embedded),例如苹果设备(iP6 用户的指纹等安全信息是保存在独立的芯片当中),提供最高安全级别的权限,并且会开发部分SDK给 MO,银行,及开发者。
第二种,SWP(Single Wire Protocol - UICC)其中还有 eNFC、NFC-SIM 其实都是可以将安全信息写在 SIM 卡中,例如 现在中国移动有一种NFC-SIM卡就是这种解决方案,实现了公交卡刷卡乘坐地铁和公交的功能,其他三方应用需要和中国移动这样的运营商合作才能使用这类的 SE 进行消费验证。
第三种,NFC-SD 如果严格说NFC-SD 也是SWP的一种,为什么把它单独拿出来的原因是他与SIM的SE相比更为灵活。不会受到MO的制约,受到银行的认可(因为每个银行本来就是有自己的U盾么),但是 NFC –SD 的短板也非常明显,首先不是所有所有的手机都支持SD卡的SE,另外面对不同的消费的模拟需要更换不同的SD卡对于用户来说还是太挑战了,所以没有广泛的使用起来。
所以综上所述,手机内独立芯片的场景目前应该是 Apple 在尝试走的路,SWP(NFC-SIM)使用较为多的一种在Windows Phone 中同样也是支持的,对于NFC Emulation的开发内容就会牵扯到手机对UICC SE (Universal Integrated Circuit Card)的操作,这里需要开发者如果要完整SE的支付是需要和 运营商(MO) 的开发者一同完成整个购买流程,另外如果是MO自己的应用有些操作内容是需要MO权限才可以例如:更新部分SE内容。(这部分内容我暂时也没有试过,如果有MO开发者想做WP上的内容欢迎联系,我们一起研究探讨)微软对于如何申请MO权限以及如何UICC SE内容也有一个指导书大家可以参考一下。总的来说还是要申请权限建立信任证书,然后根据MO的信任机制进行开发流程:
参考:App development guide for UICC based NFC card emulation for Windows Phone 8.1
从实现场景上看目前中国移动以及和多家进行了合作例如
北京市政公交一卡通
银行的闪付
今天我在这里只是为大家介绍了一下NFC支付相关内容,在 Windows Phone 8.1 也是具备 读卡,刷卡,支付 等场景的,希望大家了解了这部分内容后可以结合自己好的想法做出更好的应用,相信今后是一定会迎来一个NFC时代的到来大家赶快行动起来吧:)
希望上的总结可以帮助到大家, 同时欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick
NFC 与 Windows Phone 的那点事儿的更多相关文章
- Windows系统版本号判定那些事儿
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- Windows系统版本判定那些事儿
v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...
- Windows系统版本判定那些事儿[转]
Windows系统版本判定那些事儿 转自CSDN,原文链接,我比较不要脸, 全部给复制过来了 前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度 ...
- 10#Windows注册表的那些事儿
引言 用了多年的Windows系统,其实并没有对Windows系统进行过深入的了解,也正是由于Windows系统不用深入了解就可以简单上手所以才有这么多人去使用.笔者是做软件开发的,使用的基本都是Wi ...
- Windows系统版本判定那些事儿(有图,各种情况,很清楚)
前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度讨论下Windows获取系统版本的方法和遇到的一些问题.在Win8和Win10出来之后,在获取 ...
- 系统windows版本修改
系统基本信息修改 系统windows版本修改 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com ...
- NTDLL未文档化函数RtlGetNtVersionNumbers获取操作系统版本
作为新手,对获取操作系统版本号好奇过,因为曾经假象过一个场景:自己的程序在windows xp环境下编译,在windows 2003, windows 7,windows 8是否需要提权或者兼容处理, ...
- 从windows server 2003中学到的事儿
2003让我学会了几件事儿, 第一.自己会装系统了. 第二.知道很多选项是可以自己进行设置的.这点很重要,本来xp用得很习惯,然后很多都理所当然得认为,就应该是那个样子,可是,并不是的. 在2003不 ...
- Windows读取NXP MiFare Ultralight C类型NFC卡片的信息
1,读取 我们需要外接一个NFC Reader让Windows可以读取NFC卡片的内容. 因为特殊原因,我们选择了Sony rc-s380 NFC Reader.相关介绍 我们需要下载并安装NFC P ...
随机推荐
- maven 打包 xml文件
说起来手贱啊,搞了两个小时,就是因为打包的时候,maven无法把xml文件打包到正确的位置. 本来应该是打包到 com/presistence包下,结果打出来有两个包,一个是com/presisten ...
- [游戏模版9] Win32 半透明 图像处理
>_<:Previous part we talk about how to map a transparent picture, and this time we will solve ...
- 小米Web前端JavaScript面试题
面试题目 一. 请定义这样一个函数 function repeat (func, times, wait) { } 这个函数能返回一个新函数,比如这样用 var repeatedFun = repea ...
- js常规日期格式处理、月历渲染、倒计时函数
日期格式处理在前端的日常任务中非常常见,但是为此引入monent.js这样的类库又会显得有点臃肿,毕竟我们一个特定的项目中,并不需要monent.js那么全的涵盖范围.另外,如果现在公司让你自己手写一 ...
- 浅谈压缩感知(三十):压缩感知重构算法之L1最小二乘
主要内容: l1_ls的算法流程 l1_ls的MATLAB实现 一维信号的实验与结果 前言 前面所介绍的算法都是在匹配追踪算法MP基础上延伸的贪心算法,从本节开始,介绍基于凸优化的压缩感知重构算法. ...
- DOM操作(Window.document对象)
间隔与延迟: 间隔一段代码: window.setInterval("代码",间隔执行秒数) 延迟一段时间后执行一段代码: window.setTimeout("执行代码 ...
- iOS开发-UIScrollView原理
UIScrollView在开发中是不可避免,关于UIScrollView都有自己一定的理解.滚动视图有两个需要理解的属性,frame和bounds,frame是定义了视图在窗口的大小和位置,bound ...
- maven pom.xml报错
再在项目上强制update一下就可以了 如下: 此外使用maven时用默认的仓库速度会过慢 下载很小的jar包都需要很久 推介使用oschina的源 使用在这里:
- 在线教程的游戏化-20分钟做了个demo
首先,不准说做得撇,因为其一,我只用了20分钟不到:其二,第一次尝试,以前想过,但是一直没有搞过,二话不说,先来截图,下载地址在最下面. 因为第一次尝试,所以很多事件自己还没有闹明白,不过基本上还是看 ...
- C#窗体全屏功能
最近有朋友让我给他弄个应用程序全屏的功能,例如银行的取号程序界面.所以我从网上查询了一些实现的方法. C#应用程序中如何实现全屏幕显示功能? 效果就像windows自带的屏幕保护程序和众多的游戏那样, ...