CoreNFC讲解

NFC原理

NFC(Near Field Communication)即近距离无线通讯技术。该技术由飞利浦公司和索尼公司共同开发,可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。

CoreNFC讲解_第1张图片
NFC通信过程


NFC通信技术,允许电子设备之间进行非接触式点对点数据传输(在十厘米内)交换数据。这个技术由免接触式射频识别(RFID)演变而来,并向下兼容RFID,主要用于手机等手持设备中提供M2M(Machine to Machine)的通信。由于近场通讯具有天然的安全性,因此,NFC技术被认为在手机支付等领域具有很大的应用前景。

什么是CoreNFC

CoreNFC是苹果推出的支持NFC通讯的框架,仅支持装有iOS 11的iPhone 7和iPhone 7Plus,Xcode 9 beta版。CoreNFC读取的是NDEF标签的数据。

怎么使用?首先,在你的开发者账号里面添加上对NFC的支持:

CoreNFC讲解_第2张图片
APPID中设置

其次,在你的XCode中添加TARGETS->Capabilities中打开Near Field Communication Tag Reading选项,XCode会自动帮你添加其他步骤

CoreNFC讲解_第3张图片
XCode中设置

然后就是写代码啦

首先导入框架:

#import

然后声明一个NFCNDEFReaderSession对象:

@property (strong, nonatomic) NFCNDEFReaderSession *session;

NFCNDEFReaderSession对象初始化如下:

[self.session invalidateSession];

self.session = [[NFCNDEFReaderSession alloc] initWithDelegate:self

queue:nil

invalidateAfterFirstRead:NO];

if (NFCNDEFReaderSession.readingAvailable) {

self.session.alertMessage = @"把TAG放到手机背面";

[self.session beginSession];

} else {

[self showAlertMsg:@"此设备不支持NFC" title:@""];

}

然后实现NFCNDEFReaderSessionDelegate, NFCReaderSessionDelegate这两个代理方法即可:

#pragma mark - NFCNDEFReaderSessionDelegate

- (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error{    // 读取失败   

 NSLog(@"%@",error);   

 if (error.code == 201) {        NSLog(@"扫描超时");       

 [self showAlertMsg:error.userInfo[NSLocalizedDescriptionKey] title:@"扫描超时"];   

 }       

 if (error.code == 200) {        

NSLog(@"取消扫描");      

  [self showAlertMsg:error.userInfo[NSLocalizedDescriptionKey] title:@"取消扫描"];    

}

}

- (void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray*)messages

{

// 读取成功

for (NFCNDEFMessage *msg in messages) {

NSArray *ary = msg.records;

for (NFCNDEFPayload *rec in ary) {

NFCTypeNameFormat typeName = rec.typeNameFormat;

NSData *payload = rec.payload;

NSData *type = rec.type;

NSData *identifier = rec.identifier;

NSLog(@"TypeName : %d",typeName);

NSLog(@"Payload : %@",payload);

NSLog(@"Type : %@",type);

NSLog(@"Identifier : %@",identifier);

}

}

[self.dataAry addObject:messages];

[self.tableView reloadData];

}

其中- (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error函数是为了报告扫描时发生的错误,- (void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray*)messages是读出结果时调用的函数,来进行数据的操作。

你可能感兴趣的:(CoreNFC讲解)