使用 NFCNDEFReaderSession。Delegate为:NFCNDEFReaderSessionDelegate
@property(strong,nonatomic)NFCNDEFReaderSession *session;
@property(strong,nonatomic)id
self.session = [[NFCNDEFReaderSession alloc]initWithDelegate:self queue:nil invalidateAfterFirstRead:YES]; //YES为只读一个TAG然后结束,NO为读取多个
self.session.alertMessage = @”读取卡片,请将卡片靠近手机”;
[self.session beginSession]; //开始识别 弹出识别提示框
-(void)readerSession:(NFCNDEFReaderSession *)session didDetectTags:(NSArray<__kindof id
self.cuurentTag = [tags firstObject];
识别到卡片后会回调该方法,在该方法中可获取到tag。
2、读取卡片内容:获取到卡ID均为空,获取卡ID需要下面第二种方法。
2.1 需要先建立连接
[_session connectToTag:self.cuurentTag completionHandler:^(NSError * _Nullable error) { }];
2.2连接成功之后调用方法,可以获取到卡片的内容
[tag readNDEFWithCompletionHandler:^(NFCNDEFMessage *ndefMessage, NSError *error) { }];
3.1 需要先建立连接
[_session connectToTag:self.cuurentTag completionHandler:^(NSError * _Nullable error) { }];
3.2连接成功之后调用方法获取卡片状态:判断是否可以写入
[self.cuurentTag queryNDEFStatusWithCompletionHandler:^(NFCNDEFStatus status, NSUInteger capacity, NSError * _Nullable error) ];
状态 status == NFCNDEFStatusReadWrite 则可以写入。
[self.cuurentTag writeNDEF:myMessage completionHandler:^(NSError * _Nullable error) ];
二、iOS13新支持的类型:NFCPollingISO14443 NFCPollingISO15693 NFCPollingISO15693
使用NFCTagReaderSession。Delegate为:NFCTagReaderSessionDelegate
self.session = [[NFCTagReaderSession alloc]
initWithPollingOption:(NFCPollingISO14443
NFCPollingISO15693
NFCPollingISO15693) delegate:self queue:dispatch_get_main_queue];
self.session.alertMessage = @”读取卡片,请将卡片靠近手机”;
[self.session beginSession]; //开始识别 弹出识别提示框
-(void)tagReaderSession:(NFCTagReaderSession *)session didDetectTags:(NSArray<__kindof id
self.cuurentTag = [tags firstObject];
2、读取id(判断卡类型,以下以其中一种为例),内容获取方法同上
if (self.currentTag.type == NFCTagTypeMiFare) {
id
NSData *data = mifareTag.identifier
3.写入方法同上使用的tag需要为具体类型的tag,如:NFCMiFareTag
[mifareTag writeNDEF:ndefMsg completionHandler:^(NSError * error) { }];