iOS技术交流iosOC学习

IOS开发初窥苹果NFC功能

2017-12-28  本文已影响149人  暗夜星星之火

从iPhone的历代机型配置中,可以看出在iPhone6及以上机型都拥有了支持NFC功能的固件,但是一直不开放给开发者使用,直到iOS11才开放仅有的具有读取NDEF格式的功能,并且需要iPhone7或者iPhone7 Plus以上的机型才支持使用。干货来了.........

1、配置开发证书记得选上标记项

2.在TARGETS>Capabilities中打开Near Field Communication

IOS开发初窥苹果NFC功能

3.在TARGETS>Info中配置NFC使用说明

IOS开发初窥苹果NFC功能

4.代码逻辑

导入#import <CoreNFC/CoreNFC.h>

#import "ViewController.h"

#import <SVProgressHUD.h>

#import <CoreNFC/CoreNFC.h>

@interface ViewController ()<NFCNDEFReaderSessionDelegate>

@property (nonatomic, strong) NFCNDEFReaderSession *session;

@property (weak, nonatomic) IBOutlet UILabel *myLabel;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    UIButton *queryBtn = [UIButton buttonWithType:UIButtonTypeCustom];

    queryBtn.frame = CGRectMake(50, 50, 100, 40);

    queryBtn.backgroundColor = [UIColor redColor];

    [queryBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [queryBtn setTitle:@"开始查询" forState:UIControlStateNormal];

    [queryBtn addTarget:self action:@selector(ClickQuery) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:queryBtn];

   

    UIButton *endQueryBtn = [UIButton buttonWithType:UIButtonTypeCustom];

    endQueryBtn.frame = CGRectMake(200, 50, 100, 40);

    endQueryBtn.backgroundColor = [UIColor redColor];

    [endQueryBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [endQueryBtn setTitle:@"结束查询" forState:UIControlStateNormal];

    [endQueryBtn addTarget:self action:@selector(ClickEndQuery) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:endQueryBtn];

   

}

#pragma mark -- 开始查询

-(void)ClickQuery{

 

    //如果希望读取多个标签invalidateAfterFirstRead设置为NO

    self.session = [[NFCNDEFReaderSession alloc] initWithDelegate:self queue:dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT) invalidateAfterFirstRead:YES];

    NSLog(@"%@",[NSThread currentThread]);

    [self.session beginSession];

   

}

#pragma mark -- 结束查询

-(void)ClickEndQuery{

    [SVProgressHUD setBackgroundColor:[UIColor blackColor]];

    [SVProgressHUD setForegroundColor:[UIColor whiteColor]];

    [SVProgressHUD showWithStatus:@"结束查询"];

    [SVProgressHUD dismissWithDelay:1.0];

   

    [self.session invalidateSession];

}

#pragma mark -- <NFCNDEFReaderSessionDelegate>

//扫描到的回调

-(void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages{

   

    for (NFCNDEFMessage *message in messages) {

        for (NFCNDEFPayload *payload in message.records) {

           

            NSLog(@"Payload data=%@",payload.payload);

           

            NSString *str = [[NSString alloc] initWithData:payload.payload encoding:NSUTF8StringEncoding];

           

            //回到主线程

            [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                [self.myLabel setText:str];

            }];

           

        }

    }

}

//错误回调

-(void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error{

    NSLog(@"error = %@", error);

 

}

@end

5.下面是操作效果图!老铁记得准备标签啊

IOS开发初窥苹果NFC功能 IOS开发初窥苹果NFC功能 IOS开发初窥苹果NFC功能
上一篇下一篇

猜你喜欢

热点阅读