What are push notifications android

Основы успешной реализации push-уведомлений для мобильных приложений

Наши разработчики в Techmas часто сталкиваются с задачами создания уведомлений (push notifications). Несмотря на простоту и популярность технологии, в её реализации есть ряд особенностей, о которых и пойдёт речь в этой статье.

Push-сообщения могут стать великолепным маркетинговым инструментом, если они грамотно реализованы. Любое мобильное приложение или игра должны выполнять не только свои прямые функции, но и (даже в большей степени) так взаимодействовать с пользователями, чтобы последние с удовольствием возвращались в приложение и покупали дополнения к нему. К слову, по статистике сервиса Kahuna хорошо разработанные push-уведомления увеличили показатель возвратов пользователей в приложения более чем в 2 раза. Анализируемые периоды: 30, 60, 90 дней. Но прежде, чем говорить о грамотной реализации, посмотрим, как работают push-уведомления.

Общие сведения о технологии Push Notification

Push-уведомления – это такой способ распространения контента (системных сообщений), когда уведомления отправляются от сервера клиенту по инициативе сервера на основе определённых параметров. В отличие от обратной схемы «клиент-сервер» (Pull), push-технология выгодна тем, что даёт пользователю таргетированную информацию, которая может быть ему полезна, но об этой пользе он может пока не знать.
Изначально технология Push Notification имела отношение не к мобильным приложениям, а к сети PointCast, занимавшейся рассылкой новостей фондового рынка. Эту же систему давно используют суды США для рассылки подписчикам данных о процессах. Позже Microsoft и Netscape включили технологию в свои браузеры, но из-за низкой скорости подключения пользователей в то время она была вытеснена pull-технологией RSS. И лишь потом термин получил широкую известность после внедрения технологии компанией Google в ОС Android (Google Cloud Messaging, GCM) и компанией Apple в iOS 3 (Apple Push Notification Service, APNS). На примере последнего рассмотрим элементарную схему работы Push-уведомлений.

Схема работы Push Notification на примере сервиса APNS


Важно знать! Для того, чтобы уведомление отобразилось на экране устройства, само приложение не обязательно должно быть запущено – именно для реализации этого преимущества посредником здесь выступает OS. Кстати, такой подход позволяет экономить и заряд батареи смартфона (телефона), и трафик.

  • Для получения Push-сообщений OS должна зарегистрировать мобильное приложение;
  • OS запрашивает у APNS идентификатор устройства (токен);
  • Приложение получает токен от сервера APNS;
  • Приложение отправляет токен обратно на сервер, чтобы далее сервер пользовался им для отправки Push-уведомлений;
  • При наступлении события, определённого разработчиком, сервер, используя токены, отправляет Push-сообщения через APNS;
  • APNS делает рассылку уведомлений в приложение.

Зачем нужны промежуточные сервисы

Существуют нюансы в рассылках push-уведомлений для разных мобильных платформ (Android, iOS, Windows Phone). Допустим, если приложение было удалено пользователем, то все сервисы сообщают о том, на какие устройства не следует больше отсылать уведомления. Осуществляется данный процесс посредством сообщения серверу токенов этих устройств. Однако если у GCM отсылка идентификаторов происходит сразу, то у APNS имеется специальный feedback server (сервер обратной связи), с которого список таких токенов забирается раз в сутки. Для рутинной работы с этими различиями и нужны промежуточные сервисы.

В случае разработки мобильного приложения с помощью какого-либо кроссплатформенного решения (к примеру, Appcelerator) такой промежуточный сервис, как правило, интегрирован в него. Допустим, в том же Appcelerator это Appcelerator Cloud Services (ACS), представляющий собой дополнительный сервис каналов уведомлений. Такой канал (channel) объединяет несколько устройств, являясь своеобразным идентификатором, состоящим из цифр и букв. ACS даёт возможность отправлять пуши и по токену устройств. Итак, данный промежуточный сервис берёт на себя функцию обновления информации об устройствах и взаимодействует с APNS и GCM.

