Все запланированные уведомления появляются сразу при перезагрузке телефона только на Android (Ionic framework)

Вот моя проблема: давайте рассмотрим, например, что у меня есть функция, которая планирует уведомление каждую неделю. Таким образом, через пять недель после установки моего приложения у меня было бы 5 отображаемых уведомлений (по одному каждую неделю). Затем я перезагружаю телефон (по какой-то причине), и все уведомления, которые отображались в течение этих пяти недель, появляются сразу. Я не понимаю, почему предыдущие запланированные уведомления появляются сразу после перезагрузки телефона? (Кстати, я отменяю эти уведомления после того, как они были показаны). Эта проблема появляется только на ANDROID, то же самое приложение на IOS работает отлично. Итак, как появляются эти уведомления? Они вроде никогда полностью не отменяются? Я пробовал несколько вариантов, чтобы избежать этой проблемы, но она не хочет уходить. Любые идеи?

Большое спасибо!

PS: я использую этот плагин для локальных уведомлений: katzer/cordova-plugin-local-notifications


person PainAndGain    schedule 17.04.2016    source источник
comment
Все 5 появляются сразу, только по истечении запланированного времени? Или скажем например вы запланировали 5, сразу после этого перезагрузите устройство, а потом они все появляются?   -  person Nic Raboy    schedule 26.04.2016
comment
@NicRaboy Привет, Ник, все они появляются сразу только по истечении запланированного времени. Другими словами, если запланированное время не прошло и я перезагружаю телефон, ничего не появится. На самом деле, если я запланировал 5 уведомлений, то при перезагрузке устройства будут отображаться только те, для которых запланированное время прошло. Таким образом, если для 5 запланированных уведомлений запланированное время проходит только для 3 из них. Потом, когда я перезагружу телефон, появится сразу только 3 уведомления.   -  person PainAndGain    schedule 26.04.2016
comment
Я могу ошибаться в этом, но похоже, что это должно быть ожидаемым поведением. Когда мой Android-телефон умирает, и я загружаю его через 12 часов после зарядки, я получаю огромное количество уведомлений. Всегда считал, что это нормально. Возможно, iOS просто делает что-то по-другому.   -  person Nic Raboy    schedule 26.04.2016
comment
Но если уведомление было отменено до выключения устройства, при его загрузке уведомление не должно появляться. Я ошибаюсь в этом?   -  person PainAndGain    schedule 26.04.2016
comment
Ну, я мог бы сформулировать проблему по-другому: я хочу, чтобы мое уведомление отменялось через несколько секунд, даже когда приложение закрыто. Как я мог это сделать? По-видимому, проблема в том, что уведомление никогда не отменялось, так как я мог программно запланировать уведомление и сказать отменить через 30 секунд?   -  person PainAndGain    schedule 26.04.2016
comment
Вы не знаете. Приложения Cordova плохо работают в фоновом режиме, поэтому вам нужно будет вызвать отмену, используя идентификатор, который вы использовали, когда запланировали его на переднем плане. github.com/katzer/cordova-plugin -local-notifications/wiki/   -  person Nic Raboy    schedule 26.04.2016
comment
Это то, что я сделал. Но если я правильно вас понял, если я не открою приложение, отмена не сработает? Вот последний сценарий, которым я вас побеспокою: 1) пользователь открывает приложение. 2) уведомление запланировано на завтра. 3) пользователь закрывает приложение. 3) на следующий день он получает уведомление правильно, НО оно не отменяется, потому что для отмены уведомления ему необходимо повторно открыть приложение, чтобы уведомление. отмена действовала. Это правильно?   -  person PainAndGain    schedule 26.04.2016


Ответы (1)


Я нашел ответ.

iOS отменяет уведомления после их запуска. Андроид нет. Поэтому, если пользователь открывает приложение, скажем, вы запланировали появление уведомления через два дня, а затем закроете его и больше не будете открывать, через два дня он получит уведомление, как и было запланировано. Но если он никогда не откроет приложение повторно, это уведомление никогда не будет отменено на Android, и уведомление будет появляться снова каждый раз, когда вы перезагружаете телефон. Для отмены пользователь должен повторно открыть приложение, чтобы фрагмент кода, который вы написали для отмены уведомления, мог быть запущен. Это очень раздражает, потому что цель уведомления (по крайней мере, в моем случае) — позволить пользователю получить информацию, не открывая приложение. К счастью, на iOS уведомления отменяются сами по себе, поэтому все работает отлично.

Спасибо Нику Рабою за его время и помощь.

person PainAndGain    schedule 28.04.2016
comment
Да, Android может быть немного странным с уведомлениями. Рад, что у вас получилось :-) - person Nic Raboy; 28.04.2016