Локальные уведомления iOS 10 не работают (переход на платформу UserNotifications)

У меня есть приложение, в котором локальные уведомления работают нормально в iOS 9.
Я обновляю приложение до iOS 10.

После обновления до Swift 3 я перенес локальные уведомления в новую структуру UserNotifications (я будет поддерживать только iOS 10, так что все в порядке).
Однако я не получаю никаких уведомлений в этом приложении. Тот же код в ванильном приложении работает.

Я запросил авторизацию для уведомлений, и эта часть работает нормально.
Я также пытался добавить UserNotification.framework, но это не имеет никакого значения.

В чем может быть причина не отображения уведомлений после миграции?


person Mikrasya    schedule 02.10.2016    source источник
comment
Недостаточно информации. Есть много шагов, чтобы заставить уведомления работать. Вы не доказали, что совершили какое-либо из них.   -  person matt    schedule 02.10.2016
comment
Интересно, что вы говорите, что тот же код в ванильном приложении работает. Что произойдет, если вы измените идентификатор пакета? Тогда он начинает работать?   -  person matt    schedule 02.10.2016
comment
Нет. Я изменил идентификатор пакета, как указано здесь: stackoverflow.com/questions/39779370/, по-прежнему без изменений.   -  person Mikrasya    schedule 02.10.2016
comment
Да, это тот, о котором я думал.   -  person matt    schedule 02.10.2016
comment
Одна вещь, которую я заметил, заключается в том, что установка UNUserNotificationCenter.current().delegate = self в didFinishLaunchingWithOptions в делегате приложения дает сообщение об ошибке в моих приложениях (как в ванильном, так и в перенесенном приложении), в то время как в загруженном демонстрационном приложении все в порядке. Я не вижу разницы между моими приложениями и демонстрационным приложением, которая могла бы вызвать это. Сообщение об ошибке: невозможно присвоить тип значения AppDelegate типу UNUserNotificationCenterDelegage?   -  person Mikrasya    schedule 02.10.2016
comment
Это очень важно. Объект делегата должен официально объявить, что он принимает протокол UNUserNotificationCenterDelegate. В противном случае методы делегата не вызываются.   -  person matt    schedule 02.10.2016
comment
Делегат также должен быть установлен до application:didLaunchWithOptions:, иначе он не будет работать.   -  person Leo Natan    schedule 02.10.2016
comment
Лео Натан и Мэтт. Я не хочу использовать метод делегата; Я просто хочу получать уведомления. Как я уже упоминал, в ванильном приложении нет проблем, даже если оно имеет такое же сообщение об ошибке для установки делегата. Объявление AppDelegate с подтверждением UNUserNotificationCenterDelegate устраняет сообщение об ошибке. Похоже, это требование в Swift 3. Спасибо.   -  person Mikrasya    schedule 02.10.2016
comment
Сообщение делегата — это то, как вы получаете уведомление.   -  person matt    schedule 03.10.2016


Ответы (1)


Как-то вопросы решаются. Я пробовал несколько вещей, поэтому я не знаю, какое решение было :(. С другой стороны, я сделал одну ошибку, которая очень усложнила мне отладку. Похоже, identifier в UNNotificationRequest должен быть уникальным. Раньше я запланировать несколько уведомлений и установить для всех один и тот же идентификатор. Это привело к тому, что все предыдущие уведомления были перезаписаны самым последним из запланированных.

person Mikrasya    schedule 08.10.2016
comment
Должен ли я или могу ли я удалить весь этот вопрос, поскольку я не верю, что он кому-либо поможет, поскольку неясно, каково решение? - person Mikrasya; 08.10.2016
comment
У меня была аналогичная проблема (здесь: stackoverflow .com/questions/41785105/) и обнаружил, что content.body не может быть пустым, чтобы он работал. Изначально я установил только заголовок, но когда добавил тело, появилось уведомление. Может быть, это была одна из вещей, которые вы изменили. - person koen; 22.01.2017