Подтвердить что ты не робот

IOS UILocalNotification - при запуске приложения в фоновом режиме не задействованы методы делегирования, а значок отображается по уведомлению

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

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

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

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

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

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

Актуально: didFinishLaunchingWithOptions НЕ вызывается. Но были вызваны applicationWillEnterForeground и applicationDidBecomeActive.

4b9b3361

Ответ 1

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

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

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

-(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.