UILocalNotification - Как справиться, когда приложение не работает? - PullRequest
10 голосов
/ 10 января 2012

Я реализовал UILocalNotifications в двух разных приложениях.Один использует Location Services, что означает, что если его убивают, он (обычно) перезапускается (так что это не такая большая проблема).Однако в другом приложении я планирую UILocalNotification в зависимости от времени.В этом случае у меня возникла серьезная проблема.

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

Вот рабочий процесс, который работает (приложение работает в фоновом режиме):

  1. Запустить приложение;уведомление о расписании приложений;закрыть приложение;приложение теперь работает в фоновом режиме
  2. Получать локальное уведомление;сначала проигнорируй это;потяните выпадающее меню сверху (строка состояния);коснитесь уведомления, чтобы запустить приложение
  3. Результаты: приложение соответствующим образом отображает информацию в уведомлении.

Вот рабочий процесс, который не работает (приложениебольше не работает в фоновом режиме):

  1. Запустить приложение;уведомление о расписании приложений;закрыть приложение;приложение теперь работает в фоновом режиме
  2. вручную убить приложение (чтобы смоделировать мою ситуацию)
  3. По-прежнему получать локальное уведомление;сначала проигнорируй это;потяните выпадающее меню сверху (строка состояния);нажмите на уведомление, чтобы запустить приложение
  4. Результаты: приложение запускается, но метод didReceiveLocalNotification не вызывается.Пользователь считает, что приложение не работает.
    Примечание : Я не могу даже принудительно принудительно ввести информацию, потому что, если они получили более одного уведомления, я не могу сказать, к какому из них они обратилисьчтобы узнать, какой из них отображать.

Можно ли узнать, к какому уведомлению они обратились, когда приложение не работает в фоновом режиме (и, следовательно, не запускаетdidReceiveLocalNotification method)

Ответы [ 2 ]

16 голосов
/ 14 мая 2012

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

Это может быть обработано в методе нижеприведенного appDelegate

didFinishLaunchingWithOptions вызывается при запуске приложения, поэтому просто проверьте, действительно ли приложение было запущено, потому что пользователь коснулся уведомления (код ниже):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    if (notification) 
    {
        NSLog(@"notification caused app to launch, alert body = %@", notification.alertBody);
        // do what ever action you want to do
        // you could just copy the code from "didReceiveLocalNotification" and paste it here
    }

    return YES;
}
2 голосов
/ 26 ноября 2013

@ Ranjit, это будет работать, когда пользователь нажимает значок приложения, потому что это метод делегата приложения.Вам звонят каждый раз, когда приложение завершает запуск.(Не могу комментировать, потому что у меня нет репутации ...;))

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