iOS - App 与外设间的通信方式

简介: 1、前言一般 iOS 开发者做 App 开发大部分时候都是通过 Http(s) 请求跟后台服务器打交道,做一些信息展示和用户交互。很少涉及到去跟外部硬件设备连接的开发。随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的 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 蓝牙

目录
相关文章
|
6月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
224 3
|
6月前
|
移动开发 安全 数据安全/隐私保护
iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤
iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤
77 1
|
3月前
|
编解码 iOS开发
IOS上架APP Store时预览图尺寸
IOS上架APP Store时预览图尺寸
495 3
|
3月前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
175 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
3月前
|
开发工具 iOS开发
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
133 2
|
3月前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
137 0
|
6月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
383 0
|
3月前
|
iOS开发
解决IOS上架App Store后显示语言为英文的问题
解决IOS上架App Store后显示语言为英文的问题
79 0
|
6月前
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
76 0
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
|
6月前
|
大数据 测试技术 数据库
ios app性能分析
ios app性能分析
47 2