iOS11新特性开发初探之 - Core NFC

北京时间2017.6.6日凌晨1点,新一届的WWDC召开,苹果在大会上发布了iOS11的beta版,虽然正式版还有一段时间才会推送,不过其中有项功能引起我的注意,即苹果官方开放了NFC的部分开发接口。虽然从iphone6开始苹果手机就已经有NFC硬件了,但是开发接口一直没有开放,苹果官方的Apple Pay应用则使用了NFC功能。现在看来苹果在iOS11将NFC接口对开发者开放了,虽然从文档开来目前只开放了NFC读数据而没有开放NFC写数据的接口,但是这也算是一个好的开始了。

苹果将这个库称为Core NFC:苹果官方文档地址


Core NFC

用于检测NFC(近场通讯) 标签和读取包含NDEF数据的信息。

SDK要求iOS 11.0+


概述

你的app可以通过NFC读取标签,从而给予用户提供更多有关其物理环境和真实世界的对象内容信息。比如:你的app可能可以给用户提供商店里的商品信息或者是他们在博物馆参观时的陈列品的信息。

注意

目前只有iPhone 7 and iPhone 7 Plus支持读取NFC NDEF标签

使用Core NFC,你可以读取到包含NDEF (NFC数据交换格式)格式数据的1到5类型的NFC 标签。你的app可以通过创建一个NFC NDEF reader session对象同时提供一个delegate代理来读取标签。当一个正在运行的reader session对象发现了一个包含NDEF信息的标签后,就会将这个信息传递给它的delegate代理。这个delegate代理除了能读取消息还能处理session变为无效的情况。

要使你的app能检测NFC标签,请查阅Certificates, Identifiers, and Profiles



Core NFC

Core NFC包含以下内容


Reader Sessions

Class  NFCNDEFReaderSession

用于检测NFC NDEF标签的reader session类

类详细介绍链接


Protocol  NFCNDEFReaderSessionDelegate

此delegate为包含了关于reader session的状态消息和发现标签时有关NDEF消息回调方法的集合

协议详细介绍链接


Protocol  NFCReaderSessionProtocol

定义了与reader session交互的通用接口

协议详细介绍链接


Protocol  NFCReaderSessionDelegate

此delegate为包含了提供关于NFC reader状态的消息 回调方法的集合

协议详细介绍链接


Class  NFCReaderSession

用于描述一个用来检测NFC标签的reader session的抽象类

类详细介绍链接


NFC Tags

Protocol  NFCTags

定义了NFC或RFID(Radio Frequency Identification,射频识别)标签的属性

协议详细介绍链接


Class  NFCTagCommandConfiguration

此类提供了一组的参数可以让你用来配置NFC标签命令

类详细介绍链接




NDEF Messages

Class  NFCNDEFMessage

NFC NDEF消息类,由一组payload记录组成

类详细介绍链接


Class  NFCNDEFPayload

此类表示在NFC NDEF消息里的一个payload记录

类详细介绍链接


Enum  NFCTypeNameFormat

NFC类型名称格式枚举,它是NFC NDEF消息payload的一部分

枚举详细介绍链接




Error 

struct  NFCReaderError

结构体详细介绍链接





小结

从文档看来只有最纯粹的读没有写,即全傻瓜式的检测。

总结来说使用方法就是创建一个NFCNDEFReaderSession对象,然后让你的比如说控制器VC成为他的delgate代理,实现代理方法之后就等待系统检测到了nfc消息回调

最重要的一个代理回调方法就是检测到NDEF消息:func readerSession(NFCNDEFReaderSession, didDetectNDEFs: [NFCNDEFMessage])

消息内容NDEFs:[NFCNDEFMessage] 是个NFCNDEFMessage对象的数组

NFCNDEFMessage类只有一个属性records : [NFCNDEFPayload],records又是存放NFCNDEFPayload对象的数组

也就是真正存放数据的就是NFCNDEFPayload对象

NFCNDEFPayload对象有四个属性var identifier: Data,var payload: Data,var type: Data,var typeNameFormat: NFCTypeNameFormat

可以看到payload就是真正的数据内容,类型是二进制Data格式,所以具体读出来是什么样的数据只有测试过才知道


示例代码



由于当前我还没有iphone7或者iphone7s,所以无法真实的使用CoreNFC,等迟些使用之后再来做更多的使用方法和经验分享。




猜你喜欢

转载自blog.csdn.net/qq_26918391/article/details/78053937
NFC