iOS Core NFC指南

原文鏈接: http://fighting300.com...

大家可能聽過NFC這項功能,或者有可能你每天都在使用這個功能,比如當你在進出地鐵時閘機掃描地鐵卡就用到了NFC技術(shù)瘩欺。
簡單來說NFC就是可以讓智能手機的NFC模塊结胀,可以像讀卡器一般,讀取電子標簽的相關(guān)信息普监,實現(xiàn)NFC手機之間的數(shù)據(jù)交互或是讀取其他IC卡內(nèi)的數(shù)據(jù)贵试。NFC(機場通訊),其實由非接觸式射頻識別(RFID)演變而來凯正,是一種短距高頻的無線電技術(shù)毙玻,在13.56MHz頻率運行于20厘米距離內(nèi)。它的傳輸速度有106 Kbit/秒廊散、212 Kbit/秒或者424 Kbit/秒三種桑滩。目前NFC已通過成為ISO/IEC IS 18092國際標準、ECMA-340標準與ETSI TS 102 190標準允睹。

NFC使用場景

Core NFC介紹

或者你可能還吐槽過Apple怎么還不支持NFC呢运准,其實iPhone6已經(jīng)有NFC硬件了,已支持Apple Pay支付系統(tǒng)缭受,只是接口沒開放胁澳,終于在今年的WWDC,蘋果在iOS11系統(tǒng)上對開發(fā)者開放了NFC接口框架Core NFC米者,雖然目前權(quán)限只有只讀模式韭畸。
Apple的Core NFC可以用于檢測NFC(近場通訊)標簽和讀取包含NDEF(NFC Data Exchange Format)數(shù)據(jù)1到5類型的標簽信息宇智,只是該功能只支持iPhone 7和iPhone 7P及以上的機型。目前Core NFC其實同時有NFC和RFID的API存在胰丁,但是RFID可能沒有很高的安全性随橘,所以蘋果沒有推廣使用(或者還在開發(fā)中)。

NFC Data Exchange Format : NFC數(shù)據(jù)交換格式隘马,NFC組織約定的NFC tag中的數(shù)據(jù)格式太防。NDEF是輕量級的緊湊的二進制格式,可帶有URL酸员、vCard和NFC定義的各種數(shù)據(jù)類型蜒车。NDEF的由各種數(shù)據(jù)記錄組成,而各個記錄由報頭(Header)和有效載荷(Payload)組成幔嗦,其中NDEF記錄的數(shù)據(jù)類型和大小由記錄載荷的報頭注明酿愧,這里的報頭包含3部分,分別為Length邀泉、Type和Identifier嬉挡。

NFC標簽圖例

iOS集成開發(fā)

項目配置

首先需要讓你的AppID添加對NFC的支持,選中NFC Tag Reading后更新Provisioning Profiles即可汇恤。

其次在項目中打開Targets->Capabilities下的Near Field Communication Tag Reading選項庞钢,Xcode會自動幫你創(chuàng)建NFC entitlement文件。然后你需要在entitlements文件下添加如下內(nèi)容(該內(nèi)容新版Xcode已經(jīng)自動添加并配置完成):

  <key>com.apple.developer.nfc.readersession.formats</key>
  <array>
    <string>NDEF</string>
  </array>
NFC Capabilities

隨后需要在info.plist中添加隱私標簽Privacy - NFC Scan Usage Description因谎。

  <key>NFCReaderUsageDescription</key>
  <string>NFC Import</string>
NFC Info
集成Core NFC

集成Core NFC需要用到NFCNDEFReaderSession類基括,其為NFCReaderSession的子類,但是基類不能實例化财岔。
和iOS的其他Session一樣通過其協(xié)議NFCReaderSessionProtocol方法來處理信息回調(diào)的結(jié)果风皿。這最重要的一個代理回調(diào)是func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages:[NFCNDEFMessage])方法,用以處理檢測到的NDEF消息匠璧,messages是一個NFCNDEFMessage的數(shù)組桐款,其有一個records數(shù)組,包含NFCNDEFPayload對象夷恍,該對象存放了真正的數(shù)據(jù)內(nèi)容魔眨。

