故事
公司iOS app 提出一个需求:ipad外接电子秤读取数据。查到一些资料记录一下,只涉及概念知识。
图中带MFI字样的表示该连接方式需要硬件集成MFi芯片,做MFi认证。关于什么是MFi认证(苹果MFi认证(apple公司 “Made for iPhone/iPod/iPad”的英文缩写)是苹果公司(Apple Inc.)对其授权配件厂商生产的外置配件的一种标识使用许可。
)
可以分为三大类:
1.通过网络端口,建立Socket使用TCP/IP协议族进行通信。
天然支持多通道,想要几个通道就建几个socket就行了。它主要有三种方式,
(1)Wi-Fi连接。
优点:简单,不需要集成MFi芯片,只要对应的硬件有无线网卡,然后手机和硬件连接到同一个局域网中就可以使用socket通过网络协议通信了。
缺点:无线连接信号容易受到干扰,不太稳定,容易断开
(2)自建热点共享
需要先打开个人热点共享, 硬件进行热点接入,操作步骤较多,对用户来说学习使用成本较高,并且热点共享要求手机本身的数据移动网络是稳定的,在没有移动数据网络信号的地方,热点无法建立。
(3)NCM,就是把USB端口虚拟成标准的网络端口,然后手机和外设就能通过有线网络直连了,可以理解成手机和外设通过一跟网线连起来了,然后就可以用socket通过TCP,UDP进行通信了。
优点:有线连接,非常稳定,带宽足够;也不依赖移动网络信号;
缺点:需要集成MFI芯片并进行MFI认证,有一定门槛。目前苹果只提到可以在它自己的CarPlay使用,其他硬件并没有说禁止或者允许使用。如果硬件使用NCM跟iOS系统的App通信,可能通过MFI认证是有风险的。
2 .EAP (External Accessory Protocol )外部设备协议
这个是苹果推荐使用的外设连接方式。需要外设集成MFI芯片进行MFI认证。手机端开发相对简单,只要集成 iOS系统提供的一个框架ExternalAccessory.framework,并且在info.plist中配置好协议字符串(Supported external accessory protocols),当iOS 设备通过USB线或者蓝牙连接到对应硬件时,iOS系统会把符合MFI认证要求的外设抽象成了一个流对象,App通过指定的协议字符串来创建一个EASession类的实例来访问到该流对象,就能通过NSInputStream和NSOutputStream跟硬件件进行通信了。它有两种模式
(1)EASession的模式,它带宽相对较低,但是允许同时通过多个协议字符串创建多个会话,也就是说直接支持多个通道;
(2)Native Transport的模式
优点:带宽足够大,理论值是100MB以上,
缺点:不支持多通道,如果业务层需要支持多数据通道的话需要App自己进行通道的复用与拆分,并且Native Transport需要iPhone工作在USB host模式,硬件需要支持USB 模式切换。
关于如何使用EAP跟外部设备进行通信,可以参考苹果官方的Demo进行入门和学习。
3.BLE,低功耗蓝牙
iOS7.0以后才支持的连接方式。
优点:不需要集成MFI芯片做认证,功耗低,手机端开发也相对简单,集成iOS系统提供的CoreBluetooth.framework就行。
缺点:带宽很低,一般适合于只需要传输少量数据的场景。比如前两年非常火爆的各种所谓智能硬件,像智能水杯,智能体重计,运动手环等,都是采用这种连接方式。
参考链接:http://www.cocoachina.com/bbs/read.php?tid-1689738.html