iOS - App 與外設間的通信方式


1、前言

  • 一般 iOS 開發者做 App 開發大部分時候都是通過 Http(s) 請求跟后台服務器打交道,做一些信息展示和用戶交互。很少涉及到去跟外部硬件設備連接的開發。隨着近年來車聯網和物聯網的興起,智能家居和智能硬件的逐步火熱,越來越多的 App 被開發出來,用來跟硬件設備進行來連接,獲取硬件相關信息展示或者發送指令控制硬件來提供服務。本文就針對 iOS 的 App 如何跟外部設備進行連接通信這個問題進行講解。

  • 如下圖所示,iOS App 連接外設的常用方式可以分為三大類:

    app16

2、通過網絡端口通信

  • 建立 Socket 使用 TCP/IP 協議族進行通信,天然支持多通道,想要幾個通道就建幾個 socket 就行了。

  • 關於如何使用 Socket 進行 TCP、UDP,推薦 github 上的開源項目 CocoaAsyncSocket

  • 通過網絡端口通信主要有三種方式:Wi-Fi 連接、USB 熱點共享連接、NCM 連接。

2.1 Wi-Fi 連接

  • 優點是:簡單,不需要集成 MFi 芯片,只要對應的硬件有無線網卡,然后手機和硬件連接到同一個局域網中就可以使用 socket 通過網絡協議通信了。

  • 缺點也很明顯:

    • 無線連接信號容易受到干擾,不太穩定,容易斷開。
    • 如果硬件使用的場合沒有公共 wifi,就需要手機自建熱點共享,硬件進行熱點接入,操作步驟較多,對用戶來說學習使用成本較高,並且熱點共享要求手機本身的數據移動網絡是穩定的,在沒有移動數據網絡信號的地方,熱點無法建立。

2.2 USB 熱點共享連接

  • 這個其實跟 Wi-Fi 中的熱點共享非常類似,也不需要集成 MFI 芯片,區別就是 USB 線共享熱點,走的是有線,不容易受到干擾,更穩定,而且 iPhone 可以邊使用邊充電;

  • 缺點也是操作步驟比較復雜,需要先打開個人熱點共享。

2.3 NCM 連接

  • 就是把 USB 端口虛擬成標准的網絡端口,然后手機和外設就能通過有線網絡直連了,可以理解成手機和外設通過一跟網線連起來了,然后就可以用 socket 通過 TCP,UDP 進行通信了。

  • 它的優點是:有線連接,非常穩定,帶寬足夠;也不依賴移動網絡信號。

  • 但是它的缺點就是:需要集成 MFi 芯片並進行 MFi 認證,有一定門檻。更變態的是這么好的一種方式,蘋果只允許它自己的 CarPlay 使用,如果硬件使用 NCM 跟其他 App 通信,是不能通過 MFi 認證的。

3、通過 EAP 方式通信

  • 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 進行入門和學習。

4、通過 BLE 方式通信

  • BLE 即低功耗藍牙,是 iOS7.0 以后才支持的連接方式。

  • 它的優點是不需要集成 MFi 芯片做認證,功耗低。手機端開發也相對簡單,集成 iOS 系統提供的 CoreBluetooth.framework 就行。缺點是:帶寬很低,一般適合於只需要傳輸少量數據的場景。比如前兩年非常火爆的各種所謂智能硬件,像智能水杯,智能體重計,運動手環等,都是采用這種連接方式。

  • 關於 BLE 的具體使用見 iOS - Bluetooth 藍牙


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM