本篇文章共分為三個部分,讀者可根據需要直接閱讀對應部分:
1. iOS 對NFC支持的現狀
2.NFC基本概念與相關術語
3.iOS NFC 開發實踐
下面是正文:
一、iOS 對NFC支持的現狀
2017年,WWDC正式發布了iOS11,在SDK中首次開放了NFC功能,開發者可通過Core NFC FrameWork 使用NFC功能。不過不要高興太早,此次發布的版本支持的功能非常保守,只支持 NFC Tag Reading 功能。
支持機型:
?iPhone 7 及后續發布機型(雖然iPhone 6開始已經有NFC硬件,但是Apple 出于某些原因,6,6plus不開發此功能)
支持方式:
?iOS 11 需要安裝APP才能使用(安卓系統已經內建了支持),APP使用NFC時需要主動打開一個session才能進行讀取tag,并且APP必須在前臺(foreground)狀態下,一旦APP進入background或退出,session將自動終止(安卓則可以在后臺一直進行輪詢)。
二、NFC基本概念與相關術語
NFC是什么東東?
全稱?Near Field Communication (近場通訊),這個技術由非接觸式射頻識別(RFID)演變而來,由飛利浦半導體(現恩智浦半導體公司)、諾基亞和索尼共同研制開發,其基礎是RFID及互連技術。近場通信(Near Field Communication,NFC)是一種短距高頻的無線電技術,在13.56MHz頻率運行于10厘米距離內。
NFC Tag?
NFC tags are cheap, passive RFID tags that are stuck on, or embedded into products, packaging, promotional items and many other physical things。
可以看到它是廉價的、被動式的RFID(射頻識別)Tag,粘貼或內嵌如產品,包裹,促銷品及許多其他實物,甚至像電影里一樣嵌入皮膚。那么問題又來了RFID Tags 是什么?
RFID Tag?
它由耦合元件及芯片組成,每個RFID標簽具有唯一的電子編碼(全球唯一哦??),附著在物體上標識目標對象,俗稱電子標簽或智能標簽。RFID電子標簽:有源標簽,無源標簽,半有源半無源標簽。普通用的地鐵卡就是無源標簽。 什么編碼這么牛X, 全球唯一?是EPC編碼。
EPC編碼?
EPC(Electronic Product Code)即電子產品編碼,是一種編碼系統。它建立在EAN.UCC(即全球統一標識系統)條型編碼的基礎之上,并對該條形編碼系統做了一些擴充,用以實現對單品進行標志。
它是下一代產品標識代碼,它可以對供應鏈中的對象(包括物品、貨箱、貨盤、位置等)進行全球唯一的標識。EPC 存儲在RFID標簽上,這個標簽包含一塊硅芯片和一根天線。讀取 EPC標簽時,它可以與一些動態數據連接,例如該貿易項目的原產地或生產日期等。EPC所標識產品的信息保存在EPCglobal網絡中,而EPC則是獲取有關這些信息的一把鑰匙。
WWDC解釋:
NFC實際上是一組不同的標準和協議。所有的標準共存,并用于不同的目的。
NFC text可歸納為5類,type1~type5.每一個類型對應于一個不同的標準。
NFC Forum定義了NFC Data Exchange Format(NDEF)用來作為不同的NFC text類型數據交換的通用標準方式
使用場景:
上面一堆解釋,第一次聽絕對是云里霧里的,不過看看它能干什么就有整體印象了。下面描述的是NFC的使用場景(不限于iOS,其中部分功能iOS不支持)
NFC工作模式有三種:
1.Reader/Writer mode(讀寫器模式)iOS只支持reader模式
此模式可以讀取NFC Tag,也可寫入Tag數據。(可以想象手機給地鐵卡充值,它能讀取卡內信息,也能寫入數據),蘋果給出的使用的場景1.連接用戶到位置或上下文相關的內容2.連接硬件設備3.倉庫庫存追蹤。
2.Peer-to-Peer mode (點對點模式)? iOS 不支持
將兩個具備NFC功能的設備鏈接,能實現數據點對點傳輸,如下載音樂、交換圖片或者同步設備地址薄。
3.Card-emulation mode (卡模擬模式)iOS不支持
可以將具備NFC功能的設備當做只能卡或者IC卡,比如地鐵卡,信用卡,門禁卡。
NFC是怎么檢測到Tag的?
在NFC Tag(它是一種廉價、被動式的RFID tag, 就是一個集成電路)中有天線與電路。當拿具備NFC功能的手機或其他讀取器靠近時,手機或讀取器發射高頻電磁波(射頻信號),引發Tag內的電路產生感應電流(卡內沒有電源,全靠讀取器發射的電磁波產生電流驅動),Tag利用產生的電流發射出Tag內存儲是數據。
三、iOS NFC 開發實踐
過程很簡單,不過需要注意一些方面:
1.tag reading是按需的,你需要自己啟動一個tag reading操作。
2.tag reading session需要在foreground時啟動。
3.應用進入后臺或退出,session將終止。
4.每個session最多持續60秒,超時將終止。
5.可配置session讀取一個tag或多個tag,當設置讀取一個tag時,讀完后session自動終止,若讀取多個tag,則會持續直到用戶取消或超過60秒。
6.session終止后,若要再讀取,需要創建一個新的session并開啟。
7.info.plist中設置的描述將在讀取時顯示給用戶。
開發配置:
配置項目:2個步驟
1.需要在Xcode打開Near Field Communication Tag Reading Capability(剛發布的xcode中不含此選項,請自行添加)
2.info.plist設置隱私選項Scan UsageDescription
開發: 2個步驟
1.設置一個delegate adopt NFCNDEFReaderSessionDelegate Protocol
2.創建一個NFCNDEFReaderSession,調用begin方法
3.實現代理方法,處理對應回調。
最后附上相關參考資料: