1. 程式人生 > >iOS 連線外設的幾種方式

iOS 連線外設的幾種方式

    聯絡人:石虎 QQ:1224614774   暱稱: 嗡嘛呢叭咪哄

                         QQ群:807236138   群稱: iOS 技術交流學習群

 

一、概念

       一般iOS開發者做APP開發大部分時候都是通過Http(s)請求跟後臺伺服器打交道,做一些資訊展示和使用者互動。很少涉及到去跟外部硬體裝置連線的開發。隨著近年來車聯網和物聯網的興起,智慧家居和智慧硬體的逐步火熱,越來越多的app被開發出來,用來跟硬體裝置進行來連線,獲取硬體相關資訊展示或者傳送指令控制硬體來提供服務。故本文就針對iOS的app如何跟外部裝置進行連線通訊這個問題跟大家交流一下。本文原創,歡迎轉載,轉載請註明出處,如有不正確的地方懇請各位看官指正。

QQ截圖20160803144821.png

可以分為三大類:

第一類是通過網路埠,建立Socket使用TCP/IP協議族進行通訊,天然支援多通道,想要幾個通道就建幾個socket就行了。它主要有三種方式,第一種方式是Wi-Fi連線,優點是:簡單,不需要整合MFi晶片,只要對應的硬體有無線網絡卡,然後手機和硬體連線到同一個區域網中就可以使用socket通過網路協議通訊了。缺點也很明顯:(1)無線連線訊號容易受到干擾,不太穩定,容易斷開;(2)如果硬體使用的場合沒有公共wifi,就需要手機自建熱點共享,硬體進行熱點接入,操作步驟較多,對使用者來說學習使用成本較高,並且熱點共享要求手機本身的資料行動網路是穩定的,在沒有移動資料網路訊號的地方,熱點無法建立。

需要先打開個人熱點共享;

使用網路埠的第三種方式是NCM,就是把USB埠虛擬成標準的網路埠,然後手機和外設就能通過有線網路直連了,可以理解成手機和外設通過一跟網線連起來了,然後就可以用socket通過TCP,UDP進行通訊了。它的優點是:有線連線,非常穩定,頻寬足夠;也不依賴行動網路訊號;但是它的缺點就是:需要整合MFI晶片並進行MFI認證,有一定門檻。更變態的是這麼好的一種方式,目前蘋果只提到可以在它自己的CarPlay使用,其他硬體並沒有說禁止或者允許使用。如果硬體使用NCM跟iOS系統的App通訊,可能通過MFI認證是有風險的。

關於如何使用Socket進行TCP、UDP連線,推薦github上的開源專案

CocoaAsyncSocket

iOS App連線外部硬體的第二大類是EAP,全拼是External Accessory Protocol,外部裝置協議。這個是蘋果推薦使用的外設連線方式。需要外設整合MFI晶片進行MFI認證。手機端開發相對簡單,只要整合 iOS系統提供的一個框架ExternalAccessory.framework,並且在info.plist中配置好協議字串(Supported external accessory protocols),當iOS 裝置通過USB線或者藍芽連線到對應硬體時,iOS系統會把符合MFI認證要求的外設抽象成了一個流物件,App通過指定的協議字串來建立一個EASession類的例項來訪問到該流物件,就能通過NSInputStream和NSOutputStream跟硬體件進行通訊了。它有兩種模式,一種是叫EASession的模式,它頻寬相對較低,但是允許同時通過多個協議字串建立多個會話,也就是說直接支援多個通道;另外一種是Native Transport的模式,這種模式的優點是頻寬足夠大,理論值是100MB以上,但是不支援多通道,如果業務層需要支援多資料通道的話需要App自己進行通道的複用與拆分,並且Native Transport需要iPhone工作在USB host模式,硬體需要支援USB 模式切換。

關於如何使用EAP跟外部裝置進行通訊,可以參考蘋果官方的Demo進行入門和學習。

第三大類就是BLE,低功耗藍芽,是iOS7.0以後才支援的連線方式。它的優點是不需要整合MFI晶片做認證,功耗低,手機端開發也相對簡單,整合iOS系統提供的CoreBluetooth.framework就行。缺點是:頻寬很低,一般適合於只需要傳輸少量資料的場景。比如前兩年非常火爆的各種所謂智慧硬體,像智慧水杯,智慧體重計,運動手環等,都是採用這種連線方式。

關於如何使用BLE進行硬體連線,可以參考本人在github的一個小開源專案(https://github.com/luoxubin/BlueTooth4.0)。另外本人自己業餘時間也做過一個BLE連線外設的App-褲寶(名字有創意吧,褲子裡的寶貝,是跟我另外兩個小夥伴一起做的創業專案,目前該專案黃了, 不過app還在線上,AppStore裡搜尋“褲寶”可以下載。

總結一下,圖中帶MFI字樣的表示該連線方式需要硬體整合MFi晶片,做MFi認證。關於蘋果的MFI認證,對iOS開發中來說其實是一個比較陌生並且繁瑣的topic,原因如下:

(1)網上鮮有資料,Google基本上查不到。 因為MFi認證是由硬體生產商主導進行的,蘋果首先對硬體生產商的實力(質量,信譽,生產規模)有很苛刻的要求,滿足要求的才有進行MFI認證的資格。滿足MFi認證資格要求的硬體生產商,提交了MFi產品計劃後才能得到蘋果MFi開發的官方文件,這個文件是帶水印的,不允許外洩;

(2)MFi認證週期很長,過程也很複雜;

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

原文連結:http://www.cocoachina.com/bbs/read.php?tid-1689738.html

謝謝!!!