UILocalNotification在ios7中仅触发一次

时间:2014-03-27 12:18:50

标签: ios objective-c ios7 ibeacon

我正在开发一个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];
}

2 个答案:

答案 0 :(得分:2)

方法didEnterRegion和didExitRegion有一些时间间隔值。这些方法在一段时间后开火。并确保完全退出区域。另外,您可以使用方法didDetermineState。

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html

测试iOS应用的区域监控支持

  

在iOS模拟器中测试您的区域监控代码时   设备,意识到区域事件可能不会立即发生   区域边界交叉。为了防止虚假通知,iOS   在某个阈值之前不会发送区域通知   条件得到满足。具体来说,用户的位置必须越过   区域边界,离开边界最小距离,   并保持在最小距离之前至少20秒   报告通知。

     

特定阈值距离由硬件确定   目前可用的定位技术。例如,   如果禁用Wi-Fi,则区域监控要少得多   准确。但是,出于测试目的,您可以假设   最小距离约为200米。

答案 1 :(得分:1)

请确保等到最多15分钟才能接到didEnterRegion / didExitRegion的电话,然后才能断定它不起作用。在某些设备上,检测可能需要很长时间。见here

我会在你的回调中添加NSLog行,这样你就可以看到它们是否被调用 - 我怀疑它们不是。如果为true,则表示问题在于检测,而不是通知。