iOS11 Core NFC


About Core NFC

Core NFC支持的讀取數(shù)據(jù)類型:
image.png
Core NFC框架特性/要求
  • 目前支持NFC Tags(標(biāo)簽)的讀取
  • 不支持輸出和格式設(shè)置
  • 僅支持iphone 7 & iphone 7plus,且iOS11系統(tǒng)

項(xiàng)目加入Core NFC框架使用的要求

  • (必須)支持iOS11,且只有iOS11和iphone7/plus機(jī)型才可以
  • (必須)像Apple pay或者Push Notification一樣,需要添加一個(gè)entitlement
  • (保修)在plist文件中添加Privacy - NFC Scan Usage Description。這里使用的描述信息會(huì)顯示在讀取界面中
image.png
image.png
集成Core NFC中的一些細(xì)節(jié)說明
  • 設(shè)備讀取標(biāo)簽是一個(gè)被動(dòng)的過程,所以需要程序主動(dòng)發(fā)起一個(gè)會(huì)話即為session去讀取標(biāo)簽。與處理攝像頭相關(guān)功能類似,所有的操作都必須建立在session基礎(chǔ)之上
  • 程序必須始終保持前臺(tái)運(yùn)行并且識(shí)別界面可視。如果至于后臺(tái)session會(huì)自動(dòng)終止,讀取失敗。
    • Tips:這里我做過一個(gè)測(cè)試,實(shí)際上當(dāng)Core NCF讀取標(biāo)簽界面出現(xiàn)后,無法下拉通知欄中心,也無法上滑出現(xiàn)控制中心,如果識(shí)別過程中,點(diǎn)擊home第一次會(huì)取消識(shí)別,不會(huì)直接進(jìn)入主屏幕。這樣的設(shè)計(jì)應(yīng)該是為了防止在識(shí)別過程中出現(xiàn)誤操作等情況的發(fā)生
  • 讀取標(biāo)簽被限制的60秒之內(nèi)。意思就是60秒內(nèi)標(biāo)簽必須識(shí)別完成,否則session會(huì)自動(dòng)終止。如果會(huì)話過期或者未經(jīng)過驗(yàn)證,則你的程序需要重新去建立新的會(huì)話
  • Core NFC可以設(shè)置會(huì)話讀取一個(gè)標(biāo)簽或者多個(gè)標(biāo)簽。在讀取單個(gè)標(biāo)簽的時(shí)候,讀取完成后,會(huì)話自動(dòng)終止。如果讀取多個(gè)標(biāo)簽,會(huì)話會(huì)一直持續(xù)直到程序主動(dòng)終止會(huì)話或者60秒后。60秒是一個(gè)最大的節(jié)點(diǎn)

示例代碼

代碼很簡(jiǎn)單!!!其實(shí)Core NFC目前放出的權(quán)限很少,只支持特定格式的NFC數(shù)據(jù)讀取,不支持輸出和格式設(shè)置,所以代碼上很簡(jiǎn)單,可以說是傻瓜式的調(diào)用處理即可。我猜想可能是因?yàn)锳pple為了保證Apple Pay的安全性,畢竟Apple Pay也是采用NFC完成支付。
使用Core NFC
  • @import CoreNFC 導(dǎo)入框架,這點(diǎn)沒啥可說的
  • 遵循 NFCNDEFReaderSessionDelegate 協(xié)議
  • 創(chuàng)建 NFCNDEFReaderSession 實(shí)例
  • 開啟 NFCNDEFReaderSession 以及處理協(xié)議回調(diào)方法
具體代碼如下如下
// @import CoreNFC 導(dǎo)入框架
// 遵循 NFCNDEFReaderSessionDelegate 協(xié)議
#import "ViewController.h"
#include <sys/types.h>
#include <sys/sysctl.h>

@import CoreNFC;
@interface ViewController ()<NFCNDEFReaderSessionDelegate>
@end
@implementation ViewController

