Как UIApplication cancelAllLocalNotifications работает между обновлениями приложения?

Кто-нибудь знает, как работает метод cancelAllLocalNotifications в UIApplication? Мне интересно, как именно iOS знает, что нужно отменить. Он знает по идентификатору приложения? Или он каким-то образом использует номер версии приложения?

То, что я испытываю прямо сейчас, — это больше уведомлений, чем я ожидаю. Это рабочий процесс:

  1. Отменить все уведомления при запуске приложения
  2. Расписание уведомлений при выходе из приложения
  3. * При планировании добавьте информацию об уведомлении в список «Последние».
  4. * При планировании запланируйте только 1 уведомление в день (проверено в заявлениях регистрации в XCode, прежде чем я отключу свой телефон).

Теперь вот что я испытываю:

  1. Получайте 4 уведомления в день
  2. Только одно из уведомлений отображается в моем списке «Недавние» (что имеет смысл, потому что это все, что я планирую)

Раньше я устанавливал количество уведомлений в день равным 3. Затем я обновлял номер версии (скажем, с 1.1.0 до 1.1.1) для вызова метода «cancelAllLocalNotifications».

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

Однако, если это не так, и iOS знает об отмене уведомлений, запланированных в предыдущей версии 1.1.0, то я понятия не имею, откуда берутся эти дополнительные уведомления.


person thephatp    schedule 02.03.2012    source источник
comment
При запуске приложения, где вы вызываете команду cancelAllLocalNofications?   -  person greenhorn    schedule 03.03.2012
comment
@vipinagg, хорошая мысль. Я вызываю его в двух местах: (1) в делегате приложения, когда получено уведомление (это неправильно сразу, но оказывается, что не имеет значения b/c того, где находится второе вхождение), и (2) в методе applicationDidEnterBackground я вызываю функцию, которая планирует все уведомления, и первое, что делает эта функция, — отменяет все уведомления, прежде чем планировать новые. Но хорошо, что вы задались вопросом, вызывалась ли она только в application:didFinishLaunchingWithOptions:, но не в applicationWillEnterForeground:.   -  person thephatp    schedule 03.03.2012
comment
Следите за моим ответом на эту тему. http://stackoverflow.com/a/42724415/1720559   -  person Linh Nguyen    schedule 10.03.2017


Ответы (1)


Я считаю, что локальные и удаленные уведомления основаны на идентификаторе приложения (AppleID + BundleID). Поэтому, независимо от версии, вы будете получать уведомления. Я вижу аргумент как за, так и против этой реализации.

Вам нужны какие-то стратегии для работы с этой... функциональностью?

person teamaxe    schedule 02.03.2012
comment
Да, определенно нужны некоторые стратегии для борьбы с этим. По сути, мне нужно каким-то образом отменить все запланированные уведомления до того, как пользователь обновит приложение (из-за наличия нового идентификатора приложения). В качестве альтернативы, хотя я очень сомневаюсь, что это возможно, если бы я мог принудительно отменить после обновления приложения, этого было бы достаточно (сомневаюсь, что Apple предоставляет такой уровень контроля). - person thephatp; 03.03.2012