Почему приходят пуш уведомления. Push уведомления в Android. Грабли, костыли и велосипеды

Как сделать плакат

Очень часто маркетологи используют плакаты в своих рекламных кампаниях. Разбираем, как его сделать, на что обратить внимание при дизайне и где лучше разместить.

Плакат - это настоящее искусство. Маркетологи, дизайнеры и художники по всему миру соревнуются в красоте, эффективности и необычности своих шедевров.

Но создать плакат не так просто как может показаться. Дизайнерам нужно учитывать кучу деталей как во время процесса создания, так и после. Читаем, сохраняем и учимся новому.

Что такое плакат

Плакат - это не только красивые изображения знаменитостей, которые в детстве все клеили на стены. В широком смысле, плакат - броское изображение с кратким текстом, выполненное в агитационных, рекламных или учебных целях.

Современный плакат в первую очередь ассоциируют с рекламой, что не совсем верно. Не менее популярен информационный и дизайнерский плакат.

Информационный плакат чаще всего встречается в виде различных афиш. Главная цель таких плакатов - донесение до аудитории важной культурной информации, анонс мероприятий.

Для украшения можно использовать и специально сделанные афиши.

История плаката

Несмотря на то что первые «следы» плакатов встречаются еще в Древнем Египте (изображения с информацией о сбежавших рабах), отцом плаката все же принято называть художника . Француз, по мнению многих, - художник относительно небольшого дарования, что, однако, не помешало ему стать создателем нового жанра. В 1866 году он открыл мастерскую по изготовлению литографических картин, что и стало началом плаката.

Плакаты наглядно разъясняли, почему алкоголь вреден для человека.

Алкоголь увеличивает риск ДТП

Лучше носить короткие волосы, чем лишиться их

Кожух был слишком высоко

Как сделать рекламный плакат

Яркий образ

Как его называют в маркетинге - ай-стоппер. Главная задача - привлечь внимание, вызвать любопытство. В качестве ай-стоппера может выступать нестандартный образ или яркая картинка.

Используйте одно изображение и не забывайте, что плакат будет большого размера, так что и картинка должны быть с хорошим разрешением!

Заголовок

Заголовок не обязателен, но в большинстве случаев он не помешает. Как и картинка, он должен привлекать внимание, а значит - читаться на расстоянии.

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

Текст

Чем меньше текста, тем лучше. Шрифт должен быть крупным. При компоновке текста нужно выделить товарный знак и логотип.

Используйте не более двух шрифтов: один - для основного текста, второй - для заголовка.

Цвет

Выбирайте яркие, контрастные цвета. Контрастирующие оттенки лучше сочетаются и помогают легче читать плакат.

Своими советами по созданию рекламного плаката делится Томас Рассел, преподаватель в Институте современных исследований при Ассоциации рекламных агентств.

  • Упрощайте. Плакаты должны моментально привлекать внимание и быстро рассказывать основную идею.
  • Показывайте выгоду товара.
  • Используйте возможности цвета. Чем ярче реклама, тем лучше. В умеренном количестве.
  • Избегайте двусмысленности. Не все могут сразу понять вашу игру, принять её и положительно отреагировать. Если вы не уверены на 100%, лучше не использовать неоднозначные образы и тексты.
  • Текст должен быть максимально легким и удобным для чтения.

10 признаков хорошего рекламного плаката

Как и где размещать плакаты

Размещение плаката зависит от его вида. Если это рекламный постер, то в первую очередь его размещают на улице: специальных стендах, стенах зданий, заборах, остановках - везде, где бы его заметило как можно больше прохожих. Важно, чтобы ничего вокруг не отвлекало от плаката и не мешало ему. Он должен быть в центре внимания.

То же самое касается и информационного плаката, для которого главное - охват большой аудитории.

Другое дело - декоративные плакаты. Вот несколько советов по их размещению.

Наиболее выигрышно постеры смотрятся на однотонных поверхностях. И неважно, где именно: в гостиной, на кухне, в ванной или в ресторане.

Кроме того, плакаты можно по-разному размещать на стене.

Горизонтальный ряд.

Таким образом можно заполнить любое пустующее пространство.

Коллаж из четырех постеров.

Подобное размещение отлично подходит для помещений с высокими потолками.

Симметричное расположение.

Если у вас несколько плакатов одинакового размера, симметрия - для вас. К тому же она поможет визуально сбалансировать интерьер комнаты.

Асимметричное расположение.

Для такого размещения лучше использовать плакаты разных размеров. Постеры можно вешать как угодно.

Конструкторы плаката

Если постараться, плакат вполне можно сделать самому, даже не прибегая к помощи дизайнеров. Посмотрите очень удобные и многофункциональные инструменты для создания постеров.

Отличный ресурс для создания не только плакатов, но и баннеров, визиток и различных иллюстраций. Необязательно обладать специальными навыками, чтобы нарисовать крутой постер.

Большой инструментарий и возможности как для рисования, так и для редактирования изображений. А многочисленные шаблоны облегчат и ускорят процесс.

Онлайн-редактор. Немного уступает Canva в наборе инструментов и шаблонов. Тем не менее он отлично подходит для быстрого создания несложного плаката.

Специально для тех, кто хочет создавать свои киноафиши и постеры!

Если срочно нужно сделать несложный плакат, этот онлайн-ресурс как раз для вас!

Углубиться в теорию

Генераторы плакатов

Несколько вдохновляющих
Pinterest-аккаунтов

4 простых правила создания
постера, если вам мало
конструкторов плакатов

Обращайте внимание на то, для кого вы делаете плакат

Текст должен быть читабельным

Восприятие текста находится в приоритете над стилем. По возможности сложных и витиеватых шрифтов следует избегать. Они могут передать определённое настроение и эстетику, но в этом нет смысла, если зрителю приходится несколько секунд концентрироваться, чтобы понять, что написано на плакате. Также важно обращать внимание на размер, межбуквенное и межстрочное расстояния, сочетание цветов.


Все эти факторы влияют на то, как сознание воспринимает то, что написано на плакате. Работая с одним и тем же шрифтом одного и того же цвета можно создать как идеальный с точки зрения восприятия текст, так и совершенно нечитабельный.


Радикальная эстетика футуристов предполагала максимальный уход от привычных форм во всех творческих сферах, в том числе в графическом дизайне.

Не перегружайте плакат

Чаще всего для красивого плаката достаточно двух шрифтов, иногда трёх. Если использовать больше, то, скорее всего, получится нагромождение текста, плакат будет «расползаться» и перестанет восприниматься целостно. То же самое касается и цветов. Слишком щедрое использование цвета может рассеять внимание зрителя и отвлечь его от текста.

Правила можно нарушать

Как и любая творческая работа, типографика не терпит очень жёстких рамок. Все, о чём было рассказано выше, имеет множество исключений во множестве случаев. Странно, например, делать афишу рейва, не используя кричащих кислотных цветов. Важно только понимать, почему плакат должен выглядеть именно так, а не иначе, чтобы в контексте он смотрелся адекватно и гармонично. В конце концов, часто дизайнер изначально понимает, что и как нужно сделать, чтобы максимально реализовать замысел работы, и ориентируется только на свои ощущения.

Плакаты окружают нас повсюду – мы ежедневно видим их на улицах или в печатных изданиях. В основном это реклама и реже анонсы каких либо событий. Политический плакат появляется в поле нашего зрения непосредственно перед выборами, когда начинается агитация и поэтому встречается достаточно редко. Каким должен быть хороший плакат? Прежде всего плакат должен быть информативным. Люди должны мгновенно считывать сообщение – и задача дизайнера заключается в том, чтобы представить идею плаката в максимально понятной форме. И совершенно не важно, какими средствами это будет сделано – главное, чтобы люди сразу же понимали, что им хотят сообщить.

