4 августа 2010 г.

Local Notifications в iOS 4.0

Начиная с iOS SDK 4.0 появилась возможность отсылать локальные сообщения. Локальные сообщения - это сообщения пользователю от вашей программы в определенное время, не зависимо от того, запущено ли ваше приложение. Очень похоже на Push Notification но действует только в пределах одного устройства (без участия севера). Как и Push Notification Local Notification может быть доставлен пользователю как: звуковое сообщение, цифра на иконке приложения и как алерт. Не думайте, что при посылке Local Notification ваше приложение запустится, это произойдет только в том случае, если ваше Local Notification имеет тип алерт и пользователь на этом всплывающем окне нажал кнопку "View". Так что никакой важной информации не стоит доставлять через Local Notification, хотя эти сообщения и надежнее чем Push Notification так как не зависят от состояния сети.

Регистрация в системе Local Notification осуществляет метод scheduleLocalNotification: класса UIApplication. Параметром этого метода служит объект класса UILocalNotification. Код который осуществляет отсылку сообщения:

  1. UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];
  2.  if (alarm)
  3.  {
  4.   alarm.fireDate = [[NSDate date] dateByAddingTimeInterval:30.0];
  5.   alarm.timeZone = [NSTimeZone defaultTimeZone];
  6.   alarm.repeatInterval = 0;
  7.   alarm.alertBody = @"local notification";
  8.   UIApplication *app = [UIApplication sharedApplication];
  9.   [app scheduleLocalNotification:alarm];
  10.  }

Этот код создает объект alarm типа alert c текстом "local notification" и регистрирует его в системе как событие, которое произойдет через 30 сек.

Посмотреть зарегистрированные в системе от вашего приложении нотификации позволяет метод scheduledLocalNotifications. Отменить все нотификации можно методом cancelAllLocalNotifications.

Что э происходит если событие нотификации происходит при запущенном приложении? Системных событий тогда никаких не происходит (не звуков не проигрывается, не показывается всплывающее окно), но делегату вашего приложения приходит событие application:didReceiveLocalNotification: в котором можно обработать сообщение.

Пример работы.

4 комментария:

  1. Хм, интересно, а как можно удалить записанное событие?

    ОтветитьУдалить
  2. Легко, метод scheduledLocalNotifications у UIApplication возвращает список зарегистрированных на веше приложение событий, а cancelLocalNotification: - удаляет событиие.

    ОтветитьУдалить
  3. Большое спасибо!

    ОтветитьУдалить
  4. Хороший стотья :)

    ОтветитьУдалить