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

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

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

IOS 11 HTML调用 NFC功能(初探)_第1张图片
Snip20170913_1.png

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

IOS 11 HTML调用 NFC功能(初探)_第2张图片
Snip20170913_8.png
IOS 11 HTML调用 NFC功能(初探)_第3张图片
Snip20170913_9.png

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

Snip20170913_10.png
IOS 11 HTML调用 NFC功能(初探)_第4张图片
Snip20170913_11.png

在info.pilst填写


IOS 11 HTML调用 NFC功能(初探)_第5张图片
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

@interface NFCMangage()

@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> *)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 *)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功能(初探))