Как правило, дизайн плаката начинается с выбора его размера. В этом плане никаких ограничений не существует – плакат может быть небольшим, к примеру, формата А4 или наоборот, гигантским, размером со стену дома. Конечно, существуют определенные стандарты размеров, но это не вопрос дизайна, а вопрос возможностей типографской техники. Ориентация плаката может быть как вертикальной, так и горизонтальной, но чаще всего используется вертикальная ориентация.

Как отличить хороший плакат от плохого? Это, конечно, вопрос вкуса, однако правильно спроектированный плакат обладает некоторыми признаками. FreelanceToday предлагает вашему вниманию 10 признаков хорошего плаката.

ХОРОШАЯ ЧИТАЕМОСТЬ

Допустим, у нас есть плакат, который сообщает о каком-либо приближающемся событии, например, о концерте популярного исполнителя. Ключевая информация, размещенная на плакате, должна считываться издалека и привлекать внимание людей. Соответственно, в тексте плаката должна присутствовать визуальная иерархия. Если текста достаточно много, то должно быть как минимум три иерархических слоя.

Заголовок . Это самый главный и самый большой текстовый элемент дизайна. Он должен быть контрастным по отношению к фону и набран таким шрифтом, который бы был хорошо различим даже с дальнего расстояния.

Подробности . Что? Где? Когда? Вся подобная информация располагается на втором уровне иерархии. Человек, которого заинтересовал плакат, обязательно захочет ознакомиться с подробной информацией, поэтому ее нужно представить в понятной, но в то же время сжатой форме. Для второго уровня используется шрифт меньшего размера, нежели в заголовке, так как нет необходимости в том, чтобы эта информация считывалась издалека.

Мелкий шрифт . На третьем уровне размещается дополнительная информация. Очень часто мелкий шрифт встречается на кинопостерах и рекламных плакатах.

КОНТРАСТНОСТЬ

У дизайнеров есть всего одна возможность привлечь внимание зрителя. Поэтому плакат должен «цеплять». Добиться этого можно при помощи контрастных элементов. Это в вебе можно сделать бледную иллюстрацию с плавным градиентом и модными тонкими шрифтами – для обычного плаката этот способ подходит плохо. Чем резче текст или иллюстрация контрастирует с фоном – тем заметнее плакат. Приступая к дизайну, нужно в первую очередь определиться с контрастом элементов и постоянно проверять его во время работы. Если дизайнер работает над цветным плакатом, нужно периодически проверять, как он выглядит в оттенках серого – контраст основных элементов должен быть хорошо различим и в этом режиме.

РАЗМЕР И РАСПОЛОЖЕНИЕ

Очень часто дизайнер заранее знает, где будет размещен его плакат. Исходя из этой информации, он должен правильно подобрать размер плаката. Важно, чтобы посылу плаката не мешали различные визуальные помехи – он должен занимать доминирующую позицию. Что касается цветовой гаммы, то тут тоже нужно исходить из реалий – если известно, что плакат будет висеть на стене, окрашенной в зеленый цвет, то лучше не использовать в плакате близкие к зеленому оттенки.

ПЛАКАТ РАБОТАЕТ НЕЗАВИСИМО ОТ РАЗМЕРА

Очень часто начинающие дизайнеры отказываются от заданий, в которых требуется создать большой плакат, допустим, 10 на 6 метров. Им почему-то кажется, что создать такой плакат намного сложнее, чем какой-нибудь постер размером с лист А4. Это большое заблуждение. Если плакат скомпонован правильно, он будет одинаково хорошо смотреться независимо от размера и масштабирование на него никак не влияет. Если дизайнер получил заказ на создание плаката, который затем будет использоваться в рекламе и будет выпущен в самых разных размерах и форматах (в том числе и цифровом), он должен думать прежде всего о композиции и основной идее и не заботиться о том, где будет размещено его творение.

БОЛЬШИЕ ИЗОБРАЖЕНИЯ

