美文网首页
IOS 11 HTML调用 NFC功能(初探)

IOS 11 HTML调用 NFC功能(初探)

作者: HotRay | 来源:发表于2017-09-13 11:11 被阅读0次

    有读者反映,叫我写点干货,其实我是不建议写干货的,至少你得自己想想,那怕你自己在着急。(也要把思路想清楚)。
    NFC 功能,使用话必须要是IOS 11 和xcode的9,xcode9是自带Corenfc框架的, !官网上说的是7 和7plus 才支持,目前没有测试其他的手机。

    7plus 经过测试 是可以用的,7 也是可以用的。。

    Snip20170913_1.png

    1.首先在去自己的集团账户里面建立,一个Bundle id! 和自己的工程同步,打开NFC 功能。(跟APP推送在一起那个选项。如果是公司的话,可以直接不管)
    2.点击targets ->Capabilties->开发(下图)

    Snip20170913_8.png Snip20170913_9.png

    发开app Groups 会出现一个这个,这个是设置 读取模式的。在这个plist 里面填写一个数组为Near Field Communication Tag Reader Session Formats,然后加一个item

    Snip20170913_10.png Snip20170913_11.png

    在info.pilst填写


    Snip20170913_12.png

    上面报错,是因为我没真机,可以忽略。
    下面我自己写了一个Dome, 是本地HTML 加载 ,通过HTML 与IOS交互,整块都是在一个webview上实现的, 效果 APP读取一个网址,HTML调用IOS NFC,然后读取nfc链接跳转循环。
    这个我把NFC的功能封装到一个NFCMangage 里面,只管调用就好了。我也尝试写了一个swfit版本的! 也能够使用!
    NFCMangage.h文件
    @interface NFCMangage : NSObject
    @property (nonatomic,copy) void(^blcokNFC)(NSString *);

    • (void)NFCReadText;
      @property (nonatomic,copy) NSString *packNFC;
      @end
      NFCMangage.m文件
      导入nfc框架,开始使用。

    import <CoreNFC/CoreNFC.h>

    @interface NFCMangage()<NFCNDEFReaderSessionDelegate, NFCReaderSessionDelegate>

    @property (strong, nonatomic) NFCNDEFReaderSession *session;
    @property (strong, nonatomic) NSMutableArray *dataAry;
    @end
    @implementation NFCMangage

    • ( void)NFCReadText{
      [self.session invalidateSession];

      self.session = [[NFCNDEFReaderSession alloc] initWithDelegate:self
      queue:nil
      invalidateAfterFirstRead:NO];
      //判断是否支持NFC
      [self.session beginSession];

    }

    pragma mark - NFCReaderSessionDelegate

    • (void)readerSessionDidBecomeActive:(NFCReaderSession *)session
      {
      NSLog(@"NFC会话已激活");
      if (session.isReady) {
      NSLog(@"NFC已准备好");
      } else {
      }
      }

    • (void)readerSession:(NFCReaderSession *)session
      didDetectTags:(NSArray<__kindof id<NFCTag>> *)tags
      {
      NSLog(@"扫描到TAG数据");
      }

    pragma mark - NFCNDEFReaderSessionDelegate

    • (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error
      {
      // 读取失败
      NSLog(@"error=%@",error);
      if (error.code == 201) {
      NSLog(@"扫描超时");

      }

      if (error.code == 200) {
      NSLog(@"取消扫描");

      }
      if (error.code == 204) {
      NSLog(@"204错误");
      }
      }

    • (void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages
      {
      // 读取成功
      NSString *stringNFC;
      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);
            stringNFC = [[NSString alloc] initWithData:payload encoding:NSUTF8StringEncoding];
            
            
        }
      

      }
      self.packNFC = stringNFC;

    }
    manage.m文件全部代码,就这么点,就可以使用了。是不是很简单。
    HTML的与OC的交互就不贴代码了。😆😆

    相关文章

      网友评论

          本文标题:IOS 11 HTML调用 NFC功能(初探)

          本文链接:https://www.haomeiwen.com/subject/zbthsxtx.html