NFC

一、NFC现状

2017年,WWDC正式发布了iOS11,在SDK中首次开放了NFC功能,开发者可通过Core NFC FrameWork 使用NFC功能。不过不要高兴太早,此次发布的版本支持的功能非常保守,只支持 NFC Tag Reading 功能。

  • 支持机型

IOS11 开放了读取EDEF标准格式的NFC,只限制iPhone 7 以上的机型,iPhone 7 及后续发布机型(虽然iPhone 6开始已经有NFC硬件,但是Apple 出于某些原因,6,6plus不开发此功能)

  • 支持方式

iOS 11 需要安装APP才能使用(安卓系统已经内建了支持),APP使用NFC时需要主动打开一个session才能进行读取tag,并且APP必须在前台(foreground)状态下,一旦APP进入background或退出,session将自动终止(安卓则可以在后台一直进行轮询)。

二、NFC基本概念与相关术语

全称 Near Field Communication (近场通讯),这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于10厘米距离内。

  • NFC Tag

它是廉价的、被动式的RFID(射频识别)Tag,粘贴或内嵌如产品,包裹,促销品及许多其他实物,甚至像电影里一样嵌入皮肤。

  • RFID Tag

它由耦合元件及芯片组成,每个RFID标签具有唯一的电子编码,附着在物体上标识目标对象,俗称电子标签或智能标签。RFID电子标签:有源标签,无源标签,半有源半无源标签。普通用的地铁卡就是无源标签。

  • EPC编码

EPC(Electronic Product Code)即电子产品编码,是一种编码系统。它建立在EAN.UCC(即全球统一标识系统)条型编码的基础之上,并对该条形编码系统做了一些扩充,用以实现对单品进行标志。

它是下一代产品标识代码,它可以对供应链中的对象(包括物品、货箱、货盘、位置等)进行全球唯一的标识。EPC 存储在RFID标签上,这个标签包含一块硅芯片和一根天线。读取 EPC标签时,它可以与一些动态数据连接,例如该贸易项目的原产地或生产日期等。EPC所标识产品的信息保存在EPCglobal网络中,而EPC则是获取有关这些信息的一把钥匙。

三、NFC工作模式
  • Reader/Writer mode(读写器模式)iOS只支持reader模式

此模式可以读取NFC Tag,也可写入Tag数据。(可以想象手机给地铁卡充值,它能读取卡内信息,也能写入数据),苹果给出的使用的场景1.连接用户到位置或上下文相关的内容2.连接硬件设备3.仓库库存追踪。

  • Peer-to-Peer mode (点对点模式) iOS 不支持

将两个具备NFC功能的设备链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址薄。

  • Card-emulation mode (卡模拟模式)iOS不支持

可以将具备NFC功能的设备当做只能卡或者IC卡,比如地铁卡,信用卡,门禁卡

  • NFC是怎么检测到Tag

在NFC Tag(它是一种廉价、被动式的RFID tag, 就是一个集成电路)中有天线与电路。当拿具备NFC功能的手机或其他读取器靠近时,手机或读取器发射高频电磁波(射频信号),引发Tag内的电路产生感应电流(卡内没有电源,全靠读取器发射的电磁波产生电流驱动),Tag利用产生的电流发射出Tag内存储是数据

五、开发实践
  • 注意事项
a)tag reading是按需的,你需要自己启动一个tag reading操作
b)tag reading session需要在foreground时启动
c)应用进入后台或退出,session将终止
d)每个session最多持续60秒,超时将终止
e)可配置session读取一个tag或多个tag,当设置读取一个tag时,读完后session自动终止,若读取多个tag,则会持续直到用户取消或超过60秒
f)session终止后,若要再读取,需要创建一个新的session并开启
g)info.plist中设置的描述将在读取时显示给用户
  • 开发配置
a)需要在Xcode打开Near Field Communication Tag Reading Capability(刚发布的xcode中不含此选项,请自行添加)
b)info.plist设置隐私选项Scan UsageDescription
  • 代码实现

第一步:需要配置Capabilitles。使用NFC需要配置Capabilitles,这会自动为你生成entitlements文件中的必要配置。

NFC_第1张图片
2460271-75867da82519ce45.png

第二步:打开隐私相关设置。向info.plist中添加Privacy - NFC Scan Usage Description

NFC_第2张图片
2460271-2a07604c5766272a.png

第三步:第三步激活App ID的相关功能。如下图所示

NFC_第3张图片
2460271-e09a7c8588c1cd54.png

第四步:在项目中引入Core NFC。引入Core NFC和相关代理delegate.

import CoreNFC

class ViewController: UIViewController,NFCNDEFReaderSessionDelegate 

第五步:在viewDidLoad中开启Session

import UIKit
import CoreNFC

class ViewController: UIViewController,NFCNDEFReaderSessionDelegate {
    
    @available(iOS 11.0, *)
    func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
        
    }
    
    @available(iOS 11.0, *)
    func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
        
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        if #available(iOS 11.0, *) {
            let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
            session.begin()
        } else {
          // Fallback on earlier versions
        }
  }
六、iPhone NFC与Android NFC

android 一直有这个NFC功能,而且还支持各种自定义格式的NFC,IOS只支持标准的NFC换句话来说,IOS扫不出公交卡,以及以前自定义格式的NFC,这个局限性很大。Android 还可以写入,IOS根本没有开放这个功能,系统也不提供像Android那样,系统直接给你开发NFC功能,(这里指的是,Android有NFC打开按钮就可以识别NFC),Apple pay 也是得打开NFC出现图标,才能使用根本不会像Android那样,所以说NFC开发是很局限的。

你可能感兴趣的:(NFC)