Если в плакате используется изображение, то оно должно занимать доминирующую позицию, так же как и в случае с текстом. Изображение должно быть хорошо различимо издалека, при этом очень важно позаботиться об узнавании образа. Сильно усложнять визуальный ряд не стоит – нужно использовать столько элементов, сколько требуется, чтобы донести основную идею. Этот принцип применим ко всем видам плаката, в том числе и к кинопостерам, которые порой бывают слишком перегружены деталями.

НЕГАТИВНОЕ ПРОСТРАНСТВО

Плакат не картина, поэтому дизайнеру просто необходимо работать со свободным пространством. Не стоит стремиться заполнить весь плакат – нужно «оставить воздух». Есть несколько действенных способов повысить читаемость плаката. Например, можно увеличить расстояние между буквами. Тесный кернинг, может быть, хорошо смотрится, на открытке, но для плаката все же важней читаемость. Если буквы расположены слишком близко, то издалека текст становится плохо различимым, что крайне не рекомендуется. Так же можно увеличить расстояние между строками – это тоже пойдет плакату на пользу.

ПРИЗЫВ К ДЕЙСТВИЮ

Цель любого плаката – заставить людей совершить какое-то действие, например, посетить шоу, выставку, купить какой-либо товар или прийти на выборы. Призыв к действию – это самый главный, центральный элемент плаката и дизайнер должен уделить ему основное внимание. В отличие от веб-дизайна, в графике не работает интерактив, поэтому в обычном плакате нельзя использовать его принципы. У графического дизайнера другие инструменты донесения сообщения для людей и он должен приложить все усилия к тому, чтобы призыв к действию был понятен с первого взгляда.

НЕОБЫЧНАЯ ТИПОГРАФИКА

Плакат – это именно тот жанр, где можно смело экспериментировать с типографикой. Некоторые из самых известных плакатов сделаны без использования иллюстраций и графических элементов и при этом отлично выражают идею. Использование качественной типографики придаст плакату индивидуальность – главное, чтобы дизайнер не переусердствовал. Не стоит использовать 10 шрифтов в одном плакате – дизайн от этого лучше не станет. Лучше всего уделить внимание визуальной иерархии и использованию негативного пространства. Буквы сами по себе несут определенный посыл и правильное понимание принципов типографики позволит дизайнерам создавать эмоциональные и запоминающиеся плакаты.

РУЧНАЯ РАБОТА

Появление компьютерной графики явно не пошло на пользу искусству плаката. Раньше дизайнер работал с живыми материалами и плакаты выглядели совершенно не так, как в наши дни. Сегодня признаком хорошего плаката является его техника исполнения. И неважно, что дизайнер создал его на компьютере – если у плаката есть душа и создается впечатление, что дизайнер нарисовал его вручную – это хороший плакат. Ну а если плакат пошел в печать как раньше, с физического носителя – это вообще замечательно.

ДЕРЗОСТЬ

Любому хорошему плакату присущ некоторый эпатаж – это очень усиливает эмоциональный посыл. Так что не стоит бояться выходить за рамки и использовать в плакате необычные элементы. Нарушая какие-то устоявшиеся правила, дизайнер привлекает внимание к плакату, а это как раз то, что нужно.

ВЫВОД : Плакат очень интересный вид графики, который позволяет дизайнерам дать волю своему воображению. К тому же это отличный способ освоить новую технику или улучшить свои навыки. Иногда создание плаката дается очень трудно – ведь требуется донести идею, используя минимум средств. Но в любом случае это интересно – особенно когда плакат получился удачным и привлекающим внимание людей.

26.05.2016

У каждой компании, занимающейся и приложений, есть свои списки любимых клиентов и проектов. Мы любим своих заказчиков, особенно тех, кто, помимо готового продукта в конце, хочет самостоятельно разобраться в технологиях и подняться до уровня специалиста. В ход идут любые методы, но особой популярностью пользуются «пытки вопросами» (любой тестировщик отдыхает).

Технический портрет разрабатываемого приложения

