iOS UILocalNotification - нет методов делегата, запускаемых, когда приложение работает в фоновом режиме, и значок уведомляется при уведомлении - PullRequest
17 голосов
/ 27 марта 2012

версия для iPhone - 5.1 (9B176)

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

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

Ожидается согласно Документация Apple :

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

Если значок приложения нажимается на устройстве под управлением iOS, приложение вызывает тот же метод, но не предоставляет никакой информации об уведомлении

Факт: didFinishLaunchingWithOptions НЕ вызвано .Но applicationWillEnterForeground и applicationDidBecomeActive были вызваны.

1 Ответ

23 голосов
/ 27 марта 2012

Вы правы. Поведение несовместимо с документацией. Отложить документацию и сосредоточиться на фактическом поведении; Суть вопроса, по-видимому, заключается в следующем: если ваше приложение становится активным пользователем, взаимодействующим с уведомлением, вы получите указатель на уведомление, а если пользователь непосредственно коснется значка вашего приложения, вы этого не сделаете.

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

Если ваше приложение находилось в состоянии «Не работает»:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    UILocalNotification *launchNote = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (launchNote){
        // I recieved a notification while not running

    }
}

Если ваше приложение работает в любом состоянии:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    // I recieved a notification
}

В случае, если пользователь решает отменить уведомление в стиле оповещения, это уведомление исчезает.

Поистине досадная противоречивая часть заключается в том, что если вы отправляете баннерное уведомление и пользователь нажимает на ваш значок, вы, похоже, не сможете найти ссылку на представленные уведомления в центре уведомлений. то есть они не отображаются в массиве [[UIApplication sharedApplication] scheduledLocalNotifications], предположительно потому, что они больше не запланированы, а теперь представлены.

Итак, вкратце; Документация неверна. И есть другие досадные несоответствия. Если это вызывает у вас проблемы, вы должны сообщить об ошибке в Apple.

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