iOS NFC开发(OC、swift双语实现)

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文件中的必要配置。


1.png

第二步

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


2.png

第三步

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


3.png

第四步

在项目中引入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

}

推荐阅读更多精彩内容