• <listing id="tnsa8"><menu id="tnsa8"></menu></listing>

    1. <listing id="tnsa8"></listing>

        <small id="tnsa8"></small>

        <small id="tnsa8"></small>

          iOS NFC功能开发

          一、NDEF格式的

          使用 NFCNDEFReaderSession。Delegate为:NFCNDEFReaderSessionDelegate

          1、初始化对象

          @property(strong,nonatomic)NFCNDEFReaderSession *session;

          @property(strong,nonatomic)id<NFCNDEFTag> cuurentTag;

          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<NFCNDEFTag>> *)tags API_AVAILABLE(ios(13.0)){

            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、写入NDEF内容

          3.1 需要先建立连接

          [_session connectToTag:self.cuurentTag completionHandler:^(NSError * _Nullable error) { }];

          3.2连接成功之后调用方法获取卡片状态:判断是否可以写入

          [self.cuurentTag queryNDEFStatusWithCompletionHandler:^(NFCNDEFStatus status, NSUInteger capacity, NSError * _Nullable error) {}];

          状态 status == NFCNDEFStatusReadWrite 则可以写入。

          3.3 写入

          [self.cuurentTag writeNDEF:myMessage completionHandler:^(NSError * _Nullable error) {}];

          二、iOS13新支持的类型:NFCPollingISO14443  NFCPollingISO15693  NFCPollingISO15693

          使用NFCTagReaderSession。Delegate为:NFCTagReaderSessionDelegate

          1.初始化对象

          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<NFCTag>> *)tags{

            self.cuurentTag = [tags firstObject];

          }

          2、读取id(判断卡类型,以下以其中一种为例),内容获取方法同上

          if (self.currentTag.type == NFCTagTypeMiFare) {

                  id<NFCMiFareTag> mifareTag = [self.currentTag asNFCMiFareTag];

              NSData *data = mifareTag.identifier

          }

          3.写入方法同上使用的tag需要为具体类型的tag,如:NFCMiFareTag

          [mifareTag writeNDEF:ndefMsg completionHandler:^(NSError * error) { }];

          相关文章
          相关标签/搜索
          每日一句
            每一个你不满意的现在,都有一个你没有努力的曾经。
          公众号推荐
             一个历史类的公众号,欢迎关注
          一两拨千金
          王中王三肖选一肖