说起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 的那点事儿的更多相关文章

  1. Windows系统版本号判定那些事儿

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  2. Windows系统版本判定那些事儿

    v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...

  3. Windows系统版本判定那些事儿[转]

    Windows系统版本判定那些事儿 转自CSDN,原文链接,我比较不要脸, 全部给复制过来了 前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度 ...

  4. 10#Windows注册表的那些事儿

    引言 用了多年的Windows系统,其实并没有对Windows系统进行过深入的了解,也正是由于Windows系统不用深入了解就可以简单上手所以才有这么多人去使用.笔者是做软件开发的,使用的基本都是Wi ...

  5. Windows系统版本判定那些事儿(有图,各种情况,很清楚)

    前言 本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度讨论下Windows获取系统版本的方法和遇到的一些问题.在Win8和Win10出来之后,在获取 ...

  6. 系统windows版本修改

    系统基本信息修改 系统windows版本修改 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com ...

  7. NTDLL未文档化函数RtlGetNtVersionNumbers获取操作系统版本

    作为新手,对获取操作系统版本号好奇过,因为曾经假象过一个场景:自己的程序在windows xp环境下编译,在windows 2003, windows 7,windows 8是否需要提权或者兼容处理, ...

  8. 从windows server 2003中学到的事儿

    2003让我学会了几件事儿, 第一.自己会装系统了. 第二.知道很多选项是可以自己进行设置的.这点很重要,本来xp用得很习惯,然后很多都理所当然得认为,就应该是那个样子,可是,并不是的. 在2003不 ...

  9. Windows读取NXP MiFare Ultralight C类型NFC卡片的信息

    1,读取 我们需要外接一个NFC Reader让Windows可以读取NFC卡片的内容. 因为特殊原因,我们选择了Sony rc-s380 NFC Reader.相关介绍 我们需要下载并安装NFC P ...

随机推荐

  1. Windows Phone下的Socket编程

    讨论下有关于Windows Phone下的Socket编程方面的知识. Socket就是通常所称的套接字,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过Socket向网络发出请求或者应答 ...

  2. .Net免费公开课视频+资料+源码+经典牛逼 汇总篇【持续更新】

    博主推荐一:WP8.1最经典培训教程 博主点评:经典Windows Phone8.1 Runtime API培训最经典教程,此教程由传智播客蒋坤老师录制的一整套WP8.1入门级视频教程,讲授内容非常广 ...

  3. java集合——题4,6

    4.(List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.add(“Hel ...

  4. 每天一个linux命令(5):rm 命令

    昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...

  5. Maven系列--"maven-compiler-plugin"的使用

    maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配的问题,以 ...

  6. Cocos2d-JS V3.10 一个小bug提示

    感谢读者古事东流反馈,新版V3.10的音乐播放接口存在一个bug. 重复播放一个音乐,会出现音乐停止的状况. debug了一下,发现src的对比有点问题.传入的url是相对路径,但背景bgMusic. ...

  7. Android composite adb interface

    我的平板连上电脑后,在eclipse的DDMS中查看不到.很奇怪以前不会,我以为在进程中有其他的adb.exe冲突.查看任务管理器没有看到其他adb.exe进程.然后重启eclipse也不用,重启电脑 ...

  8. Mysql:Error Code 1235,This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决

    This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决 这次国庆节回来后的测试中,在一个Mysql表达式 ...

  9. Win7任务栏图标大小调整为等宽

    打开注册表,找到HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics,新建DWORD,输入MinWidth,大图标设为56,小图标设定为36: 参 ...

  10. Entity Framework Core 实现读写分离

    在之前的版本中我们可用构造函数实现,其实现在的版本也一样,之前来构造连接字符串,现在相似,构造DbContextOptions<T> 代码如下: public SContext(Maste ...