Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iBeacon监测结果不可靠(迪登特地区和迪登特地区)_Objective C_Ios9_Core Location_Ibeacon_Estimote - Fatal编程技术网

Objective c iBeacon监测结果不可靠(迪登特地区和迪登特地区)

Objective c iBeacon监测结果不可靠(迪登特地区和迪登特地区),objective-c,ios9,core-location,ibeacon,estimote,Objective C,Ios9,Core Location,Ibeacon,Estimote,我目前正在开发一个iOS应用程序,它可以对iBeacon进行范围和监控,以便能够执行一些操作和接收通知。 测距工作完美无瑕,但我在信标监控和通知方面遇到了麻烦。我已经对这个主题做了很多研究,我知道CoreLocation框架通常会遇到这样的问题,但我想知道其他开发人员是如何解决这个问题的 基本上,我在启动didEnterRegion和didExitRegion方法时显示本地通知。不幸的是,这两种方法经常被触发(以一种不可靠的方式),即使iBeacon就在它旁边,尽管有时它工作得很完美,这使得它更

我目前正在开发一个iOS应用程序,它可以对iBeacon进行范围和监控,以便能够执行一些操作和接收通知。 测距工作完美无瑕,但我在信标监控和通知方面遇到了麻烦。我已经对这个主题做了很多研究,我知道CoreLocation框架通常会遇到这样的问题,但我想知道其他开发人员是如何解决这个问题的

基本上,我在启动didEnterRegion和didExitRegion方法时显示本地通知。不幸的是,这两种方法经常被触发(以一种不可靠的方式),即使iBeacon就在它旁边,尽管有时它工作得很完美,这使得它更烦人。 我尝试过降低iBeacon的广告时间间隔,虽然它有帮助,但并没有完全解决这个问题。现在,我尝试使用一个逻辑过滤器,如果进入或退出事件发生在最后X分钟,我将忽略触发通知(我想到的是一个介于5到15之间的“神奇”数字)

有人有同样的问题吗?在这种情况下添加第二个iBeacon会有帮助吗?(可能监控这两个事件,并根据这两个输入逻辑过滤退出和进入事件?)。 我还考虑添加另一层数据来显示通知,可能是基于GPS或Wifi信息。有人试过这个吗

还有别的想法吗?我愿意接受任何推荐

以防万一,我使用的是Estimote iBeacons和iOS9(Objective-c)


谢谢你的时间

信标发出脉冲信号。测距还执行间歇扫描(大约每100毫秒一次)。这意味着您的设备可能会连续几秒钟丢失信标,这可能会导致您遇到的结果。您可以使用以下方法记录信标RSSI值:

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)iBeacons inRegion:(CLBeaconRegion *)region
我相信在看到didExitRegion被调用之前,您会看到很多零值。这不是代码中的错误,也不是信标的错误。这只是因为无论是发射的信号还是检测都不是恒定的。它们在跳动。这些问题可能发生在信标与您的设备位于同一张桌子上时,并且在现实世界中,当信号被物理对象和人阻挡时,这些问题可能会被夸大


我会使用测距来更准确地确定你的信标是否在附近。请注意,测距,特别是在后台测距,可能会消耗大量电池。

间歇性区域退出/进入事件是一个常见问题,通常按照您的建议,使用带有计时器的软件过滤器来解决。如何设置过滤器的细节(在处理退出逻辑之前,退出后等待重新进入的最短时间)因每个用例而异,因此最好将其置于您的控制之下

请理解,区域退出是由于iOS在
CLBeaconRegion
中的信标30秒内未检测到任何蓝牙广告造成的。
如果两个检测到的数据包相隔31秒,您将在1秒后获得区域退出和区域进入

这种情况通常发生在信号电平较低的情况下。如果iOS设备位于信标传输范围的外边缘,则只会接收一小部分数据包。当信标以1Hz的频率传输时,如果连续丢失30个数据包,iOS设备将收到退出事件

在需要可靠覆盖的特定区域,您可以采取以下几项措施来减少此问题:

  • 将您的信标发射机功率调到最大值。这将在您关心的区域提供更强的信号级别和更少的丢失数据包

  • 把广告费调到最大值。10赫兹的广告可以提供10倍于1赫兹的数据包

  • 如果需要,添加具有相同标识符的附加信标以增加覆盖范围

  • 当然,上述措施也有成本,包括在高广告费率和发射机功率水平下电池寿命缩短

    即使您执行了上述所有操作,您仍然需要软件过滤器,因为如果最近的信标的传输半径小于0,则始终会有一个点位于边缘

    你可以在我的回答中看到一个软件过滤代码的例子