一般iOS開發(fā)者做APP開發(fā)大部分時候都是通過Http(s)請求跟后臺服務器打交道分苇,做一些信息展示和用戶交互。很少涉及到去跟外部硬件設備連接的開發(fā)蚂斤。隨著近年來車聯(lián)網和物聯(lián)網的興起摘完,智能家居和智能硬件的逐步火熱沼头,越來越多的app被開發(fā)出來,用來跟硬件設備進行來連接解藻,獲取硬件相關信息展示或者發(fā)送指令控制硬件來提供服務老充。故本文就針對iOS的app如何跟外部設備進行連接通信這個問題跟大家交流一下。本文原創(chuàng)螟左,歡迎轉載啡浊,轉載請注明出處,如有不正確的地方懇請各位看官指正胶背。
http://cc.cocimg.com/api/uploads/20160803/1470207112589120.png
可以分為三大類:
- 第一類是通過網絡端口巷嚣,建立Socket使用TCP/IP協(xié)議族進行通信,天然支持多通道钳吟,想要幾個通道就建幾個socket就行了廷粒。它主要有三種方式,第一種方式是Wi-Fi連接红且,優(yōu)點是:簡單坝茎,不需要集成MFi芯片,只要對應的硬件有無線網卡直焙,然后手機和硬件連接到同一個局域網中就可以使用socket通過網絡協(xié)議通信了景东。缺點也很明顯:(1)無線連接信號容易受到干擾,不太穩(wěn)定奔誓,容易斷開斤吐;(2)如果硬件使用的場合沒有公共wifi,就需要手機自建熱點共享厨喂,硬件進行熱點接入和措,操作步驟較多,對用戶來說學習使用成本較高蜕煌,并且熱點共享要求手機本身的數(shù)據(jù)移動網絡是穩(wěn)定的派阱,在沒有移動數(shù)據(jù)網絡信號的地方,熱點無法建立斜纪。
需要先打開個人熱點共享贫母;
使用網絡端口的第三種方式是NCM文兑,就是把USB端口虛擬成標準的網絡端口,然后手機和外設就能通過有線網絡直連了腺劣,可以理解成手機和外設通過一跟網線連起來了绿贞,然后就可以用socket通過TCP,UDP進行通信了橘原。它的優(yōu)點是:有線連接籍铁,非常穩(wěn)定,帶寬足夠趾断;也不依賴移動網絡信號拒名;但是它的缺點就是:需要集成MFI芯片并進行MFI認證,有一定門檻芋酌。更變態(tài)的是這么好的一種方式增显,目前蘋果只提到可以在它自己的CarPlay使用,其他硬件并沒有說禁止或者允許使用隔嫡。如果硬件使用NCM跟iOS系統(tǒng)的App通信甸怕,可能通過MFI認證是有風險的。
關于如何使用Socket進行TCP腮恩、UDP連接,推薦github上的開源項目CocoaAsyncSocket温兼。
- iOS App連接外部硬件的第二大類是EAP秸滴,全拼是External Accessory Protocol,外部設備協(xié)議募判。這個是蘋果推薦使用的外設連接方式荡含。需要外設集成MFI芯片進行MFI認證。手機端開發(fā)相對簡單届垫,只要集成 iOS系統(tǒng)提供的一個框架ExternalAccessory.framework释液,并且在info.plist中配置好協(xié)議字符串(Supported external accessory protocols),當iOS 設備通過USB線或者藍牙連接到對應硬件時装处,iOS系統(tǒng)會把符合MFI認證要求的外設抽象成了一個流對象误债,App通過指定的協(xié)議字符串來創(chuàng)建一個EASession類的實例來訪問到該流對象,就能通過NSInputStream和NSOutputStream跟硬件件進行通信了妄迁。它有兩種模式寝蹈,一種是叫EASession的模式,它帶寬相對較低登淘,但是允許同時通過多個協(xié)議字符串創(chuàng)建多個會話箫老,也就是說直接支持多個通道;另外一種是Native Transport的模式黔州,這種模式的優(yōu)點是帶寬足夠大耍鬓,理論值是100MB以上阔籽,但是不支持多通道,如果業(yè)務層需要支持多數(shù)據(jù)通道的話需要App自己進行通道的復用與拆分,并且Native Transport需要iPhone工作在USB host模式伦仍,硬件需要支持USB 模式切換色徘。
關于如何使用EAP跟外部設備進行通信,可以參考蘋果官方的Demo進行入門和學習项贺。
- 第三大類就是BLE,低功耗藍牙峭判,是iOS7.0以后才支持的連接方式开缎。它的優(yōu)點是不需要集成MFI芯片做認證,功耗低林螃,手機端開發(fā)也相對簡單奕删,集成iOS系統(tǒng)提供的CoreBluetooth.framework就行。缺點是:帶寬很低疗认,一般適合于只需要傳輸少量數(shù)據(jù)的場景完残。比如前兩年非常火爆的各種所謂智能硬件横漏,像智能水杯谨设,智能體重計,運動手環(huán)等缎浇,都是采用這種連接方式扎拣。
關于如何使用BLE進行硬件連接,可以參考github的一個小開源項目(https://github.com/luoxubin/BlueTooth4.0)素跺。
總結一下二蓝,圖中帶MFI字樣的表示該連接方式需要硬件集成MFi芯片,做MFi認證指厌。關于蘋果的MFI認證刊愚,對iOS開發(fā)中來說其實是一個比較陌生并且繁瑣的topic,原因如下:
(1)網上鮮有資料踩验,Google基本上查不到鸥诽。 因為MFi認證是由硬件生產商主導進行的,蘋果首先對硬件生產商的實力(質量晰甚,信譽衙传,生產規(guī)模)有很苛刻的要求,滿足要求的才有進行MFI認證的資格厕九。滿足MFi認證資格要求的硬件生產商蓖捶,提交了MFi產品計劃后才能得到蘋果MFi開發(fā)的官方文檔,這個文檔是帶水印的扁远,不允許外泄俊鱼;
(2)MFi認證周期很長刻像,過程也很復雜;
(3)蘋果官方溝通渠道很窄并闲,電話打不通细睡,郵件回復不及時。