本篇文章共分为三个部分,读者可根据需要直接阅读对应部分:
1. iOS 对NFC支持的现状
2.NFC基本概念与相关术语
3.iOS NFC 开发实践
下面是正文:
一、iOS 对NFC支持的现状
2017年,WWDC正式发布了iOS11,在SDK中首次开放了NFC功能,开发者可通过Core NFC FrameWork 使用NFC功能。不过不要高兴太早,此次发布的版本支持的功能非常保守,只支持 NFC Tag Reading 功能。
支持机型:
iPhone 7 及后续发布机型(虽然iPhone 6开始已经有NFC硬件,但是Apple 出于某些原因,6,6plus不开发此功能)
支持方式:
iOS 11 需要安装APP才能使用(安卓系统已经内建了支持),APP使用NFC时需要主动打开一个session才能进行读取tag,并且APP必须在前台(foreground)状态下,一旦APP进入background或退出,session将自动终止(安卓则可以在后台一直进行轮询)。
二、NFC基本概念与相关术语
NFC是什么东东?
全称 Near Field Communication (近场通讯),这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于10厘米距离内。
NFC Tag?
NFC tags are cheap, passive RFID tags that are stuck on, or embedded into products, packaging, promotional items and many other physical things。
可以看到它是廉价的、被动式的RFID(射频识别)Tag,粘贴或内嵌如产品,包裹,促销品及许多其他实物,甚至像电影里一样嵌入皮肤。那么问题又来了RFID Tags 是什么?
RFID Tag?
它由耦合元件及芯片组成,每个RFID标签具有唯一的电子编码(全球唯一哦😯),附着在物体上标识目标对象,俗称电子标签或智能标签。RFID电子标签:有源标签,无源标签,半有源半无源标签。普通用的地铁卡就是无源标签。 什么编码这么牛X, 全球唯一?是EPC编码。
EPC编码?
EPC(Electronic Product Code)即电子产品编码,是一种编码系统。它建立在EAN.UCC(即全球统一标识系统)条型编码的基础之上,并对该条形编码系统做了一些扩充,用以实现对单品进行标志。
它是下一代产品标识代码,它可以对供应链中的对象(包括物品、货箱、货盘、位置等)进行全球唯一的标识。EPC 存储在RFID标签上,这个标签包含一块硅芯片和一根天线。读取 EPC标签时,它可以与一些动态数据连接,例如该贸易项目的原产地或生产日期等。EPC所标识产品的信息保存在EPCglobal网络中,而EPC则是获取有关这些信息的一把钥匙。
WWDC解释:
NFC实际上是一组不同的标准和协议。所有的标准共存,并用于不同的目的。
NFC text可归纳为5类,type1~type5.每一个类型对应于一个不同的标准。
NFC Forum定义了NFC Data Exchange Format(NDEF)用来作为不同的NFC text类型数据交换的通用标准方式
使用场景:
上面一堆解释,第一次听绝对是云里雾里的,不过看看它能干什么就有整体印象了。下面描述的是NFC的使用场景(不限于iOS,其中部分功能iOS不支持)
NFC工作模式有三种:
1.Reader/Writer mode(读写器模式)iOS只支持reader模式
此模式可以读取NFC Tag,也可写入Tag数据。(可以想象手机给地铁卡充值,它能读取卡内信息,也能写入数据),苹果给出的使用的场景1.连接用户到位置或上下文相关的内容2.连接硬件设备3.仓库库存追踪。
2.Peer-to-Peer mode (点对点模式) iOS 不支持
将两个具备NFC功能的设备链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址薄。
3.Card-emulation mode (卡模拟模式)iOS不支持
可以将具备NFC功能的设备当做只能卡或者IC卡,比如地铁卡,信用卡,门禁卡。
NFC是怎么检测到Tag的?
在NFC Tag(它是一种廉价、被动式的RFID tag, 就是一个集成电路)中有天线与电路。当拿具备NFC功能的手机或其他读取器靠近时,手机或读取器发射高频电磁波(射频信号),引发Tag内的电路产生感应电流(卡内没有电源,全靠读取器发射的电磁波产生电流驱动),Tag利用产生的电流发射出Tag内存储是数据。
三、iOS NFC 开发实践
过程很简单,不过需要注意一些方面:
1.tag reading是按需的,你需要自己启动一个tag reading操作。
2.tag reading session需要在foreground时启动。
3.应用进入后台或退出,session将终止。
4.每个session最多持续60秒,超时将终止。
5.可配置session读取一个tag或多个tag,当设置读取一个tag时,读完后session自动终止,若读取多个tag,则会持续直到用户取消或超过60秒。
6.session终止后,若要再读取,需要创建一个新的session并开启。
7.info.plist中设置的描述将在读取时显示给用户。
开发配置:
配置项目:2个步骤
1.需要在Xcode打开Near Field Communication Tag Reading Capability(刚发布的xcode中不含此选项,请自行添加)
2.info.plist设置隐私选项Scan UsageDescription
开发: 2个步骤
1.设置一个delegate adopt NFCNDEFReaderSessionDelegate Protocol
2.创建一个NFCNDEFReaderSession,调用begin方法
3.实现代理方法,处理对应回调。
最后附上相关参考资料: