我试图显示一个通知,当我的应用程序在后台,并且设备进入一个iBeacon的区域,当他们的CLProximity在通知正在工作时,但它不断出现在1秒的间隔:当CLProximity附近显示背景通知
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{
NSLog(@"Entered beacon region");
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region{
NSLog(@"Left region");
[self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
}
- (void) locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
- (void) locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
CLBeacon *beacon = [[CLBeacon alloc] init];
beacon = [beacons lastObject];
self.uuidLabel.text = beacon.proximityUUID.UUIDString;
if(beacon.proximity == CLProximityUnknown) {
distanceLabel.text = @"Unknown Proximity";
[self.view setBackgroundColor:[UIColor grayColor]];
} else if (beacon.proximity == CLProximityImmediate) {
distanceLabel.text = @"Immediate";
[self.view setBackgroundColor:[UIColor redColor]];
} else if (beacon.proximity == CLProximityNear) {
distanceLabel.text = @"Near";
[self.view setBackgroundColor:[UIColor orangeColor]];
UILocalNotification *inRange = [[UILocalNotification alloc] init];
inRange.alertBody = [NSString stringWithFormat:@"Entered region!"];
inRange.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] presentLocalNotificationNow:inRange];
} else if (beacon.proximity == CLProximityFar) {
distanceLabel.text = @"Far";
[self.view setBackgroundColor:[UIColor blueColor]];
}
}
如果有一个方法调用后显示的通知,告诉它已经显示的应用程序,而不是继续调用方法didRangeBeacons直到用户超出范围并重新?
因此,当用户跨越边界时,计算出跨越区域的时间间隔,以确定显示通知的适当时间,是否更好? –
我不确定这有帮助。在后台,您的应用只能在边界穿越后运行五秒钟。如果用户步行到“near”附近需要15秒,那么您的应用程序将不会运行,并且根本无法显示通知。如果你等到下一次你的应用程序被唤醒,那就太迟了。不幸的是,这是iOS上的iBeacons的一个真正的限制,我不相信有一个解决方法。要在特定距离触发,您的应用必须处于前台。 – davidgyoung