2013-02-24 2 views
4

Я работаю над приложением, которое предупреждает пользователя, когда он близок к некоторым ориентирам, используя мониторинг региона. Все работает нормально, но когда приложение находится в фоновом режиме, я не получаю предупреждения. Когда я открываю приложение, я получаю всплывающие предупреждения. Я хотел получить их, когда приложение находится в фоновом режиме. Мне интересно, возможно ли это или приложение должно запускаться для получения предупреждений? Любая помощь будет принята с благодарностью.IOS Geofencing background alert

Обновление: Проблема заключается в том, что я использовал оповещения вместо локальных уведомлений. Вот код, который я использовал:

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

Как я могу изменить это на местные уведомления?

+2

В вашем 'Info.plist', вы объявить' location' как ваш 'UIBackgroundModes'? – yeesterbunny

+0

на самом деле я сделал, поэтому я думаю, что он все равно может отслеживать изменения местоположения, поэтому, когда я запускаю приложение, я получаю все предупреждения, появляющиеся один за другим, я просто не всплываю, когда приложение работает в фоновом режиме – XpApp

+1

, когда вы говорите, что не получаете предупреждения », вы имеете в виду, что вы генерируете UIAlertViews, когда ориентиры достигают? это не будет работать, потому что вы не можете отображать предупреждения в фоновом режиме. вы должны использовать UILocalNotifications, если вы еще не находитесь –

ответ

7

Проверьте раздел «тестировать приложение мониторинга области» в

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

Если переключаться между передним и задним планом пороговыми условиями не может быть выполнен и триггера, прежде чем привести приложение к переднем плане снова.

Также, когда фоновое приложение получает уведомление, есть только небольшое окно для обработки сообщения. Попытка выполнить сетевые запросы может быть тайм-аут ...

Проверьте настройки plist - объявите местоположение как UIBackgroundModes, только если вам требуется высокоточное позиционирование. Значительные изменения местоположения работают даже без определения местоположения.

Проверьте, что locationManager: didUpdateLocations: и locationManager: didFailWithError: вызывается и ошибки не публикуются.

Убедитесь, что вы не установили ApplicationRunsInBackground в NO на своем plist.

Попробуйте реализовать приложение AppDelegatesDidEnterBackground :, приложение: didFinishLaunchingWithOptions: и друзья, чтобы определить, где в жизненном цикле приложения вы находитесь в данный момент времени.

+1

Благодарим вас за ответ. На самом деле, я прочитал это, и вот моя проблема, когда в фоновом режиме приложение контролирует регионы, я даже вижу его в консоли, но проблема в том, что я не получаю никакого предупреждения, пока приложение находится в фоновом режиме.когда я запускаю его, я получаю предупреждения для всех событий, которые произошли, когда он был в фоновом режиме. – XpApp

+0

Я обновил ответ еще несколькими указателями. –

+0

На самом деле проблема заключается в том, что я использовал UIAlert, а не локальные уведомления, я обновил свой вопрос с помощью кода, который я использовал, знаете ли вы, как я могу переключить это на localnotifications вместо предупреждений? – XpApp

0
  1. Для решения геообработки вы можете обратиться к ответу, заданному замком @Niels.
  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]; 
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]; 
}