2015-03-12 4 views
2

Я использую следующий код для локального уведомления. Но это не работает. Место успешно обновляется и попадает в эти методы, но уведомление не запускается. Любая идея ?:iOS8 UILocalNotification не работает

ПРИМЕЧАНИЕ. Он работает, когда приложение находится в фоновом режиме, но не работает, когда приложение закрыто.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){ 
     [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; 
    } 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
    // Override point for customization after application launch. 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 

    return YES; 
} 

-(void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { 
    if ([region isKindOfClass:[CLBeaconRegion class]]) { 
     UILocalNotification *notification = [[UILocalNotification alloc] init]; 
     notification.alertBody = @"You are checked in"; 
     notification.soundName = @"Default"; 
     [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; 
    } 
} 

ответ

1

Вы должны иметь в виду, что уведомления присутствуют только в том случае, если ваше приложение находится в фоновом режиме, а не на переднем плане. Если вы находитесь на переднем плане, установите - application:didReceiveLocalNotification: из AppDelegate и вручную обработайте уведомление вручную.

UPD

Если ваше приложение не работает даже в фоновом режиме, ваш код не будет выполнен. Найдите Background modes (Отслеживание раздела «Местоположение пользователя») для получения возможных решений, чтобы спросить, запускает ли приложение ваше приложение по событиям, даже в настоящее время его нет в памяти.

+0

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

+0

@Idrees Я отредактировал свой ответ в связи с вашим комментарием – Azat

+0

yes Я проверил обновления местоположения в фоновом режиме, но все еще не работает – Idrees

0

Приложение Wen закрыто applicationDidEnterBackground назывался так, чтобы поставить этот код фоновой задачи. и введите локальное уведомление.

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
     bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ 
    // Clean up any unfinished task business by marking where you 
    // stopped or ending the task outright. 
    [application endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid; 
}]; 

// Start the long-running task and return immediately. 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    // Do the work associated with the task, preferably in chunks. 

    [application endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid; 
}); 
    //// just u call the method want ever u want example 

    [self notification]; 
} 

- (void)notification 
{ 
    UILocalNotification *notification = [[UILocalNotification alloc] init]; 
    notification.alertBody = @"You are checked in"; 
    notification.soundName = @"Default"; 
    [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; 
} 

Я думаю, что это полезно для u.

0

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

0

Когда ваше приложение будет убито, мониторинг маякового радиосигнала все равно возобновит его - это отличная вещь в мониторинге маяков!

Все, что вам нужно сделать, это перезапустить мониторинг в методе application:didFinishLaunchingWithOptions:. Если вы это сделаете, событие didEnterRegion, в результате которого будет запущено приложение, сразу же будет доставлено делегату, что должно вызвать уведомление.

У Estimote было подробное руководство: Launching notifications in iOS when the app is killed. Он использует классы ESTBeaconManager, ESTBeaconManagerDelegate и ESTBeaconRegion из SDK Estimote, но вы можете просто заменить их обычными классами Core Location для того же эффекта.

1

Мой случай был уведомление было отключено от Settings -> Notifications -> YOUR_APP -> Allow Notifications

Смежные вопросы