IOS Geofencing后台警报

时间:2013-02-24 22:11:44

标签: ios

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

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

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

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

3 个答案:

答案 0 :(得分: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:和朋友们在应用程序生命周期中找到你在给定时间的位置。

答案 1 :(得分:0)

  1. 对于地理围栏解决方案,您可以参考@Niels Castle给出的答案。
  2. 对于本地通知,您可以参考以下代码:
  3. 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];
    

答案 2 :(得分:0)

/*doc
---
title: Colors
name: Colors
category: Base CSS
---

List of the colors used.

*/

@each $i in $colors {
    /*
    <div class="cube-wrapper">
        <div class="color-cube #{nth($i, 1)}"></div>
        <code>$#{nth($i, 1)}</code>
    </div>
    */
}

@each $i in $colors {
    .#{nth($i, 1)} {
        background-color: nth($i, 2);
    }
}