研究材料:

Accessory Interface Specification for Apple Devices.pdf

iPod+Authentication+Coprocessor+Spec+2.0C+R1

如果需要更详细的协议说明,可以下载MFI Accessory Firmware Specification PDF

(文档来自苹果授权方,如有侵权,请告知,本文不宜转载)

Accessory Interface Specification for Apple Devices.pdf

这个文档说明了苹果外设的认证过程、支持的认证模式、外设类型和通信协议,也可以通过查看MFI Accessory Firmware Specification文档了解更加详细的协议内容,比如iAP2的LINK建立过程如下图:

iPod+Authentication+Coprocessor+Spec+2.0C+R1.pdf

这个文档是苹果MFI认证芯片的datasheet,MFI芯片基于I2C通信接口,例如下图的I2C地址选择:

Accessory端如何做bluetooth的验证呢?

我们以一个场景来描述,比如MFI认证的蓝牙设备连接上支持iAP2的iOS设备之后,可以直接拉起一个APP程序到前台,那么我们该怎么做呢?

1、蓝牙设备的Service Discovery Protocal(SDP)必须要支持;

2、SDP的Maximum Transmission Unit(MTU)必须最少支持672bytes,这个可以看是否支持MTU协商;

3、不支持SDP消息记录分片;

4、Extended Inquiry Response(EIR)必须要被支持;

5、service UUID 0x00000000DECAFADEDECADEAFDECACAFE必须在SDP和EIR中被申明;

6、EIR设备名必须和Accessory设备的MFI认证时的IdentificationInformation的名字一致

以上是蓝牙部分需要满足的协议条件,然后接下来就是驱动认证芯片,并完成通过蓝牙通道做MFI认证,第一张图已经说明了验证的流程,如果想完成设备连接上后,直接打开某一个APP的功能,需要设备发送RequestAppLaunch消息到iOS设备上,通过Accessory Interface说明文档的26.3.1的RequestAppLaunch数据格式,我们知道需要携带一个参数AppBundleID,这个参数类型是utf8,e.g. com.kuili.applaunch,这里苹果推荐使用反DNS格式

(对于iAP2流程的link control session和seesion的开发过程这里忽略,官方例子)

支持MFI iAP2的手机端:

Info.plist中增加如下内容:

        <key>UISupportedExternalAccessoryProtocols</key><array><string>com.example.apple-samplecode.data</string><string>com.kuili.applaunch</string></array>

注意Info.plist中的一个字符串正是accessory设备通过RequestAppLaunch发送过来的AppBundleID

程序中需要引用外部附件框架:

ExternalAccessory.framework

开始通信:

创建一个EASession,数据通过NSInputStream和NSOutputStream读写流数据。

读取设备信息:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{NSMutableString *info = [[NSMutableString alloc] initWithCapacity:1024];EAAccessoryManager *manager = [EAAccessoryManager sharedAccessoryManager];NSArray<EAAccessory *> *accessArr = [manager connectedAccessories];for (EAAccessory *access in accessArr) {for (NSString *proStr in access.protocolStrings) {[info appendFormat:@"protocolString = %@\n", proStr];}[info appendFormat:@"\n"];[info appendFormat:@"manufacturer = %@\n", access.manufacturer];[info appendFormat:@"name = %@\n", access.name];[info appendFormat:@"modelNumber = %@\n", access.modelNumber];[info appendFormat:@"serialNumber = %@\n", access.serialNumber];[info appendFormat:@"firmwareRevision = %@\n", access.firmwareRevision];[info appendFormat:@"hardwareRevision = %@\n", access.hardwareRevision];[info appendFormat:@"dockType = %@\n", access.dockType];}dispatch_async(dispatch_get_main_queue(), ^{label.text = info;});
});

与外设通信:

