IOS:后台蓝牙低功耗(BLE)扫描规则

7

在网上花了几个小时后,我找不到任何关于IOS使用背景BLE扫描规则的文档。

由于无法在IOS上设置扫描窗口,因此我正在寻找苹果定义的规则,当IOS在后台扫描时会使用这些规则。

背景

我正在开发一款可穿戴外设,当手机与其距离太远时,它可能会断开连接。目标是在外设靠近手机时快速重新连接(少于5秒)。由于外设有电池限制,因此我不能永久每20ms广告一次,因此我正在寻找一种聪明的方法来重新连接我的外设和手机。

如果我知道后台扫描模式的工作原理,我将能够定义一个智能广告间隔以节省电池。

用例

如果我的外设每1285ms广告一次,那么在10分钟内,在IOS应用程序后台模式下发现它需要多长时间?

2个回答

5

我不确定您的问题是什么。

我想您已经阅读了苹果公司的“Apple产品蓝牙配件设计指南”?

https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf

在其中,他们陈述:
3.5 广告间隔
应仔细考虑配件的广告间隔,因为它影响了发现时间和连接性能。对于电池供电的配件,还应考虑其电池资源。
要被 Apple 产品发现,配件应首先使用推荐的 20 毫秒广告间隔至少 30 秒钟。如果在最初的 30 秒内未被发现,则 Apple 建议使用以下一种较长的间隔之一,以增加被 Apple 产品发现的机会:
152.5 毫秒 211.25 毫秒 318.75 毫秒 417.5 毫秒 546.25 毫秒 760 毫秒 852.5 毫秒 1022.5 毫秒 1285 毫秒
注意:较长的广告间隔通常导致更长的发现和连接时间。
发现 BLE 设备后,iOS 将通知正在查找该设备的应用程序(基于广告服务 UUID),然后将能够连接到该设备。

苹果建议iBeacons的间隔为100毫秒。

这篇(相当旧,来自2012年)讨论指出:

当手机处于待机状态时,中位发现时间约为广告间隔的60倍。当手机处于待机模式时,95%的发现时间约为广告间隔的300倍

这篇(稍微更新一些,但来自2013年12月)答案指出:

在前台扫描可能会立即发现正在广告附近的设备,而在后台发现可能需要多达60倍的时间。


是的,我知道这个指南。我可以重新表述我的问题,就像这样:“如果我的外围设备每1285毫秒广告一次,在后台模式下运行10分钟后,我的IOS应用程序需要多长时间才能发现它?” - sdespont
@jcaon 是的,我担心你的评论是正确的。当您正在开发带有小按钮电池(2016)的外围设备,并且需要快速自动重新连接时,找到一个好的广告间隔是一场噩梦。 - sdespont
他们提供的唯一信息是:“如果所有正在扫描外设的应用程序都在后台运行,则中央设备扫描广告数据包的间隔增加。因此,发现广告外设可能需要更长的时间”… - jcaron
这篇讨论(虽然很旧)http://lists.apple.com/archives/bluetooth-dev/2012/Apr/msg00049.html 表明:“当手机处于待机状态时,中位数发现时间约为广告间隔的60倍。当手机处于待机模式时,95%的发现时间约为广告间隔的300倍。” - jcaron
这个回答https://dev59.com/w2Ij5IYBdhLWcg3wRjSr#20459346指出:“虽然在前台扫描可能会立即发现旁边正在广告的设备,但在后台进行发现可能需要长达60倍的时间。” - jcaron
显示剩余3条评论

1
当广告间隔时间接近扫描间隔的整数倍时,可能会出现问题,发现时间可能会无限增加(即扫描器永远不会看到广告,因为广告总是发生在扫描窗口之外)。也许苹果设计指南中的ADV间隔列表显示了最佳值,但它并没有说明如何确定发现时间。这很混乱!我甚至可以说:如果智能手机(苹果或任何其他品牌)制造商没有精确指定每种功率模式的扫描参数(间隔、窗口和可能的过滤器设置),那么您就会迷失方向,不能正确估计发现性能。

1
正如在 https://electronics.stackexchange.com/questions/82098/ble-scan-interval-and-window/359158?noredirect=1# 中所述,对于苹果iOS,扫描间隔和扫描窗口是由越狱用户经验性地确定的。 Android参数包含在可用的源代码/头文件常量中。对于苹果而言,如果外围设备遵循他们的指南,则在1022.5毫秒广告间隔下,前台模式可以在1秒内发现75%的设备,并在2秒内发现100%的设备(假设没有来自干扰的丢失数据包)。 在后台模式下...(请参见下一个评论) - user4028
1
中位数时间为5秒,最长时间为19秒,但如果随机偏移量不幸影响广告间隔,则可能会更长。对于Android,使用低延迟扫描,扫描间隔为4秒,因此除非广告频道有很多干扰,否则将快速发现,因为需要4秒钟来移动到扫描下一个广告频道。 - user4028

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接