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

Для каких приложений полезны UILocalNotification? Например для приложений «напоминалок», будильников, To-do листов. Приложение, работающие в фоне так же может показывать UILocalNotfication, чтобы уведомить нас о новом сообщении в чате, входящем звонке (как в Skype). Уведомление может быть запланировано либо показано немедленно.

Положительным моментом является то, что приложение может быть и не активно в момент «срабатывания» сообщения, а может быть вообще не запущено! Отрицательным моментом является ограничение на 64 уведомления от одного приложения.

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

  • Звук с которым будет показано сообщение
  • Бейдж приложения
  • Надпись на кнопке действия
  • Нужно ли повторять уведомление и с каким интервалом
  • Launch-image при открытии приложения по уведомлению
  • userInfo словарь, который можно использовать для анализа сработавшего уведомления

После того, как создано уведомление, необходимо его добавить в систему. Для этого существует несколько методов у UIApplication (о которых поговорим позже). Когда сработает уведомление и пользователь нажмет на action-кнопку возможны три варианта событий:

  • Приложение уже запущено и находиться в фоне. В таком случае вызовется метод application:didReceiveLocalNotification:
  • Приложение не запущено. В таком случае приложение запускается как обычно, но в метод application:didFinishLaunchingWithOptions: будет передан словарь с ключем UIApplicationLaunchOptionsLocalNotificationKey, описывающем уведомление
  • Приложение запущено и активно. Сообщение не покажется вообще и звук не будет проигран, но будет вызван метод application:didReceiveLocalNotification:

UILocalNotification похож на Push Notification, но, как уже поняли из названия самые догадливые, работает без сервера.

Для создания и установки локального уведомления можно использовать следующий код:

- (void) addNotification

{
UILocalNotification *notif = [[UILocalNotification alloc] init];
notif.timeZone = [NSTimeZone defaultTimeZone]; //часовой пояс, я обычно пользуюсь в программах дефолтным по Гринвичу, но можно использовать systemTimeZone, это будет время в устройстве.
notif.fireDate = [[NSDate date] dateByAddingTimeInterval:20.0f]; //время, когда наступит время нотификатора, у нас это текущая дата + 20 секунд. Можно прибегнуть к помощи NSDateComponents для установок своей даты.
notif.alertAction = @"Тыдыщ!"; //Текст кнопочки, вызывающей вашу программу из фонового режима
notif.alertBody = @"Вот такой вот нотификатор!"; //Тело сообщения над кнопочкой
notif.soundName = UILocalNotificationDefaultSoundName; //дефолтный звук сообщения. Можно задать свой в папке проекта.
notif.applicationIconBadgeNumber = 1; //число "бейджа" на иконке приложения при наступлении уведомления
notif.repeatInterval = NSWeekCalendarUnit; //если необходимо, используем повтор (не пытайтесь установить свое время повтора, это невозможно. Используйте только NSCalendarCalendarUnit.
[[UIApplication sharedApplication] scheduleLocalNotification:notif]; //Размещаем наше локальное уведомление!
[notif release];
}

Для удаления всех наших уведомлений используйте следующий код:

- (void) deleteAllNotifs

{
[[UIApplication sharedApplication] cancelAllLocalNotifications]; //удаляем все!
}

Для тех, кто хочет удалять не все, а определенные уведомления. Вам следует добавить объект NSDictionary в userInfo вашего уведомления примерно таким образом (можете просто скопировать эти 2 строки в метод, где мы объявляли и устанавливали нотификатор:

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"100500" forKey:@"id"]; //объект NSDictionary строка @"100500"

notif.userInfo = dict; //как свойство

И изменяем наш метод deleteAllNotifs таким образом:

- (void) deleteAllNotifs

{
for (UILocalNotification *notif in [[UIApplication sharedApplication] scheduledLocalNotifications])
{
if([[notif.userInfo objectForKey:@"id"] isEqualToString:@"100500"])
[[UIApplication sharedApplication] cancelLocalNotification:notif];
}
}

Надеюсь кому-нибудь это поможет в разработке! Всем спасибо за внимание!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *