我们正在使用信标和 iOS 进行一些工作,并研究在我们首次进入信标范围和向用户发出通知之间应用去抖动的选项。
所以流程是,
- 进入信标范围。
- 开始计时。
- 计时器到期,发布通知。
当应用程序在前台时,他们似乎没有任何复杂的做法,但我不确定这将如何在应用程序关闭时工作。
如果我们注册位置背景模式,那么当我们进入信标范围时应用程序将启动,但我不清楚我们将允许应用程序运行多长时间。如果只允许应用程序运行很短的时间,那么我们将没有时间启动计时器并让它过期。
任何人都可以阐明位置后台模式允许应用程序在这样的后台启动时执行多少时间吗?
最佳答案
我建议,一旦您进入信标区域,您就开始对信标进行测距 - 这将以每秒一次的速率为您提供测距回调 - 即使您的应用程序处于后台。您可以计算这些事件并使用它来确定何时发布通知。此时您可以停止对信标进行测距。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
[manager startRangingBeaconsInRegion:(CLBeaconRegion *)region];
self.beaconCount=0;
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
[manager stopRangingBeaconsInRegion:(CLBeaconRegion*)region];
}
- (void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region {
self.beaconCount++;
if (self.beaconCount > SOME_THRESHOLD) {
[manager stopRangingBeaconsInRegion:region];
[self postLocalNotification];
}
}
因为这是使用位置后台模式,所以对可用后台时间量没有总体限制,但是每次调用委托(delegate)方法有几秒钟的限制 - 但这段代码不会接近那个。
关于iOS位置后台模式运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273316/