一般iOS开发者做APP开发大部分时候都是通过Http(s)请求跟后台服务器打交道,做一些信息展示和用户交互。很少涉及到去跟外部硬件设备连接的开发。随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的app被开发出来,用来跟硬件设备进行来连接,获取硬件相关信息展示或者发送指令控制硬件来提供服务。故本文就针对iOS的app如何跟外部设备进行连接通信这个问题跟大家交流一下。本文原创,欢迎转载,转载请注明出处,如有不正确的地方恳请各位看官指正。


      如上图所示,我把iOS App连接外设的常用方式总结了一下,可以分为三大类:
       第一类是通过网络端口,建立Socket使用TCP/IP协议族进行通信,天然支持多通道,想要几个通道就建几个socket就行了。它主要有三种方式,第一种方式是Wi-Fi连接,优点是:简单,不需要集成MFi芯片,只要对应的硬件有无线网卡,然后手机和硬件连接到同一个局域网中就可以使用socket通过网络协议通信了。缺点也很明显:(1)无线连接信号容易受到干扰,不太稳定,容易断开;(2)如果硬件使用的场合没有公共wifi,就需要手机自建热点共享,硬件进行热点接入,操作步骤较多,对用户来说学习使用成本较高,并且热点共享要求手机本身的数据移动网络是稳定的,在没有移动数据网络信号的地方,热点无法建立。
使用网络端口的第二种方式是USB热点共享,这个其实跟Wi-Fi中的热点共享非常类似,也不需要集成MFI芯片,区别就是USB线共享热点,走的是有线,不容易受到干扰,更稳定,而且iPhone可以边使用可以边充电;缺点也是操作步骤比较复杂,需要先打开个人热点共享;
使用网络端口的第三种方式是NCM,就是把USB端口虚拟成标准的网络端口,然后手机和外设就能通过有线网络直连了,可以理解成手机和外设通过一跟网线连起来了,然后就可以用socket通过TCP,UDP进行通信了。它的优点是:有线连接,非常稳定,带宽足够;也不依赖移动网络信号;但是它的缺点就是:需要集成MFI芯片并进行MFI认证,有一定门槛。更变态的是这么好的一种方式,目前苹果只提到可以在它自己的CarPlay使用,其他硬件并没有说禁止或者允许使用。如果硬件使用NCM跟iOS系统的App通信,可能通过MFI认证是有风险的。
关于如何使用Socket进行TCP、UDP连接,推荐github上的开源项目CocoaAsyncSocket(https://github.com/robbiehanson/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(https://developer.apple.com/library/ios/samplecode/EADemo/Introduction/Intro.html)进行入门和学习。

第三大类就是BLE,低功耗蓝牙,是iOS7.0以后才支持的连接方式。它的优点是不需要集成MFI芯片做认证,功耗低,手机端开发也相对简单,集成iOS系统提供的CoreBluetooth.framework就行。缺点是:带宽很低,一般适合于只需要传输少量数据的场景。比如前两年非常火爆的各种所谓智能硬件,像智能水杯,智能体重计,运动手环等,都是采用这种连接方式。

iOS连接外设的几种方式相关推荐

  1. iOS 连接外设的几种方式

        联系人:石虎 QQ:1224614774   昵称: 嗡嘛呢叭咪哄                          QQ群:807236138   群称: iOS 技术交流学习群 一.概念 ...

  2. iOS App 连接外设的几种方式

    原创作者: Max_Marry 文章地址: http://www.jianshu.com/p/852bf92c5c92 随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的 App ...

  3. android连接usb外设通讯_iOS App连接外设的几种方式

    一般iOS开发者做APP开发大部分时候都是通过Http(s)请求跟后台服务器打交道,做一些信息展示和用户交互.很少涉及到去跟外部硬件设备连接的开发.随着近年来车联网和物联网的兴起,智能家居和智能硬件的 ...

  4. iOS 蓝牙开发(二)iOS 连接外设的代码实现

    上一篇文章介绍了蓝牙的技术知识,这里我们具体说明一下中心模式的应用场景.主设备(手机去扫描连接外设,发现外设服务和属性,操作服务和属性的应用.一般来说,外设(蓝牙设备,比如智能手环之类的东西),会由硬 ...

  5. JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取

    创建连接对象的三种方式 //第一种方式Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/m ...

  6. 动态连接库的两种方式

    动态连接库的两种方式? 答案:调用一个DLL中的函数有两种方法: 1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样.这需 ...

  7. php mysql 连接方法 对比_Mysql实例php连接MySQL的两种方式对比

    <Mysql实例php连接MySQL的两种方式对比>要点: 本文介绍了Mysql实例php连接MySQL的两种方式对比,希望对您有用.如果有疑问,可以联系我们. MYSQL数据库记录一下P ...

  8. C# 连接 Oracle 的几种方式

    C# 连接 Oracle 的几种方式 一:通过System.Data.OracleClient(需要安装Oracle客户端并配置tnsnames.ora) 1. 添加命名空间System.Data.O ...

  9. ADB——连接手机的三种方式

    ADB--连接手机的三种方式 有USB连接 硬件状态正常. 包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好. Android 设备的开发者选项和 USB 调试模式已开启. 可 ...

最新文章

  1. 读游戏之旅-我的编程感悟:难得的休闲读物
  2. wxWidgets:wxDropFilesEvent类用法
  3. 解决DeferredResult 使用 @ResponseBody 注解返回中文乱码
  4. 饿了么EMonitor演进史
  5. Android 获取本地外网IP、内网IP、计算机名等信息
  6. C++文本文件操作和二进制文件读写
  7. Android应用中Back键的监听及处理
  8. SpringMVC中controller的跳转
  9. 编程过度防御?只有缺乏自信的程序员才会这样做
  10. 德鲁克:终生难忘的7堂课
  11. Boost 连接库的命名含义
  12. 2018年版计算机技术类北大中文核心期刊目录
  13. Python----chardet模块的使用方法
  14. html鼠标悬停文字变颜色,鼠标悬停,文字颜色逐渐改变是怎样实现的??
  15. oracle增加字段为主键自增_Oracle新增自增一的主键字段和赋值代码
  16. 优秀logo,最基础的设计技巧(三)
  17. 树结构——2-3树图解
  18. 这是一篇有温度的NLP秋招面经
  19. c#程序设计实训报告心得体会_C#程序实际实训总结
  20. git - - - .gitignore

热门文章

  1. KY-RTI分布仿真技术:第九章 综合演示
  2. 突破隔离合同线上签—电子签名的用武之地
  3. Velodyne Lidar公布自动驾驶技术世界安全峰会的议程
  4. Amazone S3 生成公网链接
  5. 数据结构 - 图的基本操作 深度和广度遍历
  6. 民航计算机初级职称有哪些,各系列专业职称资格分类一览表
  7. 带有执行环境的函数 - 闭包
  8. 我和一个“婊子”不能不说的……
  9. web前端--弹窗广告实现
  10. 首单怎么让用户掏钱,只能降价吗?|用户心理学