EAAccessoryManager *manager = [EAAccessoryManager sharedAccessoryManager];
NSArray<EAAccessory *> *accessArr = [manager connectedAccessories];
if (accessArr.first) {EASession *session = [[EASession alloc] initWithAccessory:accessArr.firstObject forProtocol:@"com.kuili.applaunch"];if (!session) return;NSInputStream *inputStream = [session inputStream];if (!inputStream) {// LOG inputStream = null}inputStream.delegate = self;[inputStream open];
}

以上iOS代码片段引用了以下博客链接:http://www.jianshu.com/p/8f69c9c4e71e

苹果MFI bluetooth认证开发过程:iDevice和accessory相关推荐

  1. EAAccessory iphone与经过苹果MFI授权认证的硬件通讯

    首先,要拿到苹果公司的MFI认证,然后要定义至少一种命令协议,让配件支持,Apple 并不负责提供协议的注册机制,制造商必须自己决定支持哪些协议,为了防止命名冲 突,协议的名字是反向的 DNS 字符串 ...

  2. 18awg线材最大电流_小米生态链拉车线:2.4A大电流,苹果MFi认证,高速充电不断裂...

    对于经常使用苹果手机的用户来说,不随时准备几根充电线好像总感觉差点什么,苹果官方的电源线不耐用早已是公认的事实,其实最主要的还是因为苹果手机电池容量低,相对来说充电次数要比安卓手机多一些,电源线使用频 ...

  3. 什么是苹果MFi认证

    "Made for iPod","Made for iPhone" and "Made for iPad" 是指分别为连接iPod,iPho ...

  4. 最近发现有很多人一直在问苹果ID双重认证怎么关闭。

    最近发现有很多人一直在问苹果ID双重认证怎么关闭? 其实我想说大家都粗心了,双重认证是和ios版本没有关系的,无论什么IOS版本开通的双重认证都是可以关闭的. https://support.appl ...

  5. 深信服AC苹果用户上网认证失败,认证mac地址和用户终端mac地址不一致

    环境: 深信服V13.0.47 苹果手机 IOS14 1个账号绑定2个终端上网 问题描述: 深信服AC苹果用户上网认证失败,认证mac地址和用户终端mac地址不一致,昨天认证成功,今天出现再认证,认证 ...

  6. 苹果MFI认证apple: OTS,TDMA,OTA认证费用及申请基本流程

    <苹果Apple公司电源指标测试,OTA,TDMA测试是什么测试要求和标准>http://www.pinzhi.org/thread-655-1-1.html 苹果apple OTS,TD ...

  7. 【ATS】苹果传输数据ATS认证究竟是什么?

    我用的版本是ATS7.11.系统版本是用最新的ios13.2.1 定义 ATS旨在分析通过UART.USB和蓝牙传输传输的iAP流量.通过USB和无线(蓝牙和Wi-Fi)传输的CarPlay流量.通过 ...

  8. IPhone MFI蓝牙认证分析

    一.开发项目:蓝牙解码枪 公司近期立项开发蓝牙解码枪项目,该项目通过解码枪终端扫描解码,然后通过蓝牙将数据传送到手机(基于安卓,IOS系统).目前已经完成了安卓设备的APP开发工作,支持大多数的主流安 ...

  9. 苹果开发者账号认证(五步超简单)

    在 Apple Developer 上,找到账户页面,登录需要申请的AppleID账号,然后第二项找到APPLE DEVELOPER PROGRAM ,看到这个选项的状态是灰色的,下面还有一行小字 B ...

  10. android ac充电模式,出行必备!这才是充电宝正确的打开方式,苹果安卓一起充...

    原标题:出行必备!这才是充电宝正确的打开方式,苹果安卓一起充 出门在外三大宝,钱包.手机.充电宝! 手机钱包自不必说 充电宝就很让人头疼了 出门时想着这么大.又重,充电又慢 还不定安全,算了,不带了 ...

最新文章

  1. php 断点续传,php支持断点续传的文件下载类(附源码)
  2. javascript window.open
  3. centos7查看当前使用的redis的版本信息命令
  4. 线程池拒绝策略-RejectedExecutionHandler
  5. Windows 7安装Oracle 10g的方法
  6. 如何在Linux下加载移动硬盘和光驱
  7. 理解密码学中的双线性映射
  8. 通州区机器人比赛活动总结_机器人科技活动总结.doc
  9. 外接键盘Win键不能的使用问题以及FN键的使用
  10. MySQL 清除表空间碎片
  11. 网络安全竞赛C模块批量拿值脚本
  12. ​​什么是图形工作站?我们日常接触的计算机类别
  13. js实现外链访问劫持代码 可劫持百度快照
  14. Java 微服务架构
  15. Github官网进去慢的解决办法
  16. Kafka服务器命令总结
  17. 如何部署一台云服务器并且和域名绑定
  18. Excel文件加解密-POI
  19. jackson jdk版本对应关系_Jackson:10分钟弄明白Jackson
  20. ant编译警告处理:主版本 52 比 51 新,此编译 器支持最新的主版本。

热门文章

  1. 打开本地html加载网页慢,电脑检查网速正常但打开网页慢如何解决
  2. EDM营销解读[转载]
  3. js保留2位小数(且四舍五入)
  4. 怎样清理计算机空间,电脑清除缓存,怎么清除电脑内存垃圾
  5. DNN常见激活函数与其求导公式及来源
  6. Android使用adb截屏
  7. Callnovo客诺人采访Hilario Linsao :优质平台成就优秀人才
  8. CPU使用率查看方法
  9. 企业邮箱能帮企业带来哪些好处?
  10. C#(0x8007000B)