4

我正在开发一个应用程序,该应用程序使用区域监控在用户靠近某些地标时提醒用户。一切正常,但是当应用程序在后台时,我没有收到警报。当我打开应用程序时,我会弹出所有警报。我想要的是当应用程序在后台时获取它们。我想知道是否有可能或是否需要运行应用程序才能收到警报?任何帮助将不胜感激。

更新:问题似乎是我使用了警报而不是本地通知。这是我使用的代码:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    NSLog(@"Entered Region - %@", region.identifier);
    [self showRegionAlert:@"You are near: " forRegion:region.identifier];
}

如何将其更改为本地通知?

4

3 回答 3

7

检查“测试您的应用程序区域监控”部分

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html

如果您在前台和后台之间来回切换,则可能无法满足阈值条件并在您再次将应用程序置于前台之前触发。

此外,当后台应用程序收到通知时,只有一个小窗口用于处理消息。尝试执行网络请求可能会超时...

检查您的 plist 设置 - 仅当您需要高精度定位时才需要将位置声明为 UIBackgroundModes。即使没有定义位置,重要的位置更改也有效。

检查是否正在调用 locationManager:didUpdateLocations: 和 locationManager:didFailWithError: 并且没有发布错误。

检查您没有在 plist 中将 ApplicationRunsInBackground 设置为 NO。

尝试实现 AppDelegates applicationDidEnterBackground:, application:didFinishLaunchingWithOptions: 和朋友来发现在给定时间你在应用程序生命周期中的哪个位置。

于 2013-02-24T22:41:28.107 回答
0
  1. 对于地理围栏解决方案,您可以参考@Niels Castle 给出的答案。
  2. 对于本地通知,您可以参考以下代码:
UILocalNotification* localNotification = [[UILocalNotification alloc] init];

localNotification.alertBody = @"I'M IN THE REGION";

localNotification.userInfo = [[NSDictionary alloc]initWithObjectsAndKeys:@"nearBy",@"type", nil];

localNotification.timeZone = [NSTimeZone defaultTimeZone];

localNotification.soundName = UILocalNotificationDefaultSoundName;

[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
于 2014-11-25T10:42:35.203 回答
0
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    NSLog(@"Yes! Welcome to %@",region.identifier);
    UILocalNotification* notify = [UILocalNotification new];
    notify.alertBody = [NSString stringWithFormat:@"Welcome to %@",region.identifier];
    notify.soundName = UILocalNotificationDefaultSoundName;
    if (notify.applicationIconBadgeNumber == 0) {
        notify.applicationIconBadgeNumber = 1;
    }
    [[UIApplication sharedApplication] presentLocalNotificationNow:notify];
}
于 2015-09-30T09:32:24.237 回答