Мы занимались созданием мобильного приложения для магазина одежды, чья архитектура была построена на базовой Activity (для отображения информации используются фрагменты). Для загрузки данных с сервера использовалась библиотека Retrofit, а для их хранения — встроенная зависимая база SQLite. Для выполнения запросов на сервер и для выборки с базы были выбраны Loader"ы.

Чтобы приложение было интерактивным и позволяло обмениваться сообщениями, мы подключили push-уведомления. В данном случае используются ВК и Facebook SDK для реализации авторизации/регистрации через социальные сети и выглядит это так: когда пользователь отправляет сообщение, он отправляет запрос с этим сообщением на наш сервер. Он формирует запрос с сообщением и данными о пользователе, которому адресовалось сообщение, и отправляет всю информацию на сервер Google. Тот формирует с этого запроса push-уведомление и отправляет на устройство пользователя. Наше приложение принимает этот пуш, парсит (обрабатывает) его и отображает в чате — коммуникация реализована.

Возникла проблема: когда приложение начинает работать в фоне или почему push-уведомления приходят только после запуска?

С этим вопросом обратился к нам клиент, поскольку опытным путем он столкнулся со следующей дилеммой: при запуске со второго устройства приложение работает хорошо, но как тогда работает «автозагрузка»?

Рассказываем. Приложение начинает работать в фоне сразу после установки, а подписка на push-уведомления осуществляется после пройденной регистрации в приложении.

Если пользователь не зарегистрируется в нем, то у него не будут работать пуш-уведомления.

Существуют и другие варианты объяснения, на которые следует обратить внимание:

  1. Пуши работают через сервис GCM (Google Cloud Messaging), поэтому если на устройстве отсутствуют Google Play Services, их работа нестабильна либо производитель внес свои доработки в их работу, то пуш-уведомления не будут работать полностью или же в их работе будут наблюдаться перебои. В случае отсутствия сервисов Google Play на телефоне, даже зарегистрироваться на пуши не получится. Конечно, можно это сделать и «принудительно»: если после регистрации подписка на push-уведомления на сервере не удалась, то нужно продолжить попытки при каждом заходе в приложение до успешного результата. Причиной этой ситуации могут быть проблемы с работой сервисов Google Play — в таком случае попытка подписаться может так ничем и закончиться.
  2. Причина некорректного функционирования кроется в неидеальной рабочей среде. Мы рекомендуем нашим клиентам для тестирования, и называем идеальной средой, использование телефонов Google Nexus (на них стоит «чистый» Android безо всяких изменений, а также работа ОС и сервисов на нем идеальна), стабильная работа сервера и интернет-соединения. При таких условиях запросы будут выдаваться правильно, без ошибок и максимально быстро. В таком случае, приложение будет быстро загружать новые данные, отображать их, и не будут возникать проблемы с неправильным отображением информации. В других телефонах (с измененной операционной системойкитайский бренды, Samsung, HTC и т.д.) можно ожидать не только нестабильную работу сервера, но и ограниченные возможности разрабатываемого приложения (из-за системного удаления многих методов-функций) — да, push-уведомления могут быть вообще не предусмотрены.
  3. Не забываем о главном — push-уведомления приходят только в случае стабильного интернет-соединения. Если этого нет, то сообщение придет как только связь будет восстановлена.

Резюме

  • Идеальная среда (безупречный интернет, «чистая» платформа) на то и идеальная, поэтому предупреждайте клиентов о всех возможных ошибках и ограничениях функционала приложения.
  • Не бойтесь вопросов клиентов — они будут тщательно искать недостатки в работе и найдут их! Поблагодарите и исправьте баги оперативно.
  • В первую очередь, создавайте приложение для пользователей, ориентируйтесь на их технические возможности и не создавайте ненужных вещей.
28 декабря 2015 в 12:25

Push уведомления в Android. Грабли, костыли и велосипеды

  • Разработка мобильных приложений ,
  • Разработка под Android

