? ? ? ?一般iOS開發(fā)者做APP開發(fā)大部分時候都是通過Http(s)請求跟后臺服務(wù)器打交道硫眯,做一些信息展示和用戶交互。很少涉及到去跟外部硬件設(shè)備連接的開發(fā)筑凫。隨著近年來車聯(lián)網(wǎng)和物聯(lián)網(wǎng)的興起,智能家居和智能硬件的逐步火熱,越來越多的app被開發(fā)出來腺律,用來跟硬件設(shè)備進行來連接,獲取硬件相關(guān)信息展示或者發(fā)送指令控制硬件來提供服務(wù)宜肉。故本文就針對iOS的app如何跟外部設(shè)備進行連接通信這個問題跟大家交流一下匀钧,如有不正確的地方懇請各位看官指正。本文原創(chuàng)谬返,歡迎轉(zhuǎn)載之斯,轉(zhuǎn)載請注明出處。
如上圖所示遣铝,我把iOS App連接外設(shè)的常用方式總結(jié)了一下佑刷,可以分為三大類:
第一類是通過網(wǎng)絡(luò)端口莉擒,建立Socket使用TCP/IP協(xié)議族進行通信,天然支持多通道瘫絮,想要幾個通道就建幾個socket就行了涨冀。它主要有三種方式,第一種方式是Wi-Fi連接麦萤,優(yōu)點是:簡單鹿鳖,不需要集成MFi芯片,只要對應(yīng)的硬件有無線網(wǎng)卡壮莹,然后手機和硬件連接到同一個局域網(wǎng)中就可以使用socket通過網(wǎng)絡(luò)協(xié)議通信了翅帜。缺點也很明顯:(1)無線連接信號容易受到干擾,不太穩(wěn)定命满,容易斷開涝滴;(2)如果硬件使用的場合沒有公共wifi,就需要手機自建熱點共享胶台,硬件進行熱點接入歼疮,操作步驟較多,對用戶來說學(xué)習使用成本較高诈唬,并且熱點共享要求手機本身的數(shù)據(jù)移動網(wǎng)絡(luò)是穩(wěn)定的腋妙,在沒有移動數(shù)據(jù)網(wǎng)絡(luò)信號的地方,熱點無法建立讯榕。
使用網(wǎng)絡(luò)端口的第二種方式是USB熱點共享骤素,這個其實跟Wi-Fi中的熱點共享非常類似,也不需要集成MFI芯片愚屁,區(qū)別就是USB線共享熱點济竹,走的是有線,不容易受到干擾霎槐,更穩(wěn)定送浊,而且iPhone可以邊使用可以邊充電;缺點也是操作步驟比較復(fù)雜丘跌,需要先打開個人熱點共享袭景;
使用網(wǎng)絡(luò)端口的第三種方式是NCM,就是把USB端口虛擬成標準的網(wǎng)絡(luò)端口闭树,然后手機和外設(shè)就能通過有線網(wǎng)絡(luò)直連了耸棒,可以理解成手機和外設(shè)通過一跟網(wǎng)線連起來了,然后就可以用socket通過TCP报辱,UDP進行通信了与殃。它的優(yōu)點是:有線連接,非常穩(wěn)定,帶寬足夠幅疼;也不依賴移動網(wǎng)絡(luò)信號米奸;但是它的缺點就是:需要集成MFI芯片并進行MFI認證,有一定門檻爽篷。更變態(tài)的是這么好的一種方式悴晰,蘋果只允許它自己的CarPlay使用,如果硬件使用NCM跟其他app通信逐工,是不能通過MFI認證的膨疏。
關(guān)于如何使用Socket進行TCP、UDP連接钻弄,推薦github上的開源項目CocoaAsyncSocket
iOS App連接外部硬件的第二大類是EAP,全拼是External Accessory Protocol 者吁,外部設(shè)備協(xié)議窘俺。這個是蘋果推薦使用的外設(shè)連接方式。需要外設(shè)集成MFI芯片進行MFI認證复凳。手機端開發(fā)相對簡單瘤泪,只要集成iOS系統(tǒng)提供的一個框架ExternalAccessory.framework,并且在info.plist中配置好協(xié)議字符串(Supported external accessory protocols)育八,當iOS 設(shè)備通過USB線或者藍牙連接到對應(yīng)硬件時对途,iOS系統(tǒng)會把符合MFI認證要求的外設(shè)抽象成了一個流對象,App通過指定的協(xié)議字符串來創(chuàng)建一個EASession類的實例來訪問到該流對象髓棋,就能通過NSInputStream和NSOutputStream跟硬件件進行通信了实檀。它有兩種模式,一種是叫EASession的模式按声,它帶寬相對較低膳犹,但是允許同時通過多個協(xié)議字符串創(chuàng)建多個會話,也就是說直接支持多個通道签则;另外一種是Native Transport的模式须床,這種模式的優(yōu)點是帶寬足夠大,理論值是100MB以上渐裂,但是不支持多通道豺旬,如果業(yè)務(wù)層需要支持多數(shù)據(jù)通道的話需要App自己進行通道的復(fù)用與拆分,并且Native Transport需要iPhone工作在USB host模式柒凉,硬件需要支持USB 模式切換族阅。
關(guān)于如何使用EAP跟外部設(shè)備進行通信,可以參考蘋果官方的demo進行入門和學(xué)習膝捞。
第三大類就是BLE耘分,低功耗藍牙,是iOS7.0以后才支持的連接方式。它的優(yōu)點是不需要集成MFI芯片做認證求泰,功耗低央渣,手機端開發(fā)也相對簡單,集成iOS系統(tǒng)提供的CoreBluetooth.framework就行渴频。缺點是:帶寬很低芽丹,一般適合于只需要傳輸少量數(shù)據(jù)的場景。比如前兩年非巢防剩火爆的各種所謂智能硬件拔第,像智能水杯,智能體重計场钉,運動手環(huán)等蚊俺,都是采用這種連接方式。
關(guān)于如何使用BLE進行硬件連接逛万,可以參考本人在github的一個小開源項目(https://github.com/luoxubin/BlueTooth4.0)泳猬。另外本人自己業(yè)余時間也做過一個BLE連接外設(shè)的App-褲寶(名字有創(chuàng)意吧,褲子里的寶貝宇植,是跟我另外兩個小伙伴一起做的創(chuàng)業(yè)項目得封,目前該項目黃了, 不過app還在線上指郁,AppStore里搜索“褲寶”可以下載到
總結(jié)一下忙上,圖中帶MFI字樣的表示該連接方式需要硬件集成MFi芯片,做MFi認證闲坎。關(guān)于蘋果的MFI認證疫粥,對iOS開發(fā)中來說其實是一個比較陌生并且繁瑣的topic,原因如下:
(1)網(wǎng)上鮮有資料腰懂,Google基本上查不到手形。 因為MFi認證是由硬件生產(chǎn)商主導(dǎo)進行的,蘋果首先對硬件生產(chǎn)商的實力(質(zhì)量悯恍,信譽库糠,生產(chǎn)規(guī)模)有很苛刻的要求,滿足要求的才有進行MFI認證的資格涮毫。滿足MFi認證資格要求的硬件生產(chǎn)商瞬欧,提交了MFi產(chǎn)品計劃后才能得到蘋果MFi開發(fā)的官方文檔,這個文檔是帶水印的罢防,不允許外泄艘虎;
(2)MFi認證周期很長,過程也很復(fù)雜咒吐;
(3)蘋果官方溝通渠道很窄野建,電話打不通属划,郵件回復(fù)不及時。
后面我計劃找時間寫一篇文章專門介紹本人關(guān)于MFI認證的一些經(jīng)驗和感想候生,有興趣的可以掃描下方二維碼關(guān)注本公眾號同眯,謝謝。
本人維護了一個“MFi開發(fā)交流”的微信群唯鸭,里面有iOS開發(fā) 须蜗、外設(shè)驅(qū)動、MFi認證等各類相關(guān)人員目溉,大家相關(guān)交流明肮,互幫互助。
想進群的可以加本人微信:luoxub?缭付,備注:MFi, 邀請進群柿估。