iOS11 Core NFC
iPhone6開始支持NFC(Near Field Communication
),但是最近蘋果最近(才)開放了NFC的部分接口。
可以實(shí)現(xiàn)檢測(cè)NFC標(biāo)簽(NFC tags)并讀取包含NDEF(NFC Data Exchange Format)數(shù)據(jù)隔心。
最起碼能當(dāng)讀卡器玩了吧。
概述
Core NFC
可以讀取NFC tags济炎,提供給用戶有關(guān)其物理環(huán)境和實(shí)體對(duì)象的更多信息辐真。例如须尚,小明在逛商場(chǎng)侍咱,他可以通過應(yīng)用程序的NFC功能獲取到一些相關(guān)的商品信息。
Note
讀取NFC NDEF tag
當(dāng)前只支持iPhone7/7+
使用Core NFC楔脯,您可以讀取符合NFC數(shù)據(jù)交換格式(NDEF)的五種標(biāo)簽(type1到5)。
想要閱讀標(biāo)簽昧廷,需要?jiǎng)?chuàng)建一個(gè)NFCNDEFReaderSession
的實(shí)例并設(shè)置代理堪嫂。session會(huì)對(duì)NFC標(biāo)簽進(jìn)行輪詢木柬,當(dāng)找到NDEF
的消息時(shí),會(huì)通過代理回調(diào)。代理收到消息后會(huì)眉枕,我們將session置為invalid([session invalidateSession]
).
實(shí)現(xiàn)
調(diào)試環(huán)境 Xcode9 beta + iPhone7
需要注意的CoreNFC當(dāng)前沒有X86的版本,需要真機(jī)調(diào)試,否則報(bào)錯(cuò)。速挑。谤牡。 (Xcode9正式版沒有這個(gè)問題)
-
新建AppleId,勾選
NFC Tag Reading
-
新建工程配置好BundleId,與AppleId相匹配翅萤。添加
-
info.plist添加
<key>NFCReaderUsageDescription</key> <string>We are going to use you NFC!</string>
-
.entitlements
文件添加內(nèi)容: (Xcode9正式版,直接勾選target->Capabilities->Near Field Communication Tag Reading即可)<key>com.apple.developer.nfc.readersession.formats</key> <array> <string>NDEF</string> </array>
代碼實(shí)現(xiàn)比較簡(jiǎn)單
#import <CoreNFC/CoreNFC.h>
@interface ViewController ()<NFCNDEFReaderSessionDelegate>
@end
@implementation ViewController
- (IBAction)clicked:(id)sender {
NFCNDEFReaderSession *session = [[NFCNDEFReaderSession alloc] initWithDelegate:self queue:nil invalidateAfterFirstRead:NO];
//NSLog(@" ready ? %@", @([session isReady]));
[session beginSession];
}
#pragma mark - NFCNDEFReaderSessionDelegate
- (void) readerSession:(nonnull NFCNDEFReaderSession *)session didDetectNDEFs:(nonnull NSArray<NFCNDEFMessage *> *)messages {
for (NFCNDEFMessage *message in messages) {
for (NFCNDEFPayload *payload in message.records) {
NSLog(@"Payload data:%@",payload.payload);
//[session invalidateSession];
dispatch_async(dispatch_get_main_queue(), ^{
self.showingLabel.text = [[NSString alloc]initWithData:payload.payload encoding:NSUTF8StringEncoding];
});
}
}
}
- (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error{
NSLog(@"%@",error);
}
-
運(yùn)行
ok,先這樣了套么。 明天用公司的卡片試試流纹。违诗。
// ---更新 6.9
在iPhone7上做測(cè)試,發(fā)現(xiàn)直到超時(shí)都沒有讀取出到數(shù)據(jù),項(xiàng)目配置沒檢查出問題诸迟。
懷疑是否是卡片的原因?
或者等出iOS11正式出了,在進(jìn)行測(cè)試吧
--- 更新 2017-09-21
iOS11正式版出來了,現(xiàn)在能讀取到NFC標(biāo)簽中的數(shù)據(jù)了
參考
https://developer.apple.com/documentation/corenfc
https://stackoverflow.com/questions/44380305/ios-11-core-nfc-any-sample-code