На написание данной статьи меня подтолкнула задача, которая была поставлена передо мной в одном из рабочих проектов: реализовать Push-уведомления в приложении. Казалось, все просто: штудируешь документацию, примеры и вперед. К тому же, опыт работы с уведомлениями уже был. Но не тут то было…

Сервис, в рамках которого реализовано приложение под Android, предъявляет довольно жесткие требования к работе Push-уведомлений. Необходимо в пределах 30-60 секунд оповестить пользователя о некотором действии. При успешном оповещении с устройства пользователя отправляется запрос на сервер с соответствующим статусом. Из документации известно, что сервис GCM (Google Cloud Messaging) не гарантирует доставку PUSH-уведомлений на устройства, поэтому в качестве backdoor варианта, при нарушении этих временных рамок, наш сервис уведомляет пользователя с помощью SMS сообщения. Поскольку стоимость SMS сообщения существенно выше чем PUSH-уведомления, необходимо максимально сократить поток SMS сообщений на клиентские устройства.

Проштудировав документацию и прикрутив пуш-уведомления, мы разослали нескольким клиентам первую сборку приложения для теста и стали ждать. Результаты были примерно следующими:

Некоторые клиенты писали, что испытывают задержки в доставке пушей, либо получали одновременно и PUSH и SMS, что достаточно не практично. Другие писали, что вовсе не получали уведомлений, а только SMS. У третьих, как и у нас на тестовых устройствах, все было ок. Собрав с недовольных клиентов максимально возможную информацию, стали разбираться в проблеме и вывели следующий список ограничений (этот список позже вылился в полноценный FAQ):
  • включенный режим Энергосбережения (например, Stamina на устройствах Sony) влияет на работу Push уведомлений;
  • у пользователя обязательно должен быть минимум 1 активный Google аккаунт на устройстве;
  • необходимо удостовериться в том, что на устройстве установлена актуальная версия приложения “Сервисы Google Play”;
  • проверить, не отключены ли уведомления для приложения (галочка на страничке приложения в настройках телефона);
  • проверить, не ограничена ли работа фонового режима для приложения (настройка расположена в меню «Использование данных»);
  • в документации к GCM указано, что уведомления рассылаются только по определенным портам, поэтому настройки роутера, файервола и антивируса так же стоит учитывать.
Разослав данную памятку по всем клиентам, мы снова стали ждать результатов. И они оказались снова «не очень». Стали копать дальше.

На данном этапе очень сильно помогла , написанная ребятами из Mail.ru. В ней очень подробно описаны тонкости реализации GCM на клиентской стороне, а так же моменты, в связи с которыми отказываются работать Push уведомления в мобильных сетях. В конечном счете было принято решение о том, чтобы держать свое соединение с сервером в связке с GCM.

Перед тем, как приступить к решению, стоить выделить несколько очень важных моментов, которые позволяют сузить круг потенциально «нерабочих» устройств:

  • проблема возникает только при подключении к мобильному интернету;
  • по данным клиентов, проблема возникает на версии андроида 4 и выше.
И так, перейдем к реализации.

Бывалый разработчик под Android сходу скажет, что решений задачи как минимум 2: использовать Service или AlarmManager. Мы попробовали оба варианта. Рассмотрим первый из них.

Для того, чтобы создать неубиваемый системой сервис, который постоянно будет висеть в фоне и выполнять нашу задачу, мы использовали метод:

StartForeground(int notificationID, Notification notification);
где

  • notificationId - некоторый уникальный идентификатор уведомления, который будет выведен в статус баре и в выезжающей шторке;
  • notification - само уведомление.
В данном случае обязательным условием является отображение уведомления в статус баре. Такой подход гарантирует то, что сервису будет дан больший приоритет (поскольку он взаимодействует с UI частью системы) в момент нехватки памяти на устройстве и система будет выгружать его одним из последних. Нам это уведомление не нужно, поэтому мы воспользовались следующим велосипедом: достаточно запустить одновременно с первым сервисом второй и для обоих сервисов в качестве notificationID использовать одно и тоже значение. Затем убить второй сервис. При этом уведомление пропадет из статус бара, но функциональные и приоритетные возможности первого сервиса останутся.