Схема такого взаимодействия выглядит так:

  • При разработке мобильного приложения в него внедряется ключ, который выдаёт ACS;
  • Любое уведомление является словарём формата JSON, состоящим из токена девайса, некоторой служебной информации и полезной нагрузки. Полезная нагрузка (payload) – это сами данные, которые отправляются на телефон.
  • Сервер, пользуясь ключом:
    • получает список каналов и устройств, подписанных на каналы;
    • подписывает (и отписывает) устройства на определённые канал;
    • отправляет push-уведомления на все устройства или только по определённым токенам или каналам устройств.

  • Устройства, в зависимости от их операционной системы, получают push-сообщения от GCM или APNS.

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

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

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

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

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

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

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

Сервисы автоматизации Push-рассылки

Push Woosh. Выдаёт удобные и понятные отчёты, совместим со многими платформами, отлично сегментирует аудиторию по разным группам признаков.

Urban Airship. Осуществляет таргетинг и анализ аудитории, позволяет выбирать различные стратегии удержания пользователя и создавать уведомления расширенного формата.

Appsfire`s Appbooster. Бесплатный сервис со стандартным набором функций.

Parse Push. Позволяет собирать уникальные данные для аналитики, с лёгкостью интегрируется в любое приложение.

В заключение отметим, что push-уведомления, конечно, являют собой простой и эффективный способ возврата и удержания пользователя в частности и мощный маркетинговый инструмент в целом. Но это с точки зрения пользователя. Со стороны разработчика же существуют некоторые сложности. Реализация уведомлений сильно зависит от внешних вводных: изменения в OS или в промежуточном софте приводит к необходимости доработки приложения. Так, в Appcelerator появился новый инструмент Arrow Push, который пришел на смену ACS – и это лишь один из примеров. Более того, доставка пуша не гарантирована в принципе, а это поднимает вопрос о надёжности технологии Push Notification. Однако любая технология имеет свои плюсы и минусы, и что перевешивает в данном случае – вопрос открытый.

Источник

Как начать работу с Push-уведомлениями на Android

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Введение

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

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

Google Cloud Messaging, GCM для краткости — это бесплатный сервис, который вы можете использовать для отправки push-уведомлений вашим пользователям. В этом уроке вы узнаете, как использовать его для создания приложения для Android, которое может получать push-уведомления, и простой Python скрипт на стороне сервера, который может их генерировать и отправлять.

Зачем использовать Google Cloud Messaging?

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

Обычно это достигается за счет поддержания постоянного TCP/IP-соединения — соединения, которое остается постоянно открытым между сервером и клиентом. Это может показаться замечательным, но если у вас популярное приложение, поддержка тысяч постоянных соединений между вашим сервером и устройствами ваших пользователей может быть очень дорогостоящим.

Google Cloud Messaging — это служба, которая решает эту проблему, выступая в качестве посредника между вашим сервером и устройством вашего пользователя. С помощью GCM Google’s Cloud Connection Server, часто называемый CCS, управляет постоянными подключениями для вас. Он также обеспечивает надежную доставку ваших push-уведомлений.

Предпосылки

Чтобы следовать за мной, вам нужно:

  • Последняя версия Android Studio
  • Python 2.7.6 или выше
  • Устройство под управлением Android 4.4 или выше с установленными сервисами Google Play

1. Настройка проекта Android Studio

Запустите Android Studio и создайте новый проект с пустой Activity . Если вы использовали значения по умолчанию, проект должен включать класс Java в MainActivity.java.

Шаг 1: добавьте зависимости

В этом проекте мы будем использовать Google Services gradle plugin для настройки GCM. Включите его в проект, добавив следующую строку в раздел dependencies в build.gradle проекта:

Затем примените плагин в модуле app build.gradle:

Чтобы иметь возможность использовать API GCM, добавьте com.google.android.gms: play-services Как compile зависимость в том же файле:

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

Чтобы исправить ошибку, нажмите ссылку «Установить репозиторий и синхронизировать проект».

Шаг 2: обновите манифест

Внутри файла AndroidManifest.xml проекта создайте и используйте специальное разрешение C2D_MESSAGE на основе имени пакета вашего проекта. Убедитесь, что для параметра ProtectionLevel установлено разрешение в значение signature.

Уведомления поступают в виде трансляций. Для обработки этих трансляций нашему приложению требуется BroadcastReceiver . Однако нам не нужно создавать его вручную. Вместо этого мы можем использовать класс GcmReceiver как BroadcastReceiver .

У BroadcastReceiver должен быть intent-filter , который отвечает на действие com.google.android.c2dm.intent.RECEIVE , а имя его category должно соответствовать имени пакета вашего проекта. Добавьте в манифест следующий код:

2. Получите ключ API сервера и идентификатор отправителя

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

Начните с нажатия кнопки «Выбрать платформу». Затем нажмите кнопку «Включить службы для моего приложения Android App». Когда вы это сделаете, вас попросят указать ваше имя и имя пакета Android для вашего приложения. Убедитесь, что указанное вами имя пакета Android соответствует имени пакета, которое вы ввели при создании проекта Android Studio.

Затем нажмите кнопку «Выбрать и настроить службы» внизу. Теперь вы можете выбрать сервисы Google, которые хотите добавить в приложение.

На данный момент нажмите кнопку «Облачные сообщения», а затем нажмите «Включить облачные сообщения Google». Через несколько секунд вам будет предоставлен ключ API сервера и идентификатор отправителя. Запишите ключ API сервера и нажмите «Закрыть».

Плагин Google Services, который мы добавили ранее, требует правильной работы файла конфигурации. Создайте файл, нажав кнопку «Создать конфигурационные файлы».

После того, как файл был сгенерирован, загрузите его и поместите в каталог app проекта Android Studio.

3. Регистрация клиента

GCM идентифицирует устройства Android с помощью токенов регистрации. Поэтому наше приложение должно иметь возможность регистрироваться на каждом Android-устройстве, на котором оно установлено.

Шаг 1. Создание службы регистрации

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

Создайте новый класс Java под названием RegistrationService.java, сделайте его подклассом IntentService и переопределите его метод onHandleIntent .

Внутри метода onHandleIntent мы можем использовать API идентификатора экземпляра для создания или получения регистрационного токена. Во-первых, создайте экземпляр класса InstanceID , используя его метод getInstance .

Теперь мы можем использовать метод getToken объекта InstanceID для получения регистрационного токена в виде String . GetToken ожидает идентификатор отправителя как один из его аргументов. Поскольку мы добавили файл google-services.json в наш проект, мы можем передать идентификатор отправителя методу, используя R.string.gcm_defaultSenderID .

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

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

Теперь я покажу вам, как подписаться на topic под названием my_little_topic. Требуется всего две строки кода. Сначала создайте новый экземпляр класса GcmPubSub , используя его метод getInstance . Затем вызовите его метод subscribe и передайте ему токен регистрации вместе с названием темы.

Теперь наше приложение может получать каждое push-уведомление, опубликованное в my_little_topic.

Наконец, определите службу в AndroidManifest.xml.

Служба регистрации завершена.

Шаг 2. Создание службы InstanceIDListenerService

Токены регистрации периодически обновляются. Следовательно, каждое приложение для Android, использующее GCM, должно иметь InstanceIDListenerService , который может обрабатывать эти обновления. Поэтому создайте новый файл Java под названием TokenRefreshListenerService.java и сделайте его подклассом InstanceIDListenerService . Внутри метода onTokenRefresh этого класса все, что нам нужно сделать, это просто начать процесс регистрации снова, запустив службу регистрации с использованием метода Intent и startService .

Добавьте следующий код в TokenRefreshListenerService.java:

Эта служба должна иметь возможность реагировать на действие com.google.android.gms.iid.InstanceID . Поэтому, определяя службу в AndroidManifest.xml, добавьте соответствующий intent-filter .

Шаг 3: Запуск службы регистрации

Чтобы процесс регистрации начался сразу после запуска приложения, мы должны запустить класс RegistrationService внутри метода onCreate у MainActivity . Для этого создайте для него Intent и используйте метод startService .

4. Отображение Push-уведомлений

GCM автоматически отображает push-уведомления в лоток уведомлений, как только они будут получены. Однако он делает это только в том случае, если связанное приложение содержит GCMListenerService .

Создайте новый класс Java с именем NotificationsListenerService и сделайте его подклассом GCMListenerService . Если вы не хотите обрабатывать вставленные данные самостоятельно, вам не нужно писать код внутри этого класса. Мы можем оставить этот класс пустым.

Определяя службу в AndroidManifest.xml, убедитесь, что вы добавили intent-filter , который позволяет ему отвечать на com.google.android.c2dm.intent.RECEIVE .

5. Добавление значков Push Notification

У каждого push-уведомления должен быть связанный с ним значок. Если у вас нет такой возможности, вы можете получить ее в Material Design Icons Library.

Как только вы загрузите значок, поместите его в папку res вашего проекта. Я буду использовать ic_cloud_white_48dp в качестве значка.

6. Запуск приложения для Android

Теперь наше Android-приложение завершено. После того, как вы скомпилируете его и запустите на Android-устройстве, вы сможете увидеть маркер регистрации в логах logcat.

Нажмите кнопку «Назад» на устройстве, чтобы выйти из приложения. Это необходимо, потому что GCM автоматически отображает push-уведомления только в том случае, если пользователь не использует приложение. Если вы хотите, чтобы уведомления отображались даже в том случае, когда приложение запущено, вам нужно будет создать уведомления самостоятельно в NotificationsListenerService с помощью класса Notification.Builder .

7. Отправка Push-уведомлений

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

Вы можете запустить этот скрипт с локального компьютера или с удаленного веб-сервера, к которому у вас есть доступ к SSH.

Шаг 1. Создание сценария

Создайте новый файл с именем send.py и откройте его, используя ваш любимый текстовый редактор.

В верхней части файла импортируйте модули urllib2 и urllib . Мы будем использовать эти модули для отправки данных на Google Cloud Connection Server. Импортируйте модуль json , потому что отправляемые данные должны быть действительными JSON. Наконец, чтобы получить доступ к аргументам командной строки, импортируйте модуль sys .

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

Каждое уведомление должно иметь название и тело. Вместо жесткого кодирования в нашем скрипте давайте примем название и тело как аргументы командной строки, используя массив argv .

Создайте новый словарь Python для представления данных, которые должны быть отправлены в CCS. Чтобы наше приложение для Android могло получать уведомление, оно должно быть опубликовано в тему my_little_topic. Поэтому добавьте ключ to в словарь, и установите его значение в /themes/my_little_topic.

Чтобы представить содержимое уведомления, добавьте ключ, называемый notification в словарь, и установите его значение для другого словарного объекта, содержащего три ключа:

  • body
  • title
  • icon

Убедитесь, что значение icon совпадает с именем значка, который можно использовать в вашем проекте Android.

Преобразуйте словарь в строку JSON, используя функцию dumps модуля json :

Все, что нам нужно сделать, это отправить строку JSON на https://gcm-http.googleapis.com/gcm/send. Для этого создайте новый объект Request и установите dataAsJSON в качестве своих данных. Затем установите заголовок Authorization в MY_API_KEY и заголовок Content-type в application/json.

Наконец, чтобы выполнить запрос и получить ответ, передайте объект запроса функции urlopen и вызовите его метод read .

Теперь скрипт Python завершен и готов к использованию.

Шаг 2. Запуск сценария

На этом этапе мы готовы отправить push-уведомления всем устройствам, на которых установлено наше приложение. Откройте терминал и введите каталог, в котором вы создали send.py.

Передайте имя сценария исполняемому файлу python вместе со строкой для заголовка уведомления, а другое — для тела уведомления. Вот пример, который вы можете использовать:

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

Если вы проверите свое Android-устройство, вы увидите новое уведомление в лотке уведомлений.

Заключение

Теперь вы знаете, как отправлять push-уведомления своим пользователям. На этом занятии вы узнали, как создать Android-приложение, способное регистрироваться и получать уведомления, публикуемые по определенной теме. Вы также узнали, как создать скрипт Python, который может публиковать уведомления.

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

Чтобы узнать больше о облачных сообщениях Google, см. Руководство по облачным сообщениям.

Источник

Читайте также:  Самый лучший музыкальный редактор для андроид
Оцените статью