Kep*_*tos 4 core-location ios ibeacon
我花了几个月的时间开发基于iBeacons的应用程序,我真的很沮丧.
一般的想法是,当检测到信标时,向用户通知特定于该iBeacon的信息.
该应用程序设计如下,所有iBeacons具有相同的UUID,Major决定建筑物(博物馆,商店......)和Minor特定产品(图片,鞋子......).所以这个应用程序可以服务多个客户
当应用程序启动时,我开始使用我们的UUID对区域进行监视和测距.当应用程序处于前台时,一切都很完美.但是在背景或暂停状态下,问题就开始了.在背景或暂停状态下不允许测距.
我知道当您进入或退出信标区域时,应用程序将在后台启动约5秒钟.你可以在这五秒钟的后台进行测距,之后iOS会再次暂停你的应用程序.
我设法通过这里学到的技术在后台扩展了最多3分钟.我还通过notifyEntryStateOnDisplay = YES获得额外的回调;
但这还不够,如果客户进入应用程序处于后台或暂停状态的区域,他将收到通知.在额外的3分钟内,如果测距检测到另一个iBeacon,他将收到通知,但是当3分钟后台任务到期时,如果没有触发任何区域退出,他将不再收到任何通知.
在这样的场景中没有真正的解决方案吗?我认为这是一个非常常见的情况,我很惊讶没办法处理它.
编辑:我试图通过监测两个地区作为推荐David Young的回答来找到问题的解决方案.为了获得更多的进入/退出地区事件.
我添加了我实现的代码,试图监控两个区域.
但是我做错了一些事情和didRangeBeacons:InRegion:当预期是每秒时,回调每10毫秒触发一次.
在AppDelegate.m,我正在做以下内容didFinishLaunchingWithOptions:
[self.locationManager startMonitoringForRegion:self.beaconRegion];
[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
[self.locationManager startMonitoringForRegion:self.beaconRegion2];
[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion2];
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion2];
Run Code Online (Sandbox Code Playgroud)
然后,开启 didRangeBeacons:InRegion:
- (void) locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region{
if(beacons.count > 0){
[self.locationManager stopRangingBeaconsInRegion:region];
for (CLBeacon *beacon in beacons){
NSLog(@"beacon detected major: %@ minor: %@", beacon.major,beacon.minor);
}
[self.locationManager startRangingBeaconsInRegion:region];
}
}
Run Code Online (Sandbox Code Playgroud)
当我在模拟器上运行应用程序,并且每个网络的信标都在范围内时,大约每10毫秒就会在控制台上显示该消息.
我怀疑停止并重新启动测距是打破预期的回调流程,但当只有一个区域在范围内时,回调按预期每秒发生一次.
您描述的问题很常见.除了延长背景测距时间(你已经完成),iOS上没有灵丹妙药.
另外两种技术可能有所帮助 当您从一个信标传递到下一个信标时, 这两种技术都涉及获取新的条目事件:
获取允许您调低发射机功率的硬件信标(我公司的RadBeacon产品允许这样做),因此传输不会重叠.这样,当您从信标移动到信标时,您将获得退出事件,然后获得新的输入事件.
重新设计您的标识符示意图,因此主要字段专用于识别多达20个不同的区域(基于UUID和主要1-20).然后,您监控所有这些区域.您的个人信标仍然可以根据需要使用未成年人,特别是作为触发消息传递的密钥.放置信标时,请确保没有重叠传输的信号共享相同的主信号.当您从一个事件移动到另一个事件时,这将确保新的后台输入事件.
| 归档时间: |
|
| 查看次数: |
4621 次 |
| 最近记录: |