WWDC上苹果对NFC技术介绍
Apple在iPhone6的时候就已经有NFC硬件了,已支持Apple Pay支付系统,只是接口没有开放。在2017年的WWDC,苹果在iOS11系统上对开发者开放了NFC接口框架Core NFC,但是只有只读模式。
Apple的Core NFC可以用于检测NFC标签和读取包含NDEF(NFC Data Exchange Format)数据1到5类型的标签信息,且该功能只支持iPhone 7和iPhone 7 plus及以上的机型。Core NFC其实同时有NFC和RFID(非接触射频识别)的API存在,但是RFID可能没有很高的安全性,所以苹果并没有推广使用(或者可能还在开发中)。

NFC Data Exchange Format : NFC数据交换格式,NFC组织约定的NFC tag中的数据格式。NDEF是轻量级的紧凑的二进制格式,可带有URL、vCard和NFC定义的各种数据类型。NDEF的由各种数据记录组成,而各个记录由报头(Header)和有效载荷(Payload)组成,其中NDEF记录的数据类型和大小由记录载荷的报头注明,这里的报头包含3部分,分别为Length、Type和Identifier。
NFC标签分为5个类型
-
Type-1:此类型基于ISO14443A标准。此类标签具有可读、重新写入的能力,用户可将其配置为只读。存储能力为96字节,用来存网址URL或其他小量数据绰绰有余。然而,内存可被扩充到2k字节。此类NFC标签的通信速度为106 kbit/s。此类标签简洁,故成本效益较好,适用于许多NFC应用。
-
Type-2:此类标签也是基于ISO14443A,具有可读、重新写入的能力,用户可将其配置为只读。其基本内存大小为48字节,但可被扩充到2k字节。通信速度也是106 kbit/s。
-
Type-3:此类标签基于Sony FeliCa体系。目前具有2k字节内存容量,数据通讯速度为212 kbit/s。故此类标签较为适合较复杂的应用,尽管成本较高。
-
Type-4:此类标签被定义为与ISO14443A、B标准兼容。制造时被预先设定为可读/可重写、或者只读。内存容量可达32k字节,通信速度介于106 kbit/s和424 kbit/s之间。
-
Type-5:标签(NFC- v)它依赖于ISO/IEC 15693标准,包含多达8千字节的内存,支持26.48千比特/秒的数据速率和防撞机制。
NFC的射频技术支持NFC-A、NFC-B、NFC-F、NFC-V。
iOS11系统中Core NFC框架特性
-
目前支持NFC Tags(标签)的读取
-
不支持输出和格式设置
-
仅支持iphone 7 & iphone 7plus,且iOS11系统
iOS13系统中Core NFC新增特性
自从苹果出了XS以后又开放了Adding Support for Background Tag Reading(背景标签读取),但是也仅仅支持以下几种格式。

iOS13系统开放了标签写入功能,同样,也只能写入NDEF格式的数据。
总结:
苹果只开放NDEF数据格式的NFC标签读取和写入,如果数据格式不满足则无法读取,身份证、地铁卡、银行卡、工卡等大部分卡都不是NDEF格式,因此无法读取。
身份证、地铁卡虽然无法读取到数据,但是可以用苹果官方APP“快捷指令”进行标记,来实现一些新颖玩法(需要iPhoneXS以上机型)。
关于后台读取,iPhoneXS以上机型支持,屏幕点亮状态下(无需解锁),手机可以读取一些特定数据格式的NFC标签。识别到标签后,可以实现拨打电话,发送邮件等功能(需解锁)
Core NFC框架的使用
- 配置Capabilities,这会自动为你生成entitlements文件中的必要配置。同时为你的App ID激活相关功能。

iOS 13之后的配置发生了更改。(如果你的APP是从低版本升级上来的需要添加新字段,否则上架AppStore会校验失败。)
- 需要打开隐私相关设置,向info.plist中添加Privacy - NFC Scan Usage Description。

- 开启一个session,与其他session类似,同时只能开启一个。当扫描到NFC标签时,会进入相应的回调函数。
使用细节说明
-
设备读取标签是一个被动的过程,所以需要程序主动发起一个会话即为session去读取标签。与处理摄像头相关功能类似,所有的操作都必须建立在session基础之上。
-
读取标签被限制的60秒之内。意思就是60秒内标签必须识别完成,否则session会自动终止。如果会话过期或者未经过验证,则你的程序需要重新去建立新的会话。
-
Core NFC可以设置会话读取一个标签或者多个标签。在读取单个标签的时候,读取完成后,会话自动终止。如果读取多个标签,会话会一直持续直到程序主动终止会话或者60秒后。60秒是一个最大的节点。
网友评论