- Чиним Push уведомления на Android
- Push уведомления
- Что делать если сообщения вообще не доставляются?
- Samsung Galaxy S6
- На устройствах ASUS
- На устройствах HUAWEI
- На устройствах Meizu
- На устройствах Lenovo
- На устройствах Samsung
- На устройствах XIAOMI MIUI
- На устройствах ZTE
- Как закрепить приложение в оперативной памяти устройства
- Уведомления на телефоне приходят с задержкой? Исправить очень просто.
- Настройка работы приложений в фоновом режиме.
- Push-уведомления приходят с большей задержкой
- Push уведомления в Android. Грабли, костыли и велосипеды
Чиним Push уведомления на Android
Push уведомления
Важным фактором безопасности является скорость реагирования на событии. Сообщение о событии или инциденте пришедшее на 10 минут позже или не пришедшее вовсе, в большинстве случаев лишает смысла все вложения в системы видеонаблюдения, охраны, контроля доступа, умного дома. Для частных домов, квартир, офисов, небольших магазинов, без собственного охранного персонала, мы всегда устанавливаем системы, контролируемые через смартфон или планшет, которые позволяют просматривать видео, управлять автоматикой, открывать и закрывать дверные замки и ворота, краны и прочие устройства. И часто приходится слышать, что приложение работает плохо, что-то делает, а уведомления не доставляет. Но это не всегда вина разработчика. Часто причина бывает в смартфоне, точнее в его операционной системе. Давайте починим Push уведомления.
За доставку сообщений на ваш телефон отвечает сервис доставки Push уведомлений от Google и операционная система, а дальше они передают сообщение приложению, которому оно предназначалось. На устройствах компании Apple обычно проблем не бывает, а вот на устройствах на базе Android доставка уведомлений сделана так, что разработчикам приложений стоит большого труда, чтоб заставить сообщения приходить и приходить вовремя, и им это не всегда удается. Собственно сам Android не препятствует доставке сообщений, проблемы возникают из-за того, что у каждого производителя есть куча собственных надстроек и «улучшений» базовой операционной системы.
Давайте разбираться.
Что делать если сообщения вообще не доставляются?
Вот несколько возможных причин:
- Пользователь не зарегистрировал на телефоне ни один активный аккаунт Google;
- Устаревшая версия Сервиса Google Play. Необходимо обновить её, для этого может потребоваться обновить и всю систему смартфона;
- Выключены уведомления для приложения (галочка на страничке приложения в настройках телефона);
- Ограничена работа приложения в фоновом режиме (настройка расположена в меню «Использование данных»);
Чтоб ваш приложение системы охраны, или например от WhatsApp, Telegram, Skype, Vider, получило сообщение, ваш телефон должен обратиться на сервер и проверить, если для него новое сообщение, забрать, если есть, и передать нужному приложению, чтоб оно уже отобразило. Это значит, что телефон постоянно должен держать соединение с интернетом, даже если лежит у вас в кармане. Это всё расходует батарею телефона, и многие производители, стараясь продлить время работы смартфона на одной зарядке, запрещают Push уведомления, или делают проверку очень редкой.
Но если доставка сообщения из социальных сетей с задержкой в несколько минут, обычно не критична, то для систем безопасности и охраны важна каждая секунда.
Итак, причины задержек Push сообщений стоит искать именно в «системах экономии энергии»(например, Stamina на устройствах Sony), «оптимизации приложений» и т.д. и тут каждый производитель смартфонов на базе Android выдумывает свой велосипед, и часто переделывает его от обновления к обновлению.
В этой статье мы постараемся собрать описания по отключению этих оптимизаций энергопотребления Push сообщений для разных телефонов.
Стоит сказать, что именно отключение Push уведомлений на энергопотреблении сказывается очень слабо, в сравнении с потреблением LTE или прожорливого приложения. Включение или отключение оптимизаций Push сообщений, изменяет срок работы смартфона на одной зарядке максимум на пару процентов.
Samsung Galaxy S6
Приложение, которое нам вредит на Samsung Galaxy S6, называется Smart Manager. Это отдельное приложение, которое можно найти и в системных настройках.
В приложении Smart Manager, нужно нажать ОПЦИИ, в правом верхнем углу. «Настройка уведомлений». И включить переключатель «Ухудшение производительности». Название очень странное и путающее, с учетом того что производительность оно ухудшает именно в выключенном положении. Чтоб получать Push уведомления, положение переключателя должно быть как на картинке. Переключатель «Энергосбережение» особого эффекта не производит, но можно тоже включить.
На устройствах ASUS
- могут быть следующие проблемы и пути их решения:
На устройстве ASUS ZenFone 2 приложения могут не запуститься после перезагрузки устройства или выгрузки приложения из оперативной памяти устройства. Чтобы решить эту проблему, разрешите автоматический запуск для приложения в настройках Менеджера автозапуска.
На устройствах HUAWEI
могут быть следующие проблемы и пути их решения:
- Если включен режим энергосбережения, всплывающие окна могут не отображаться. Чтобы решить эту проблему, добавьте приложение в список Защищенных приложений в Менеджере батареи.
- Приложение может быть выгружено из оперативной памяти устройства средствами операционной системы. Чтобы решить эту проблему, закрепите приложение в оперативной памяти устройства с помощью Диспетчера приложений и добавьте его в список Защищенных приложений в Менеджере батареи.
На устройствах Meizu
могут быть следующие проблемы и пути их решения:
- Приложение может работать некорректно, если устройство находится в спящем режиме. Чтобы решить эту проблему, перейдите в Настройки > Устройство > Управление питанием > Энергосбережение > Оптимизация энергосбережения > Управление спящим режимом и разрешите приложению продолжать работу в спящем режиме.
- Приложение может не отображать информацию о событиях. Чтобы решить эту проблему, разрешите приложению отображать уведомления в Центре безопасности на устройстве.
- Приложение может не запуститься после перезагрузки устройства или выгрузки из оперативной памяти. Чтобы решить эту проблему, разрешите автоматический перезапуск для него.
- Приложение может выгружаться из оперативной памяти устройства.
Для корректной работы закрепить приложение в оперативной памяти устройства
На устройствах Lenovo
могут быть следующие проблемы и пути их решения:
- Приложение может быть выгружено из оперативной памяти устройства средствами операционной системы. Если приложение выгружено, оно может не запуститься во время входящего телефонного звонка. Чтобы решить эту проблему, вам нужно закрепить приложение в оперативной памяти устройства.
На устройствах Samsung
могут быть следующие проблемы и пути их решения:
- Приложение может не запуститься после перезагрузки устройства. Чтобы решить эту проблему, разрешите автоматический перезапуск для него. Например, используйте приложение Smart Manager. Перейдите в Smart Manager > ОЗУ > Прил.Автозагр. и включите переключатель него.
На устройствах XIAOMI MIUI
могут быть следующие проблемы и пути их решения:
- Приложение может не отображать информацию о событиях, если приложению не были выданы права на отображение всплывающих окон. Вы должны вручную выдать приложению права на отображение всплывающих окон. Тогда приложение сможет отображать всплывающее окно с информацией о входящих звонках. Как предоставить права вручную: Откройте приложение Настройки, перейдите в раздел Приложения, найдите нужное приложение, в разделе Разрешения предоставьте разрешение на отображение всплывающих окон.
- Приложение может выгружаться из оперативной памяти устройства. Для корректной работы приложения вам нужно закрепить приложение в оперативной памяти. Как закрепить приложение в оперативной памяти устройства
- Приложение может перестать работать, находясь в фоновом режиме, даже если оно было закреплено в оперативной памяти. Чтобы решить эту проблему, измените параметры контроля приложений в настройках батареи (перейдите в Настройки > Батарея и производительность > Активность приложений > Название приложения > Нет ограничений).
- Приложение может не запуститься после перезагрузки устройства или выгрузки из оперативной памяти. Чтобы решить эту проблему, разрешите автоматический перезапуск для него в Центре безопасности на устройстве.
На устройствах ZTE
могут быть следующие проблемы и пути их решения:
- Приложение может не запуститься после перезагрузки устройства или выгрузки из оперативной памяти. В этом случае вам следует запустить приложение вручную.
- Приложение может быть выгружено из оперативной памяти устройства средствами операционной системы. Чтобы решить эту проблему, вам нужно закрепить приложение в оперативной памяти. Как закрепить приложение в оперативной памяти устройства.
- Приложение может остановить свою работу, находясь в фоновом режиме, даже если оно было закреплено в оперативной памяти. Чтобы решить эту проблему, измените параметры контроля приложений в настройках батареи. Для этого перейдите в Настройки > Батарея > Экономия заряда батареи > Все приложения > Название приложения > Не экономить.
- Уведомления могут не отображаться или отображаться некорректно. Чтобы решить эту проблему, перейдите в Настройки > Приложения > Название приложения > Уведомления > Считать важными.
Как закрепить приложение в оперативной памяти устройства
Откройте Менеджер задач. Например, нажмите и удерживайте среднюю кнопку, пока на экране не появится список всех запущенных приложений.
Найдите приложение.
Нажмите значок Замок рядом с названием приложения.
Значок Замка показывает, что приложение закреплено в оперативной памяти.
Источник
Уведомления на телефоне приходят с задержкой? Исправить очень просто.
Нет ничего хуже, чем взять свой телефон, включить его, и понять, что только что полученное уведомление пришло с задержкой в 10 минут (или даже часов) назад. Досадно, что основной причиной этого часто является сам Android, пытающийся управлять временем автономной работы телефона, заставляя «низкоприоритетные» приложения переходить в спящий режим, а конечным результатом являются задержанные уведомления. К счастью, Android предлагает вам возможность настроить это поведение на определенном уровне, в зависимости от версии ОС, чтобы вы могли быть более уверены, что уведомления будут приниматься при их отправке, а не тогда, когда ваш телефон решит, что вам следует получить их.
Исправить это относительно просто, и хотя поначалу настройка оптимизации батареи может показаться немного запутанной, на самом деле это всего лишь несколько быстрых шагов для решения этой надоедливой проблемы.
Настройка работы приложений в фоновом режиме.
Следующие действия должны работать для большинства телефонов Android. Однако некоторые производители смартфонов полностью заменяют оптимизацию батареи Android для своих собственных реализаций. В этих случаях вам нужно обратиться к руководству для конкретного производителя.
- Запустите приложение «Настройки» и перейдите раздел «Приложения».
- Выберите нужное приложение
- В верхней части экрана нажмите «Не оптимизировано», а затем нажмите «Все приложения». Теперь вы должны увидеть список всех приложений на вашем телефоне. Каждое приложение помечено как «Разрешено» или «Не разрешено». Разрешено означает, что ваш телефон может перевести приложение в спящий режим, когда оно находится в фоновом режиме.
- Найдите приложение, которое вас интересует, и коснитесь его. Во всплывающем окне выберите «Не разрешать» и подтвердите свой выбор, нажав «ОК».
Вот и все — хотя вам нужно будет повторять этот процесс для каждого приложения, которое вы хотите держать бодрым в фоновом режиме . Эти настройки должны выдержать перезагрузку вашего телефона и позволят этим приложениям нормально работать. Если вы когда-нибудь захотите снова включить оптимизацию батареи, просто вернитесь в то же самое меню и найдите приложения, которые вы освобождали в списке «неоптимизировано».
Источник
Push-уведомления приходят с большей задержкой
То же самое на samsung s 10
Пользуюсь неделю. на Андроид 9.
До этого был 7 андроид и все было быстро. Мне кажется дело в андроиде.
То же самое на samsung s 10
Пользуюсь неделю. на Андроид 9.
До ээтого был 7 андроид и все было быстро. Мне кажется дело в андроиде.
Возможно, я ставил андроид 8, та же проблема, видимо приложение не приспособлено к андроид 8, 9. Нужно что бы разработчики нашли проблему и исправили. Проблема явно в приложении так как от других приложений уведомления приходят без проблем.
Возможно, я ставил андроид 8, та же проблема, видимо приложение не приспособлено к андроид 8, 9. Нужно что бы разработчики нашли проблему и исправили. Проблема явно в приложении так как от других приложений уведомления приходят без проблем.
8 андроида у меня не было, сразу перепрыгнул с 7 на 9 и уведомления иногда вообще не приходят, но как только открываешь метатрейдер на телефоне — сразу все приходит.
Пробовал в настройках разрешить фоновую работу — не помогает.
Источник
Push уведомления в Android. Грабли, костыли и велосипеды
На написание данной статьи меня подтолкнула задача, которая была поставлена передо мной в одном из рабочих проектов: реализовать Push-уведомления в приложении. Казалось, все просто: штудируешь документацию, примеры и вперед. К тому же, опыт работы с уведомлениями уже был. Но не тут то было…
Сервис, в рамках которого реализовано приложение под Android, предъявляет довольно жесткие требования к работе Push-уведомлений. Необходимо в пределах 30-60 секунд оповестить пользователя о некотором действии. При успешном оповещении с устройства пользователя отправляется запрос на сервер с соответствующим статусом. Из документации известно, что сервис GCM (Google Cloud Messaging) не гарантирует доставку PUSH-уведомлений на устройства, поэтому в качестве backdoor варианта, при нарушении этих временных рамок, наш сервис уведомляет пользователя с помощью SMS сообщения. Поскольку стоимость SMS сообщения существенно выше чем PUSH-уведомления, необходимо максимально сократить поток SMS сообщений на клиентские устройства.
Проштудировав документацию и прикрутив пуш-уведомления, мы разослали нескольким клиентам первую сборку приложения для теста и стали ждать. Результаты были примерно следующими:
- при активном Wifi соединении все работает идеально: уведомления доставляются, клиенты рады.
- при активном мобильном интернете началось самое веселье.
Некоторые клиенты писали, что испытывают задержки в доставке пушей, либо получали одновременно и PUSH и SMS, что достаточно не практично. Другие писали, что вовсе не получали уведомлений, а только SMS. У третьих, как и у нас на тестовых устройствах, все было ок. Собрав с недовольных клиентов максимально возможную информацию, стали разбираться в проблеме и вывели следующий список ограничений (этот список позже вылился в полноценный FAQ):
- включенный режим Энергосбережения (например, Stamina на устройствах Sony) влияет на работу Push уведомлений;
- у пользователя обязательно должен быть минимум 1 активный Google аккаунт на устройстве;
- необходимо удостовериться в том, что на устройстве установлена актуальная версия приложения “Сервисы Google Play”;
- проверить, не отключены ли уведомления для приложения (галочка на страничке приложения в настройках телефона);
- проверить, не ограничена ли работа фонового режима для приложения (настройка расположена в меню «Использование данных»);
- в документации к GCM указано, что уведомления рассылаются только по определенным портам, поэтому настройки роутера, файервола и антивируса так же стоит учитывать.
Разослав данную памятку по всем клиентам, мы снова стали ждать результатов. И они оказались снова «не очень». Стали копать дальше.
На данном этапе очень сильно помогла статья, написанная ребятами из Mail.ru. В ней очень подробно описаны тонкости реализации GCM на клиентской стороне, а так же моменты, в связи с которыми отказываются работать Push уведомления в мобильных сетях. В конечном счете было принято решение о том, чтобы держать свое соединение с сервером в связке с GCM.
Перед тем, как приступить к решению, стоить выделить несколько очень важных моментов, которые позволяют сузить круг потенциально «нерабочих» устройств:
- проблема возникает только при подключении к мобильному интернету;
- по данным клиентов, проблема возникает на версии андроида 4 и выше.
И так, перейдем к реализации.
Бывалый разработчик под Android сходу скажет, что решений задачи как минимум 2: использовать Service или AlarmManager. Мы попробовали оба варианта. Рассмотрим первый из них.
Для того, чтобы создать неубиваемый системой сервис, который постоянно будет висеть в фоне и выполнять нашу задачу, мы использовали метод:
- notificationId — некоторый уникальный идентификатор уведомления, который будет выведен в статус баре и в выезжающей шторке;
- notification — само уведомление.
В данном случае обязательным условием является отображение уведомления в статус баре. Такой подход гарантирует то, что сервису будет дан больший приоритет (поскольку он взаимодействует с UI частью системы) в момент нехватки памяти на устройстве и система будет выгружать его одним из последних. Нам это уведомление не нужно, поэтому мы воспользовались следующим велосипедом: достаточно запустить одновременно с первым сервисом второй и для обоих сервисов в качестве notificationID использовать одно и тоже значение. Затем убить второй сервис. При этом уведомление пропадет из статус бара, но функциональные и приоритетные возможности первого сервиса останутся.
Реализовав данный подход, мы отправили сборку на тест. По результатам выяснилось, что система все-таки выгружает сервис, а по логам мы видели, как происходили существенные временные разрывы при запросе данных в фоне с нашего сервера. Поэтому приступили к реализации второго варианта — AlarmManager.
AlarmManager — это класс, который предоставляет работу с, грубо говоря, «будильником». Он позволяет указать время, по достижении которого система отправит широковещательное уведомление, которое позволит пробудить наше приложение и даст ему возможность выполнить необходимые действия. В работе этого метода есть некоторые ограничения, и их необходимо обработать:
- данные о «будильниках» будут стерты после перезагрузки устройства;
- данные о «будильниках» будут стерты после обновления приложения.
Первыми граблями, на которые мы наступили, был метод
который позволяет установить повторяющийся с некоторым интервалом «будильник». Прикрутив данный способ, стали тестировать, и тесты показали обратное — «будильник» не повторялся. Стали разбираться в чем дело, посмотрели документацию. И именно там нашли ответ на вопрос — начиная с 19 API lvl (Kitkat) абсолютно все «будильники» в системе стали разовыми. Вывод — всегда читайте документацию.
Эти грабли не были поводом для расстройства, ведь решение задачи довольно простое — запускать единоразовый «будильник» и после срабатывания переустанавливать его. При реализации этого подхода мы наткнулись на следующие грабли — оказалось, что для разных уровней API необходимо по разному устанавливать будильники, при этом в документации ничего сказано не было. Но данная проблема решилась достаточно просто — методом «тыка» и «гугления». Ниже представлен пример кода, позволяющий правильно устанавливать «будильники»:
Хочу обратить внимание на флаг AlarmManager.RTC_WAKEUP — именно с помощью него система позволит нашему приложению «проснуться» при неактивном экране, когда устройство находится в заблокированном состоянии.
Данный подход с «будильникам» дал нам нужный результат — приложение в фоне корректно опрашивает сервер на наличие новых данных. Сейчас мы дорабатываем алгоритм. На данный момент реализуем и тестируем следующую оптимизацию, которая позволит сузить круг устройств и тем самым уменьшить нагрузку на сервер:
- в сообщении, отправленном средствами GCM на устройство, содержится некоторый уникальный ID;
- получив данные GET запросом в фоновом режиме проверяем, существуют ли уже запись с таким ID на устройстве;
- если локально на устройстве таких данных нет, мы запоминаем этот ID и время его получения T1;
- ждем PUSH с таким же ID, при получении запоминаем время T2 и проверяем разницу между T2 и T1;
- если разница составляет больше некоторого временного критерия (значения), то на устройстве наблюдается проблема с доставкой уведомлений и для корректной работы сервиса необходимо постоянно запрашивать данные в фоновом режиме с сервера (критерий советую выбирать исходя из решаемой задачи. В нашем случае, был выбран критерий равный 5 минутам);
- данную разницу стоит вычислять несколько раз, например 5-10 раз, только после этого делать вывод о том, что устройство действительно содержит проблему с получением Push уведомлений (таким образом исключается ситуация банального разрыва соединения, таймаута и пр.);
- необходимо прогонять данный алгоритм периодически (например, раз в неделю, или после обновления ОС на устройстве).
Всем добра. И поменьше подобных костылей.
Источник