IOS 11 HTML调用 NFC功能(初探)
有读者反映,叫我写点干货,其实我是不建议写干货的,至少你得自己想想,那怕你自己在着急。(也要把思路想清楚)。
NFC 功能,使用话必须要是IOS 11 和xcode的9,xcode9是自带Corenfc框架的, !官网上说的是7 和7plus 才支持,目前没有测试其他的手机。
7plus 经过测试 是可以用的,7 也是可以用的。。
Snip20170913_1.png1.首先在去自己的集团账户里面建立,一个Bundle id! 和自己的工程同步,打开NFC 功能。(跟APP推送在一起那个选项。如果是公司的话,可以直接不管)
2.点击targets ->Capabilties->开发(下图)
发开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的交互就不贴代码了。😆😆