根据Radius Network [1]的测试,iOS设备在监控模式下最多只能检测30个信标区域。但是为什么在Android上仍然可以定义(almoast)无限数量的信标区域?
感谢您的澄清。
[1] http://developer.radiusnetworks.com/2015/04/21/max-beacon-regions-ios.html
答案 0 :(得分:2)
澄清一下,iOS上实际上有两个限制:
每个iOS应用都可以监控最多20个定义的CLBeaconRegion
。此限制是每个应用最多20个地理围栏的延迟。由于Apple扩展了相同的API,因此CLRegion
对象是一个CLBeaconRegion
对象,因此每个应用的限制为CLRegion
秒。特定类型的<?php
namespace HIT\Huskytheme\ViewHelpers\Page;
class LanguageMenuViewHelper extends \FluidTYPO3\Vhs\ViewHelpers\Page\LanguageMenuViewHelper {
protected function getLanguageUrl($uid) {
$excludedVars = trim((string) $this->arguments['excludeQueryVars']);
$config = array(
'parameter' => $this->getPageUid(),
'returnLast' => 'url',
'additionalParams' => '&L=' . $uid,
'useCacheHash' => $this->arguments['useCHash'],
'addQueryString' => true,
'addQueryString.' => array(
'method' => 'GET',
'exclude' => 'id,L,cHash' . ($excludedVars ? ',' . $excludedVars : '')
)
);
if (TRUE === is_array($this->arguments['configuration'])) {
$config = $this->mergeArrays($config, $this->arguments['configuration']);
}
return $this->cObj->typoLink('', $config);
}
}
。可能还有其他原因导致Apple决定对信标保持同样的限制,但这就是它的起源。
在设备上注册的前30个CLBeaconRegions(跨所有应用)都会加速检测。这是因为蓝牙芯片的硬件插槽有限,可用于BLE数据包的硬件匹配。如果采用所有这些插槽,则检测将回退到定期软件扫描,这种扫描速度较慢。
在Android上,这些确切的限制不适用,但确实存在其他限制。以下限制适用于Android Beacon Library:
您可以监控的区域数量没有限制。但是,由于匹配最终是在软件中完成的,因此监控极端数量的区域(数百或数千)将会变慢关闭你的应用程序,可能会导致性能问题。
硬件加速过滤器仅适用于Android 5.0+(如果在手机硬件上可用)。它们应用于信标类型,而不是特定的信标区域。因此,虽然对加速硬件检测没有区域限制,但如果同时可以看到多个信标,则您的应用只会加速检测到第一个可见的信标。随后的检测将回归到较慢的定期软件扫描,就像在iOS上一样,直到所有信标都消失。
答案 1 :(得分:1)
它实际上是iOS可以监控的20个Beacon区域,它只是Apple向CoreLocation框架引入的限制。
没有官方解释原因,但我的猜测是,Apple并不希望开发人员监控大量/无限数量的区域,以避免滥用该功能并对其产生负面影响。设备的电池寿命。