import CoreNFC
class MessagesTableViewController: UITableViewController, NFCNDEFReaderSessionDelegate {
  // MARK: NFCNDEReaderSessionDelegate
  func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
     // Check invalidation reason from the returned error. Session will be invalidated after the function returns. New session instance is required to restart tag scanning.
  }
  func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages:[NFCNDEFMessage]) {
     // Process read NFCNDEFMessage objects.
     for message in messages {
         print(" - \(message.records.count) Records:")
         for record in message.records {
             print("\t- TNF (TypeNameFormat): \(record.typeNameFormat)")
             print("\t- Payload: \(String(data: record.payload, encoding: .utf8)!)")
             print("\t- Type: \(record.type)")
             print("\t- Identifier: \(record.identifier)\n")
         }
      }
  }

  // MARK: - Actions
  @IBAction func beginScanning(_ sender: Any) {
     let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidatedAfterFirstRead:true)
     session.alertMessage = "You can scan NFC-tags by holding them behind the top of your iPhone."
     session.begin()
  }

NFCReaderSession還有NFCISO15693ReaderSession的子類,用于RFID的讀取處理裁厅,其使用流程和NFCNDEFReaderSession基本一致冰沙,只是代理方法不同,ISO15693是一種特殊的RFID標簽执虹,它擁有自己的協(xié)議和數(shù)據(jù)API(NFCISO15693Tag)拓挥。但是該類不起作用。袋励。侥啤〉卑龋可能Apple工程師還在開發(fā)中吧

Tips

  1. 注意同時只能實例化一個讀取session(系統(tǒng)會把其他的session放在隊列里序列化執(zhí)行)
  2. Core NFC目前只支持前臺掃描,切換到后臺會失效
  3. NFCNDEFReaderSession最大每次掃描60s盖灸,超時需要重啟
  4. 可以配置單一Tag或者多Tag讀取模式
  5. 使用提示信息即alertMessage會顯示在當前APP的彈出浮層中

獲取成功后蚁鳖,即可以根據(jù)獲取到的信息進行之后的業(yè)務(wù)流程了。

[相關(guān)代碼地址]https://github.com/fighting300/iOS11-Example.git

CoreNFC讀取信息圖示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赁炎,一起剝皮案震驚了整個濱河市醉箕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徙垫,老刑警劉巖讥裤,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姻报,居然都是意外死亡己英,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門吴旋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來损肛,“玉大人,你說我怎么就攤上這事荣瑟≈文茫” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵笆焰,是天一觀的道長忍啤。 經(jīng)常有香客問我,道長仙辟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任鳄梅,我火速辦了婚禮叠国,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘戴尸。我一直安慰自己粟焊,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布孙蒙。 她就那樣靜靜地躺著项棠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挎峦。 梳的紋絲不亂的頭發(fā)上香追,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音坦胶,去河邊找鬼透典。 笑死晴楔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的峭咒。 我是一名探鬼主播税弃,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凑队!你這毒婦竟也來了则果?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漩氨,失蹤者是張志新(化名)和其女友劉穎西壮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體才菠,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡茸时,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赋访。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片可都。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚓耽,靈堂內(nèi)的尸體忽然破棺而出渠牲,到底是詐尸還是另有隱情,我是刑警寧澤步悠,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布签杈,位于F島的核電站,受9級特大地震影響鼎兽,放射性物質(zhì)發(fā)生泄漏答姥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一谚咬、第九天 我趴在偏房一處隱蔽的房頂上張望鹦付。 院中可真熱鬧,春花似錦择卦、人聲如沸敲长。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祈噪。三九已至,卻和暖如春尚辑,著一層夾襖步出監(jiān)牢的瞬間辑鲤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工腌巾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遂填,地道東北人铲觉。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像吓坚,于是被迫代替她去往敵國和親撵幽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 本篇文章共分為三個部分礁击,讀者可根據(jù)需要直接閱讀對應部分: 1. iOS 對NFC支持的現(xiàn)狀 2.NFC基本概念與相...
    Cstars閱讀 11,426評論 3 9
  • 先了解幾個概念什么是NFC盐杂?NDEF指的是什么?什么是CoreNFC哆窿? 什么是 NFC NFC(Near Fiel...
    A訫飛Flyme閱讀 10,839評論 10 6
  • iOS11 Core NFC iPhone6開始支持NFC(Near Field Communication )...
    繚霧閱讀 1,909評論 13 3
  • NFC 基礎(chǔ) 本文檔介紹了在Android上的基本的NFC任務(wù)链烈。它說明了如何發(fā)送和接收的NDEF消息(NDEF m...
    張云飛Vir閱讀 3,205評論 0 52
  • 轉(zhuǎn)載羅輯思維 看到很有意思的一個辯題:到底該不該讓孩子在童話故事里長...
    尚湯閱讀 855評論 0 0