iOS外设数据通信方式

网络端口

建立Socket使用TCP/IP协议族进行通信,天然支持多通道,想要几个通道就建几个socket就行了

Wi-Fi 连接

优点:

  • 简单,不需要集成MFi芯片
  • 只要对应的硬件有无线网卡,然后将手机和硬件连接到同一个局域网中就可以使用 Socket 通过网络协议通信

缺点:

  • 无线连接信号容易受到干扰,不太稳定,容易断开
  • 如果硬件使用的场合没有公共 Wi-Fi,就需要手机自建热点共享,硬件进行热点接入,操作步骤较多,对用户来说学习使用成本较高,并且热点共享要求手机本身的数据移动网络是稳定的,在没有移动数据网络信号的地方,热点无法建立。
  • 参考链接: https://www.jianshu.com/p/bcb104f8b8e9

USB热点共享

这个其实跟 Wi-Fi 中的热点共享非常类似,也不需要集成 MFi 芯片。

优点:

  • USB 热点共享,走的是有线,不容易受到干扰,更稳定,

iPhone 可以边使用可以边充电

  • iPhone 可以边使用可以边充电

缺点:

  • 操作步骤比较复杂,需要先打开个人热点共享

NCM(需要MFi->废了,只能用于Carplay)

就是把 USB 端口虚拟成标准的网络端口,然后手机和外设就能通过有线网络直连了,可以理解成手机和外设通过一跟网线连起来了,然后就可以用 Socket 通过 TCP,UDP 进行通信了。

优点:

  • 有线连接,非常稳定,带宽足够
  • 不依赖移动网络信号

缺点:

  • 需要集成 MFi 芯片并进行 MFi 认证,有一定门槛
  • 除了 CarPlay,其他跟 iPhone 连接的外设都不能使用 NCM 的方式跟 iPhone 上的 App 进行连接和通信

EAP(MFi,苹果推荐方式,复杂,实现门槛高)

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 模式切换

  • MFi需要遵循的框架 ExternalAccessory.framework
  • MFi 开发流程 https://www.jianshu.com/p/8f69c9c4e71e
  • MFi是什么? https://www.jianshu.com/p/b90b0c45398d

外设连接黑科技 - USBMuxd(不需要MFi认证,可参考)

USBMuxd,利用这种连接方式不需要做 MFi 认证,支持 iPhone 上的 App 跟外设通过进行通信,非常方便。

基本原理
iPhone 的 iOS 系统中自带了 USBMuxd 服务,该服务能够实现
USB-TCP 协议的转换,能够把 USB 的端口映射到本机 (localhost) 的 TCP 端 (基于 Unix Domain Socket )。只需要在外设端也实现一个 USBMuxd 服务,并指定端口映射关系, 那
iPhone 的 App 和外设上的应用就可以使用 Socket 进行 TCP 进行通信了。

参考链接:https://www.jianshu.com/p/74decb993761;https://www.jianshu.com/p/eba133891ec6

开源实例:https://github.com/rsms/peertalk

OTG - 即插即用 iPhone不支持

BLE

你可能感兴趣的:(iOS外设数据通信方式)