说起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. 使用Js脚本 修改控制IE的注册表相关设置(activex等)

    使用Js脚本 修改控制IE的注册表相关设置(activex等) 分类: PHP2012-12-05 18:51 2035人阅读 评论(2) 收藏 举报 脚本写法: <SCRIPT LANGUAG ...

  2. 微软BI 之SSIS 系列 - ETL 转换时关于 Code Page (1252 and 936) 转换错误的原因和解决方法

    开篇介绍 最近经常碰到在 ETL 练习中出现这种转换失败的问题,试了多种方式,同样的代码同样的源结构和表结构但是一直不能成功执行,包报错.一般有这么几种错误: Error at DST_LOAD_DA ...

  3. [WinAPI] API 3 [获取系统目录,并保存在文件里]

    /* 获取系统目录,并保存在文件里 [peoject->set->link->project chose->subsystem:console] */ #include< ...

  4. [JS2] JS是弱类型

    <html> <head> <title>JavaScript 是弱类型的</title> <Script Language="Java ...

  5. Ajax初步理解

    最近在项目中经常会使用Ajax技术,用法上倒是熟练了,但是只知其然,不知其所以然,抽时间读了读JavaScript高级程序设计中关于Ajax的介绍有了些初步的理解,在此总结一下. 什么是Ajax Aj ...

  6. paip.proxool连接池 :Attempt to refer to a unregistered pool by its alias 'xx'

    paip.proxool连接池 :Attempt to refer to a unregistered pool by its alias 'xx' 作者Attilax  艾龙,  EMAIL:146 ...

  7. IOS—静态方法(类方法)和实例方法

    1.实例方法/动态方法 a).标识符:- b).调用方式:(实例对象    函数) c).实例方法在堆栈上. 2.静态方法/类方法 a).标识符:+ b).调用方式:(类    函数) c).静态方法 ...

  8. java方法创建

    一个方法public(作用域) void(void是不要返回值,String返回String类型,User(自定义的类型)返回User类型) test(方法名) (int a(参数)){ } stat ...

  9. c#中的事件

    之前的博客讲到委托,委托本质上是将方法作为方法的参数传给方法.实际开发中,实现某个功能的的代码通常会封装成一个类,本例中字符串处理封装成MyStringProc类, 代码如下: namespace D ...

  10. INNO安装卸载自动结束进程插件使用

    [Code] //安装前判断是否有进程正在运行,istask.dll文件与打包的exe文件一起function RunTask(FileName: string; bFullpath: Boolean ...