Реализовав данный подход, мы отправили сборку на тест. По результатам выяснилось, что система все-таки выгружает сервис, а по логам мы видели, как происходили существенные временные разрывы при запросе данных в фоне с нашего сервера. Поэтому приступили к реализации второго варианта - AlarmManager.

AlarmManager - это класс, который предоставляет работу с, грубо говоря, «будильником». Он позволяет указать время, по достижении которого система отправит широковещательное уведомление, которое позволит пробудить наше приложение и даст ему возможность выполнить необходимые действия. В работе этого метода есть некоторые ограничения, и их необходимо обработать:

  • данные о «будильниках» будут стерты после перезагрузки устройства;
  • данные о «будильниках» будут стерты после обновления приложения.
Первыми граблями, на которые мы наступили, был метод

SetRepeating()
который позволяет установить повторяющийся с некоторым интервалом «будильник». Прикрутив данный способ, стали тестировать, и тесты показали обратное - «будильник» не повторялся. Стали разбираться в чем дело, посмотрели документацию. И именно там нашли ответ на вопрос - начиная с 19 API lvl (Kitkat) абсолютно все «будильники» в системе стали разовыми. Вывод - всегда читайте документацию.

Эти грабли не были поводом для расстройства, ведь решение задачи довольно простое - запускать единоразовый «будильник» и после срабатывания переустанавливать его. При реализации этого подхода мы наткнулись на следующие грабли - оказалось, что для разных уровней API необходимо по разному устанавливать будильники, при этом в документации ничего сказано не было. Но данная проблема решилась достаточно просто - методом «тыка» и «гугления». Ниже представлен пример кода, позволяющий правильно устанавливать «будильники»:

Private static void setUpAlarm(final Context context, final Intent intent, final int timeInterval) { final AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); final PendingIntent pi = PendingIntent.getBroadcast(context, timeInterval, intent, 0); am.cancel(pi); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { final AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeInterval, pi); am.setAlarmClock(alarmClockInfo, pi); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi); else am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi); }
Хочу обратить внимание на флаг AlarmManager.RTC_WAKEUP - именно с помощью него система позволит нашему приложению «проснуться» при неактивном экране, когда устройство находится в заблокированном состоянии.

Данный подход с «будильникам» дал нам нужный результат - приложение в фоне корректно опрашивает сервер на наличие новых данных. Сейчас мы дорабатываем алгоритм. На данный момент реализуем и тестируем следующую оптимизацию, которая позволит сузить круг устройств и тем самым уменьшить нагрузку на сервер:

  • в сообщении, отправленном средствами GCM на устройство, содержится некоторый уникальный ID;
  • получив данные GET запросом в фоновом режиме проверяем, существуют ли уже запись с таким ID на устройстве;
  • если локально на устройстве таких данных нет, мы запоминаем этот ID и время его получения T1;
  • ждем PUSH с таким же ID, при получении запоминаем время T2 и проверяем разницу между T2 и T1;
  • если разница составляет больше некоторого временного критерия (значения), то на устройстве наблюдается проблема с доставкой уведомлений и для корректной работы сервиса необходимо постоянно запрашивать данные в фоновом режиме с сервера (критерий советую выбирать исходя из решаемой задачи. В нашем случае, был выбран критерий равный 5 минутам);
  • данную разницу стоит вычислять несколько раз, например 5-10 раз, только после этого делать вывод о том, что устройство действительно содержит проблему с получением Push уведомлений (таким образом исключается ситуация банального разрыва соединения, таймаута и пр.);
  • необходимо прогонять данный алгоритм периодически (например, раз в неделю, или после обновления ОС на устройстве).
Всем добра. И поменьше подобных костылей.

P.S.
В процессе тестирования очень помог



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: