iOS App連接外設(shè)的幾種方式

? ? ? ?一般iOS開發(fā)者做APP開發(fā)大部分時(shí)候都是通過Http(s)請(qǐng)求跟后臺(tái)服務(wù)器打交道,做一些信息展示和用戶交互。很少涉及到去跟外部硬件設(shè)備連接的開發(fā)。隨著近年來車聯(lián)網(wǎng)和物聯(lián)網(wǎng)的興起,智能家居和智能硬件的逐步火熱,越來越多的app被開發(fā)出來,用來跟硬件設(shè)備進(jìn)行來連接,獲取硬件相關(guān)信息展示或者發(fā)送指令控制硬件來提供服務(wù)。故本文就針對(duì)iOS的app如何跟外部設(shè)備進(jìn)行連接通信這個(gè)問題跟大家交流一下,如有不正確的地方懇請(qǐng)各位看官指正。本文原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處。

如上圖所示,我把iOS App連接外設(shè)的常用方式總結(jié)了一下,可以分為三大類:

第一類是通過網(wǎng)絡(luò)端口,建立Socket使用TCP/IP協(xié)議族進(jìn)行通信,天然支持多通道,想要幾個(gè)通道就建幾個(gè)socket就行了。它主要有三種方式,第一種方式是Wi-Fi連接,優(yōu)點(diǎn)是:簡單,不需要集成MFi芯片,只要對(duì)應(yīng)的硬件有無線網(wǎng)卡,然后手機(jī)和硬件連接到同一個(gè)局域網(wǎng)中就可以使用socket通過網(wǎng)絡(luò)協(xié)議通信了。缺點(diǎn)也很明顯:(1)無線連接信號(hào)容易受到干擾,不太穩(wěn)定,容易斷開;(2)如果硬件使用的場合沒有公共wifi,就需要手機(jī)自建熱點(diǎn)共享,硬件進(jìn)行熱點(diǎn)接入,操作步驟較多,對(duì)用戶來說學(xué)習(xí)使用成本較高,并且熱點(diǎn)共享要求手機(jī)本身的數(shù)據(jù)移動(dòng)網(wǎng)絡(luò)是穩(wěn)定的,在沒有移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)信號(hào)的地方,熱點(diǎn)無法建立。

使用網(wǎng)絡(luò)端口的第二種方式是USB熱點(diǎn)共享,這個(gè)其實(shí)跟Wi-Fi中的熱點(diǎn)共享非常類似,也不需要集成MFI芯片,區(qū)別就是USB線共享熱點(diǎn),走的是有線,不容易受到干擾,更穩(wěn)定,而且iPhone可以邊使用可以邊充電;缺點(diǎn)也是操作步驟比較復(fù)雜,需要先打開個(gè)人熱點(diǎn)共享;

使用網(wǎng)絡(luò)端口的第三種方式是NCM,就是把USB端口虛擬成標(biāo)準(zhǔn)的網(wǎng)絡(luò)端口,然后手機(jī)和外設(shè)就能通過有線網(wǎng)絡(luò)直連了,可以理解成手機(jī)和外設(shè)通過一跟網(wǎng)線連起來了,然后就可以用socket通過TCP,UDP進(jìn)行通信了。它的優(yōu)點(diǎn)是:有線連接,非常穩(wěn)定,帶寬足夠;也不依賴移動(dòng)網(wǎng)絡(luò)信號(hào);但是它的缺點(diǎn)就是:需要集成MFI芯片并進(jìn)行MFI認(rèn)證,有一定門檻。更變態(tài)的是這么好的一種方式,蘋果只允許它自己的CarPlay使用,如果硬件使用NCM跟其他app通信,是不能通過MFI認(rèn)證的。

關(guān)于如何使用Socket進(jìn)行TCP、UDP連接,推薦github上的開源項(xiàng)目CocoaAsyncSocket

iOS App連接外部硬件的第二大類是EAP,全拼是External Accessory Protocol ,外部設(shè)備協(xié)議。這個(gè)是蘋果推薦使用的外設(shè)連接方式。需要外設(shè)集成MFI芯片進(jìn)行MFI認(rèn)證。手機(jī)端開發(fā)相對(duì)簡單,只要集成iOS系統(tǒng)提供的一個(gè)框架ExternalAccessory.framework,并且在info.plist中配置好協(xié)議字符串(Supported external accessory protocols),當(dāng)iOS 設(shè)備通過USB線或者藍(lán)牙連接到對(duì)應(yīng)硬件時(shí),iOS系統(tǒng)會(huì)把符合MFI認(rèn)證要求的外設(shè)抽象成了一個(gè)流對(duì)象,App通過指定的協(xié)議字符串來創(chuàng)建一個(gè)EASession類的實(shí)例來訪問到該流對(duì)象,就能通過NSInputStream和NSOutputStream跟硬件件進(jìn)行通信了。它有兩種模式,一種是叫EASession的模式,它帶寬相對(duì)較低,但是允許同時(shí)通過多個(gè)協(xié)議字符串創(chuàng)建多個(gè)會(huì)話,也就是說直接支持多個(gè)通道;另外一種是Native Transport的模式,這種模式的優(yōu)點(diǎn)是帶寬足夠大,理論值是100MB以上,但是不支持多通道,如果業(yè)務(wù)層需要支持多數(shù)據(jù)通道的話需要App自己進(jìn)行通道的復(fù)用與拆分,并且Native Transport需要iPhone工作在USB host模式,硬件需要支持USB 模式切換。

關(guān)于如何使用EAP跟外部設(shè)備進(jìn)行通信,可以參考蘋果官方的demo進(jìn)行入門和學(xué)習(xí)。

第三大類就是BLE,低功耗藍(lán)牙,是iOS7.0以后才支持的連接方式。它的優(yōu)點(diǎn)是不需要集成MFI芯片做認(rèn)證,功耗低,手機(jī)端開發(fā)也相對(duì)簡單,集成iOS系統(tǒng)提供的CoreBluetooth.framework就行。缺點(diǎn)是:帶寬很低,一般適合于只需要傳輸少量數(shù)據(jù)的場景。比如前兩年非?;鸨母鞣N所謂智能硬件,像智能水杯,智能體重計(jì),運(yùn)動(dòng)手環(huán)等,都是采用這種連接方式。

關(guān)于如何使用BLE進(jìn)行硬件連接,可以參考本人在github的一個(gè)小開源項(xiàng)目(https://github.com/luoxubin/BlueTooth4.0)。另外本人自己業(yè)余時(shí)間也做過一個(gè)BLE連接外設(shè)的App-褲寶(名字有創(chuàng)意吧,褲子里的寶貝,是跟我另外兩個(gè)小伙伴一起做的創(chuàng)業(yè)項(xiàng)目,目前該項(xiàng)目黃了, 不過app還在線上,AppStore里搜索“褲寶”可以下載到

總結(jié)一下,圖中帶MFI字樣的表示該連接方式需要硬件集成MFi芯片,做MFi認(rèn)證。關(guān)于蘋果的MFI認(rèn)證,對(duì)iOS開發(fā)中來說其實(shí)是一個(gè)比較陌生并且繁瑣的topic,原因如下:

(1)網(wǎng)上鮮有資料,Google基本上查不到。 因?yàn)镸Fi認(rèn)證是由硬件生產(chǎn)商主導(dǎo)進(jìn)行的,蘋果首先對(duì)硬件生產(chǎn)商的實(shí)力(質(zhì)量,信譽(yù),生產(chǎn)規(guī)模)有很苛刻的要求,滿足要求的才有進(jìn)行MFI認(rèn)證的資格。滿足MFi認(rèn)證資格要求的硬件生產(chǎn)商,提交了MFi產(chǎn)品計(jì)劃后才能得到蘋果MFi開發(fā)的官方文檔,這個(gè)文檔是帶水印的,不允許外泄;

(2)MFi認(rèn)證周期很長,過程也很復(fù)雜;

(3)蘋果官方溝通渠道很窄,電話打不通,郵件回復(fù)不及時(shí)。

后面我計(jì)劃找時(shí)間寫一篇文章專門介紹本人關(guān)于MFI認(rèn)證的一些經(jīng)驗(yàn)和感想,有興趣的可以掃描下方二維碼關(guān)注本公眾號(hào),謝謝。

本人維護(hù)了一個(gè)“MFi開發(fā)交流”的微信群,里面有iOS開發(fā) 、外設(shè)驅(qū)動(dòng)、MFi認(rèn)證等各類相關(guān)人員,大家相關(guān)交流,互幫互助。

想進(jìn)群的可以加本人微信:luoxub?,備注:MFi, 邀請(qǐng)進(jìn)群。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容