Core NFC在iOS 11中引入,用于处理NFC阅读Tag。由于目前只开放了读的权限,所以Core NFC是非常轻量级的一个框架。
NFC最低支持硬件iPhone 7或者iPhone 7 Plus,最低支持系统为iOS 11.
下面我来跟大家分享一下NFC的使用步骤。使用NFC前需要注意以下几点:
1、需要开启一个session,与其他session类似,同时只能开启一个。
2、需要App完全在前台模式。
3、每个session最多扫描60s,超时需再次开启新session。
4、配置读取单个或多个Tag,配置为单个时,会在读取到第一个Tag时自动结束session。
5、隐私描述(后文会写到如何配置)会在扫描页面显示。
第一步
需要配置Capabilitles。使用NFC需要配置Capabilitles,这会自动为你生成entitlements文件中的必要配置。
第二步
打开隐私相关设置。向info.plist中添加Privacy - NFC Scan Usage Description。
第三步
第三步激活App ID的相关功能。如下图所示
第四步
在项目中引入Core NFC。引入Core NFC和相关代理delegate.
OC:
#import <CoreNFC/CoreNFC.h>
@interface ViewController : UIViewController <NFCNDEFReaderSessionDelegate>
swift:
import CoreNFC
class ViewController: UIViewController,NFCNDEFReaderSessionDelegate
第五步
在viewDidLoad中开启Session
OC:
/**
三个参数
第一个参数:代理对象
第二个参数:线程
第三个参数:Session读取一个还是多个NDEF。YES:读取一个结束,NO:读取多个
*/
NFCNDEFReaderSession *session = [[NFCNDEFReaderSession alloc] initWithDelegate:self queue:dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT) invalidateAfterFirstRead:YES];
[session beginSession];
swift:
let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
session?.begin()
第六步
实现委托方法
OC:
/**
具体父子关系看官方文档
*/
- (void) readerSession:(nonnull NFCNDEFReaderSession *)session didDetectNDEFs:(nonnull NSArray<NFCNDEFMessage *> *)messages {
for (NFCNDEFMessage *message in messages) {
for (NFCNDEFPayload *payload in message.records) {
NSLog(@"Payload data:%@",payload.payload);
}
}
}
- (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error{
}
swift:
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
}
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
}
除此之外,最好做个系统版本大于iOS 11的判断
OC:
if (@available(iOS 11.0,*)) {
}
swift:
if #available(iOS 11.0, *) {
//高于 iOS 11.0
} else {
//低于 iOS 11.0
}