这个设计指导文档面向的是使用蓝牙技术与苹果产品通信的硬件配件,包括Mac,iPhone,iPad和iPod。
为了与当前和未来的苹果产品兼容,蓝牙配件应遵循这个文档中的规范。一个苹果产品需要蓝牙配件上的特性可用性遵循这个文档内的规范。
这个文档使用名词“苹果产品”涉及Mac(运行OS X的苹果电脑)和iPod,iPhone和iPad。在后一类产品中,那些运行iOS(苹果的手机操作系统)的产品也被称为“iOS设备”。这个文档内的规范专门为iOS设备设计,因此只能应用于这些产品。
这个文档内的规范如下:
苹果蓝牙开发组的工程师会监控邮件清单并尝试回答你的问题。请先搜索档案,看一看你的问题是否已经被解决。lists.apple.com/mailman/listinfo/bluetooth-dev.
集成蓝牙技术的配件需要服从这个章节规定的需求。
每个与苹果产品兼容的配件应支持蓝牙核心规范2.1+EDR或更高版本。这个规范引入了重要的加密特性——加密简单配对,以及扩展呼叫应答。
增加数据速率特性在蓝牙2.0规范内引入,允许配件的通信更有效。每个配件可以在下列情况下使用EDR:
对所有手持设备来说,降低功耗都是至关重要的。因此,每个与苹果产品相关的配件:
与苹果产品兼容的配件总是尽可能使用嗅探模式,特别是在只有很少或没有数据需要通过蓝牙链接传输时。除了功耗的增强,嗅探模式优化了与WIFI之间的天线共享。
嗅探模式参数由用户模式和蓝牙profile指定。苹果产品期望配件在一个特定情况下以合适的参数请求嗅探模式。如果配件不能发送请求,苹果产品会发送一个嗅探模式请求。当苹果产品发送一个嗅探模式请求时,远程设备应无条件地接受这个请求以及参数。
每个与苹果产品兼容的配件应该:
在一个蓝牙连接内,一个设备是主,另一个设备是从。主设备可以有多个从设备,因而被称之为微微网。主设备也能作为别的主设备的从设备,创建一个分布网。
有一种复杂的场景是由于设备不得不在两个微微网之间切换,因而浪费了可用的带宽。因而管理网络拓扑对最大化性能来说很重要。苹果产品可能请求一个规则切换,取决于它当前的拓扑,远程设备应接收这个请求。苹果产品也可以拒绝一个与拓扑相关的规则切换。最不理想的拓扑可能降低音频质量和用户体验。
只有当需要维持多个连接,例如蓝牙或WIFI,苹果产品将请求或否决规则切换。因此,如果苹果产品不需要做主设备,它将同意一个规则切换。配件的行为也一样,只在有合理原因时尝试成为主设备。
如果系统拓扑没有要求,配件不应总是默认请求成为主设备。如果之后配件需要成为主设备以维持多个连接,它应请求成为主设备。
每个与苹果产品兼容的配件应在它的扩展呼叫请求包内提供如下信息:
在蓝牙发现过程期间,苹果产品会显示被发现配件的易记名称。在蓝牙规范2.1版本之前,苹果产品不得不与配件建立连接且发起一个远程名称请求,这样会消耗能量,占用天线和用户的时间。蓝牙版本2.1引入了扩展请求应答特性,使得一个配件将它自身的名称和其它信息作为呼叫应答的一部分,这样增加了发现过程的速度和效率。
每个与苹果产品兼容的配件应该:
加密简单配对极大增强了加密且它是一个在蓝牙规范2.1引入的强制加密特性。为了保护设备不受中间攻击,数值加密辅助模式无论何时都应该可用。见蓝牙核心规范版本2.1+EDR的卷1,章5.4。
苹果知识库support.apple.com/kb/ht3647提供了一个iOS设备支持的所有蓝牙profiles。蓝牙规范是设计与iOS产品兼容的配件的第一步。下列章节增加了许多profile的说明和需求,帮助配件开发者获取卓越成果。
每个与苹果产品兼容的配件应该:
设备ID profile使苹果产品识别远程配件的实施。这是有价值的信息,且能在与远程配件通信时被用来桥接替代蓝牙规范的解释。因此在设备ID记录区内的信息是很重要的,用来唯一地标识安装启用。
例如与汽车套件适配的蓝牙设备,相同的汽车套件可能进入两种不同的汽车型号。理想状态下,两个汽车套件应拥有不同的产品ID。然而,只要他们有可标识的硬件、软件和特性,有相同的产品ID则是可接受的。如果他们的实现都不同,他们应拥有不同的产品ID。配件也可使用第二设备ID以唯一化地标识产品ID或模块编号。
如果配件支持蓝牙免提Profile规范,这个规范应不低于版本1.5。
远程配件能使用蓝牙免提Profile作为电话连接。为了获取最好的用户体验,远程配件应支持规范中的如下可选特性。
每个与苹果产品兼容且支持HFP的配件应该:
与苹果产品兼容且支持HFP的配件应使用指示器事件记录且不要执行重复的状态轮询。
苹果产品支持HFP版本1.5上所有强制和可选的指示器(服务、呼叫、呼叫启动、呼叫保持、信号、漫游、充电)。为了使AT+CIND?命令的非重要的状态轮询最小化,远程配件应发送AT+CMER命令,以使能指示器事件记录。当一个指示器的状态改变时,苹果产品将发送一个+CIEV事件。远程配件应根据HFP规范,使用AT+CIND?和AT+CIND?命令以请求初始化状态。
每个与苹果产品兼容且支持HFP的配件应该:
苹果产品支持远程配件和iOS(音频网关)配件发起的语音识别。
当回声消除和降噪被实施在免提配件的本地时,它应通过发送一个AT+NREC命令给苹果设备的方式以关闭回声消除和降噪,描述于蓝牙免提Profile规范版本1.5的章节4.24。
苹果产品支持回声消除和降噪;这些特性默认是激活的。如果免提配件也有回声消除和降噪,它需要关闭在苹果产品上的这些特性(音频网关)。这避免了由于两次音频处理产生的音频质量的非必要性损伤。
每个与苹果产品兼容且支持HFP的配件应支持描述于蓝牙免提Profile规范版本1.5的同带铃声。如果用户在苹果产品上设置了铃声,相同的铃声应当也能在免提配件上被听到。
每个与苹果产品兼容且支持HFP的设备应:
eSCO包类型提供了重传包;传统的SCO包不能重传。这提升了音频质量和用户体验。eSCO包类型2-EV3和3-EV3在包之间提供了巨大的时间间隔,其提升了WIFI性能且允许其他同期的蓝牙连接发送数据。苹果强烈建议为SCO连接使用2-EV3和3-EV3包。使用HV3包是强烈不推荐的。HV3包需要更多链接时间且不允许音频包的重传,其影响了有RF干扰时的音频性能。
每个与苹果产品兼容且支持HFP的配件应支持宽频语音连接,其描述于蓝牙免提Profile规范的章1.6。如果宽频语音连接被支持,它应支持T2链接参数设置。
所有运行在iOS5或更高版本上的iOS设备支持宽频语音。如果iOS设备和配件都支持宽频语音,那么宽频语音链接奖杯用在eSCO连接上,例如蜂窝电话、FaceTime和Siri。
每个与苹果产品兼容且支持MAP的配件应该:
所有运行iOS6.0以及更高版本的iOS设备都支持MAP。
为了支持音频/视频远程控制Profile,与苹果产品兼容的配件应支持这个章节中列出的按键和操作。
每个与苹果产品兼容且支持音频/视频远程控制Profile的配件应使用分离的按键命令以播放和暂停,而不是翻转播放或暂停状态。
苹果产品支持Pass Through命令中的如下operation_IDs:
每个iOS设备支持AVRCP target的重复和随机播放模式。一个AVRCP控制器可使用SetPlayerApplicationSettingValue以设置iOS设备的值以及GetPlayerApplicationSettingValue以读取一个值,描述于蓝牙音频/视频远程控制Profile规范版本1.4的章6.5.4和6.4.3。
每个与苹果产品兼容且支持AVRCP profile的配件应注册通知且不应重复轮询以决定苹果产品的状态。
每个iOS设备支持在AVRCP target的设备上注册通知,描述于章6.7。命令RegisterNotification和GetPlayStatus支持这些通知:
每个与苹果产品兼容且支持AVRCP profile的配件应支持绝对音量,描述于章6.13。
每个处于AVRCP controller规则的iOS设备支持音量处理。
每个与苹果产品兼容且支持浏览(在控制规则内)的配件应该:
当前只有内置音乐app支持浏览。当在播放器之间切换时,一个EVENT_AVAILABLE_PLAYERS_CHANGED通知和一个EVENT_ADDRESSED_PLAYER_CHANGED通知将被生成。然后UI需要看着被列出的播放器的特性位掩码以决定当前的浏览是否可用。
所有不低于iOS6.0的iOS设备都支持AVRCP浏览。
一个运行在iOS设备上的音频应用程序可以使用iOS媒体播放器架构APIs以提供与当前音频流有关的元数据。iOS设备使用AVRCP提供这些元数据给配件。更多信息,参考苹果媒体播放器框架文件的MPNowPlayingInfoCenter。
每个与苹果产品兼容且支持A2DP的配件应满足蓝牙增强音频分配Profile版本1.2的需求,苹果的额外需求在这个章节中给出。
定义在A2DP规范的章4.3.2的SBC编解码的专用信息元素中,可用于苹果产品的如下表:
iOS设备支持非强制编解码MPEG-2/4 AAC,定义于A2DP规范版本1.2的章4.5。除了SBC,配件应使用AAC编解码,因为它在给定比特率时提供了更高的音质。
注意,如下规范提供了苹果实施MPEG-2/4 AAC编解码的详细信息。如有冲突,以A2DP规范为准。
AAC媒体净荷格式,定义于A2DP规范的章4.5.4,使用LATM格式化,其定义于RFC 3016的章节4。应用在包的域的注意点如表2-3。
这个章节描述了配件如何区分从一个iOS设备来的多种音频内容且使用这个信息以决定重放行为。
一个配件能接收从iOS设备来的音频数据,通过两种蓝牙profile中的任意一种:
iOS设备在挑选所使用的通道时,依据的是音频内容的用途。一个音频路径被创建以用在双向通信(例如FaceTime的手机呼叫),其总是使用HFP(eSCO)通路以发送音频数据。音乐和类似的内容使用A2DP通路。如果被定义的通路缺席了,音频重放将默认选择iOS设备。
大多数通过HFP(eSCO)通路发送的音频内容需要双路连接。例如HFP被用在(且不限于)蜂窝电话,FaceTime和语音邮件。
对任何正在通过HFP通路接收的音频内容而言,建议配件的扬声器和麦克风专门用于蓝牙链接且不应处理任何其他音频内容。
通过A2DP profile传输的音频内容广义上分为如下两类:
通过添加对AVRCP Profile版本1.3及以上的支持,近似音乐的内容能与系统音效区分开。AVRCP允许配件使用通知以关注iOS设备的音频重放状态。
当一个iOS设备初始化一个在A2DP通道上的音频重放以播放音乐内容,AVRCP通知EVENT_PLAYBACK_STATUS_CHANGED被发送,用来指示重放状态已经改变为播放状态。见AVRCP规范版本1.4的6.72章。这指出了通过A2DP profile的音频数据包含音乐。当一个iOS设备初始化一个在A2DP通道上的音频重放以播放系统音效,不会发送AVRCP通知。
配件应基于A2DP通道上的音频内容调整它的音频通路行为。
如果音频数据包括音乐,期望的是配件的扬声器被专用于从蓝牙链接来的音频数据且任何其他音频重放被暂停。如果音频数据包括系统音效,期望的是配件能按需渲染音频。如果配件从不同的源播放音频,系统音效数据能与当前重放的内容混合;暂停设备当前正在播放的音频重放不是必须的。
蓝牙4.0规范引入了蓝牙低功耗,一个新的无线技术,目标是电池资源受限的配件。如果支持蓝牙低功耗,配件应遵循这个章节的指导。
配件应实施在蓝牙4.0规范的volume 3 Part C 章2.2.2.3的外设规则,或章2.2.2.1的广播规则。
配件应在所有三个广告通道内(37,38,39)的每个广告事件上广播,见蓝牙4.0规范的volume 6 Part B 章4.4.2.1。
配件应使用如下广告PDU中的一种:
ADV_DIRECT_IND不应被使用。见蓝牙4.0规范 volume 6 Part B 章2.3.1。
由配件发送的广告数据应包括如下说明,其描述于蓝牙核心规范补充 Part A:
在例如配件需要减小功耗,或并不需要把所有广告数据填入广播PDU的情况下,配件应将本地名称和TX功率等级数据放在SCAN_RSP PDU中。注意,苹果产品可能不是总是完成主动搜索,这取决于它的状态。
首要服务应总是在广播PDU中被广播。次要服务不应被广播。如果广播PDU内的空间受限,配件的非意义重大的首要用例也可省略。
SCAN_RSP PDU内的广播数据和扫描应答数据应符合蓝牙4.0规范 volume 3 Part C 章18的格式:以长度域开头,随后是AT类型和AD数据。
配件的广告间隔应认真考虑,因为它影响了发现时间和连接性能。对一个电池供电的配件来说,电池资源也应被考虑。
为了被苹果产品发现,配件应首先使用推荐的20ms广告间隔并持续至少30秒。如果在初始的30秒内未被发现,苹果建议使用如下的一个更长的间隔以增加被苹果产品发现机会:
注意:更长的广告间隔通常意味着更长的发现和连接时间。
配件有责任使用用于低功耗连接的连接参数。配件应在合适的时间发送一个L2CAP连接参数更新请求,用以请求与其适配的连接参数。见蓝牙4.0 Volume 3 Part A 章4.20获取更多信息。如果连接参数不遵循如下所有规则,连接参数请求会被拒绝:
如果蓝牙低功耗HID是一个配件的已连接的服务之一,苹果产品可以接受连接间隔降低到11.25ms。
苹果产品在外设提出连接参数特征时不会读取或使用这些参数,见蓝牙4.0规范 Volume 3 Part C 章12.5.
配件应有能力解决所有状态下的可解决私有地址。由于隐私原因,苹果产品将使用一个随机的设备地址,参考蓝牙4.0规范 Volume 3 Part C 章10.8.
配件不需要特别的许可,例如配对、认证或加密以发现服务和特征。它只在访问一个特征值或一个描述值时需要特别的许可。见蓝牙4.0规范 Volume 3 Part G 章8.1 15段。
配件不应请求配对,直到一个ATT请求被使用非有效认证错误代码拒绝。见蓝牙4.0规范 Volume 3 Part F 章4获取详细信息。
如果为了加密原因,配件需要与中心设备有绑定关系,外设应使用非有效认证错误代码拒绝ATT请求。结果是,苹果产品启用重要加密过程来处理。
类似地,如果iOS设备作为中心设备和一个GATT服务器,它可以使用非有效认证错误码拒绝一个ATT请求。配件应初始化配对的加密过程作为应答。
配对可能需要由苹果产品决定是否使用用户认证。一旦一个配件与苹果产品配对了,它应保留中心设备和外设的分配钥匙已备未来使用。如果配对不被需要了,配件应删除这两个钥匙。
为了在设计配件时包含认证,配件应支持MFi程序规定的认证。为了获取更多有关MFi的信息,见developer.apple.com/programs/mfi.
在交换MTU请求握手时,iOS设备支持和请求的MTU大小要比默认的MTU大。见蓝牙4.0 Volume 3 Part F 章3.2.8. 配件可以使用这个机制以协商更大的MTU大小。
配件应实施设备名称特征,参考蓝牙4.0规范 Volume 3 Part C 章节12.1。设备名称特征应该是可写的。
如果配件有能力在它的生存期间内更改它的服务,它应实施服务更改特征。
苹果产品可以使用服务更改特征以决定它释放能依赖之前从设备读取的信息。见蓝牙4.0 Volume 3 Part G 章7.1。
配件应实施设备信息服务。这个服务的服务UUID不应在广告数据内被广告。应保护如下特征:
对iOS 7 来说,任何iOS产品使电池服务、时间服务和苹果通知中心服务(ANCS)对配件来说都是可用的。时间服务支持当前时间和本地时间信息特征。如果当前时间改变了,服务不提供一个“可调原因”。ANCS使用7905F431-B5CE-4E99-A40F-4B1E122D00D0作为他的UUID。
这些服务不能再连接后被立即视为可用,且当服务变得可用时,配件应支持特征值指示服务更改参数(见蓝牙4.0规范 Volume 3 Part G 章7.1)以接受通知。iOS设备一旦与一个配件连接,它将维持这个连接且使用一个可用的服务。
对iOS 6.0来说,应用可以产生GATT服务器的服务和特征,这样iOS设备使配件成为可能。本节的建议适用于此种情况下的配件。
如下服务由iOS内部支持且不应被第三方iOS应用产生:
iOS设备实施了GAP服务更改特性,因为数据库内容能在任何时候改变。因此配件应支持这个特征的特征值指示,且一旦受到指示,将相应的缓存无效化。见蓝牙4.0规范 Volume 3 Part G 章7.1。
配件应最小化ATT/GATT请求和命令的使用且在必要的时候发送。例如,当配件正在寻找特定的服务时,不要使用GATT发现所有服务。取而代之的是使用服务UUID来发现首要服务。更少的空中时间等价于更少的功率消耗,还有配件和苹果设备间更好的性能。
当第三方iOS应用发现配件上的服务时,如下服务在iOS内部被调用且从下列被发现服务中筛选出:
配件应具有足够鲁棒性以温和地处理任何错误。如果应用自己的服务不在前台且没有权利在后台运行,配对和特征值的读写可能失败。
如果ATT预写请求被使用,所有队列中的特征被包含在相同的GATT服务中。
本章描述了苹果专属的蓝牙命令,用以扩展超出标准蓝牙Profile的配件能力。
为了使能苹果专属特性,配件必须支持“4.1 HFP Command AT+XAPL”,他能提供配件所支持的特性的精确信息。苹果设备将使用由此命令发送的信息以使能或禁止定制命令。
配件在成功建立HFP服务级连接后必须发送AT+XAPL命令给苹果设备。配件在发送下列任何额外的苹果专属命令之前,应首先发送一个AT+XAPL命令。
描述:由一个配件使能定制AT命令。
发起者:蓝牙配件
格式:AT+XAPL=vendorID-productID-version, features
参数:
例如:AT+XAPL=ABCD-1234-0100,10(支持电池记录和Siri状态)
应答:+XAPL=iPhone, feature
任何免提式蓝牙耳机配件都能在iOS设备状态条上以通知图标的形式向用户展示它的电量。这个特征在所有支持免提Profile的iOS设备上都支持,包括iPhone,iPod touch和iPad。
耳机电量指示由两个苹果专用蓝牙HFP AT命令实施,“4.1 HFP Command AT+XAPL”和“5.1 HFP Command AT+IPHONEACCEV”。
描述:记录一个耳机状态变化
发起者:耳机配件
功能:AT+IPHONEACCEV=Number of key/value pairs, key1, val1, key2, val2, …
参数:
例子:AT+IPHONEACCEV=1,1,3
每个配件想要使用Siri必须支持“4.1 HFP Command AT_XAPL”。iOS设备将使用由这个命令发出的信息以使能或禁止与Siri相关的定制命令。
为了接收Siri状态事件,配件必须在与iOS设备成功建立HFP服务级连接(SLC)后发送AT+XAPL命令。配件在发送任何如下描述的额外的Siri定制命令之前手机发送一个AT+XAPL命令。
在建立一个HFP Profile连接之后,配件能决定Siri是否可用且使能一个iOS设备的Siri。它也能接收Siri状态的更改。如果Siri是关闭的,取而代之的是激活语音控制。
配件应在成功建立HFP Profile连接后切发送了一个AT+XAPL命令后发送如下命令:
描述:AT命令以获取Siri状态信息
发起者:配件
格式:AT+APLSIRI?
应答:+APLSIRI: value
value的定义:
例如:+APLSIRI: 1(Siri可用且使能)
在初始化已经完成后,iOS设备会在Siri状态改变后发送如下通知给配件。这个信息只在下列情况下被提供,那就是配件与iOS设备连接后至少发送了1此请求Siri状态(发送AT+APLSIRI?),也可以是iOS设备已经记录过Siri是可用的且以使能。
描述:Siri状态改变时的未被请求事件通知
发起者:iOS设备
格式:+APLSIRI: value
value的定义:
一旦在配件和iOS设备之间建立了对Siri的支持,Siri会话能从任意一方启动。
为了初始化一个Siri会话,配件必须使用语音识别命令AT+BVRA(定义于蓝牙免提Profile规范 v1.6 章4.25)。HFP Profile必须连接且SLC必须存在。
配件应使用如下命令序列:
在Siri会话激活时,配件必须使用户持续交谈且以当前上下文提出问题。为了这么做,配件必须能够发送一个AT+BVRA=1命令给iOS设备,甚至在Siri已经被激活且在+BVRA:0被收到之前。图6-2展示了Siri从配件上触发时的交互概览,运行中的会话被延续了2次,且一旦Siri完成了,设备丢弃了会话。
如果配件支持语音识别命令,iOS设备发送一个+BVRA事件以指示Siri会话的开始。配件必须使能语音识别的支持且在特性应答时指出,详细描述见蓝牙免提Profile v1.6 章4.34.1。特别地,HFP Profile必须被连接,SLC必须存在,且语音识别激活(Bit 3)必须在AT+BRSF命令中被使能。如果配件支持语音识别激活,iOS设备将不为Siri会话使用虚拟呼叫功能。
配件应期待如下命令序列:
一旦Siri会话在运行了,配件必须有能力通过发送一个AT+BVRA=0命令给iOS设备以结束会话。图6-4展示了一个由配件结束正在运行的Siri会话的例子。配件应只结束一个活跃会话,作为用户动作导致的直接结果。
Siri眼睛自由模式是一个特性以控制Siri应答,包括显示信息,且能按需开启或关闭。Siri眼睛自由模式只支持蓝牙功能的车载娱乐系统且不能用在任何其他配件。
iOS设备将监听HFP AT命令AT+APLEFM以使能或关闭眼睛自由模式。
这个命令被iOS设备用来修改Siri应答,包括可视信息或所需的用户交互。合适的音频反馈和语音命令将开放给客户,其基于Siri初始化的用户事件。
眼睛自由模式默认是关闭的。一旦配件已经使能眼睛自由模式,它在由配件初始化的所有后续的Siri会话中被使能,直到配件关闭它或蓝牙连接被断开。
描述:一个配件发送这个命令以通知一个iOS设备选择眼睛自由模式的状态。
发起者:配件
格式:AT+APLEFM=value
应答:OK
value的定义:
例子:AT+APLEFM=1
配件通过Siri会话发送给iOS设备的音频应当为了语音识别优化,而不是为了人类知觉(例如蜂窝电话通话)。
需要采用音频喜好滤波器以移除回声或反馈噪声
为了给Siri输入提供最好的音频质量,配件必须明确如下建议:
配件在使用Siri时必须支持16KHz宽频语音音频,为的是更好的音频质量和语音识别性能。见蓝牙免提Profile v1.6 获取更多有关宽频语音的内容。窄带音频信号(8KHz)是支持的但不推荐。
为了在使用Siri时获取最好的性能,配件设计应参照这些指导:
第三方配件能使用iPod配件协议(iAP)以访问iOS设备的增强特性。其中一个特性允许第三方iOS应用通过iOS扩展配件框架进行加密通信。更多有关扩展配件框架的信息见http://developer.apple.%20com/library/ios/#featuredarticles/ExternalAccessoryPT/Introduction/Introduction.html。
为了将iAP组合进配件的设计,配件开发者必须是苹果MFi许可程序的成员之一且集成专门的MFi芯片到配件中。为了获取更多有关MFi的信息,见developer.apple.com/programs/mfi。