我正在开发一个iBeacon应用程序,该应用程序使用本地通知在用户进入/退出特定区域时提醒用户。但是我在后台申请时只收到一次通知。任何帮助,将不胜感激。
这是我的代码:
- (void)locationManager:(CLLocationManager*)manager didEnterRegion:(CLRegion *)region {
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = nil;
notification.alertBody = @"Welcome";
notification.alertAction = @"View";
notification.soundName = UILocalNotificationDefaultSoundName;
notification.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
-(void)locationManager:(CLLocationManager*)manager didExitRegion:(CLRegion *)region {
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = nil;
notification.alertBody = @"Thank you for coming";
notification.alertAction = @"View";
notification.soundName = UILocalNotificationDefaultSoundName;
notification.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
答案 0 :(得分:2)
方法didEnterRegion和didExitRegion有一些时间间隔值。这些方法在一段时间后开火。并确保完全退出区域。另外,您可以使用方法didDetermineState。
测试iOS应用的区域监控支持
在iOS模拟器中测试您的区域监控代码时 设备,意识到区域事件可能不会立即发生 区域边界交叉。为了防止虚假通知,iOS 在某个阈值之前不会发送区域通知 条件得到满足。具体来说,用户的位置必须越过 区域边界,离开边界最小距离, 并保持在最小距离之前至少20秒 报告通知。
特定阈值距离由硬件确定 目前可用的定位技术。例如, 如果禁用Wi-Fi,则区域监控要少得多 准确。但是,出于测试目的,您可以假设 最小距离约为200米。
答案 1 :(得分:1)
请确保等到最多15分钟才能接到didEnterRegion
/ didExitRegion
的电话,然后才能断定它不起作用。在某些设备上,检测可能需要很长时间。见here。
我会在你的回调中添加NSLog
行,这样你就可以看到它们是否被调用 - 我怀疑它们不是。如果为true,则表示问题在于检测,而不是通知。