// 創(chuàng)建 NFCNDEFReaderSession 實(shí)例,開啟NFCNDEFReaderSession
// Tips:開啟 
// 條件:iphone7/7plus運(yùn)行iOS11
if ([ViewController isiPhone7oriPhone7Plus] && [UIDevice currentDevice].systemVersion.floatValue >= 11.0) {
    // ReadingAvailable is YES if device supports NFC tag reading.
    if ([NFCNDEFReaderSession readingAvailable]) {
        // beginScanning
        // invalidateAfterFirstRead 屬性表示是否需要識(shí)別多個(gè)NFC標(biāo)簽,如果是YES,則會(huì)話會(huì)在第一次識(shí)別成功后終止。否則會(huì)話會(huì)持續(xù)
        // 不過有一種例外情況,就是如果響應(yīng)了-readerSession:didInvalidateWithError:方法,則是否為YES,會(huì)話都會(huì)被終止
        NFCNDEFReaderSession *session = [[NFCNDEFReaderSession alloc] initWithDelegate:self queue:nil invalidateAfterFirstRead:YES];
        
        [session beginSession];
    }
}

// 處理協(xié)議回調(diào)方法
#pragma mark - NFCReaderSessionDelegate
// Check invalidation reason from the returned error. A new session instance is required to read new tags.
// 識(shí)別出現(xiàn)Error后會(huì)話會(huì)自動(dòng)終止,此時(shí)就需要程序重新開啟會(huì)話
- (void)readerSession:(NFCNDEFReaderSession *)session didInvalidateWithError:(NSError *)error {
    // error明細(xì)參考NFCError.h
    NSLog(@"%@",error);
}

// Process detected NFCNDEFMessage objects
- (void)readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages {
    // 數(shù)組messages中是NFCNDEFMessage對(duì)象
    // NFCNDEFMessage對(duì)象中有一個(gè)records數(shù)組,這個(gè)數(shù)組中是NFCNDEFPayload對(duì)象
    // 參考NFCNDEFMessage、NFCNDEFPayload類
    // 解析數(shù)據(jù)
    for (NFCNDEFMessage *message in messages) {
        for (NFCNDEFPayload *playLoad in message.records) {
            NSLog(@"typeNameFormat : %d", playLoad.typeNameFormat);
            NSLog(@"type : %@", playLoad.type);
            NSLog(@"identifier : %@", playLoad.identifier);
            NSLog(@"playload : %@", playLoad.payload);
        }
    }
}

// 主動(dòng)終止會(huì)話,調(diào)用如下方法即可。
[session invalidateSession];
運(yùn)行效果圖
image.png
image.png
由于身邊的NFC卡片都未識(shí)別成功,所以圖二識(shí)別完成后的截圖為WWDC視頻中的截圖。
通過測(cè)試,目前用iphone7plus+iOS11測(cè)試讀取上海交通卡、公司門禁卡,都沒有讀取成功,代碼邏輯應(yīng)該沒有問題。可能是這些NFC芯片數(shù)據(jù)格式問題?不太確定是什么原因。不過貌似網(wǎng)上有人說是iOS11的問題,可以等iOS11正式版發(fā)布后再試試看,我也會(huì)持續(xù)關(guān)注。如果大家有相關(guān)的答案也可以告知我。謝謝。

資料

https://github.com/EchoZuo/iOSCoreNFC
https://developer.apple.com/documentation/corenfc#overview
https://developer.apple.com/videos/play/wwdc2017/718/
https://stackoverflow.com/questions/44380305/ios-11-core-nfc-any-sample-code


Info

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,714評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,410評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,776評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,210評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,654評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373

推薦閱讀更多精彩內(nèi)容

  • iOS11 Core NFC iPhone6開始支持NFC(Near Field Communication )...
    繚霧閱讀 1,917評(píng)論 13 3
  • 原文鏈接: http://fighting300.com... 大家可能聽過NFC這項(xiàng)功能,或者有可能你每天都在使...
    fighting300閱讀 4,576評(píng)論 10 8
  • 本篇文章共分為三個(gè)部分,讀者可根據(jù)需要直接閱讀對(duì)應(yīng)部分: 1. iOS 對(duì)NFC支持的現(xiàn)狀 2.NFC基本概念與相...
    Cstars閱讀 11,500評(píng)論 3 9
  • 我站在秋的細(xì)雨里 你輕輕的來了 住進(jìn)了我的日子里 我搖晃路旁的大樹 葉子掉了滿地 你走了 帶著葉子的情懷 去了很遠(yuǎn)...
    田萍閱讀 194評(píng)論 1 4
  • 今天上午,一位異性畫友(我猜的)發(fā)來賀信,祝賀我獲得了公司舉辦的作品展覽活動(dòng)的一等獎(jiǎng),同時(shí)也發(fā)了一個(gè)紅包過來。 除...
    涯為漫畫癡閱讀 419評(píng)論 4 12