Создание сервера push-уведомлений для устройств Android

Push-уведомления позволяют приложениям Android сообщать пользователю о событиях, даже если пользователь не использует приложение. Целью данного руководства является настройка рассылки простых push-уведомлений приложения. Для достижения этой цели используются Ubuntu 14.04 и Python 2.7, а также Google Cloud Messaging в качестве сервиса push-уведомлений.

Требования

Чтобы следовать руководству, нужны:

  • Приложение Android (полезную информацию можно найти на сайте проекта);
  • Выделенный сервер Ubuntu 14.04;
  • IP-адрес виртуального выделенного сервера.

Что такое push-уведомления?

Предоставляемые Google серверы соединения GCM принимают сообщения от стороннего сервера приложений (например, от виртуального выделенного сервера), и передают эти сообщения приложениям Android с поддержкой GCM  (то есть, клиентскому приложению). В настоящее время Google предоставляет такие серверы соединения для HTTP и XMPP.

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

1: Создание проекта Google API

Чтобы включить поддержку GCM, нужно для нала создать проект Google API:

Откройте консоль Google Developers Console. При этом будет предложено указать некоторую информацию.

Нажмите кнопку Create Project. Укажите имя проекта, а затем нажмите Create.

Создание нового проекта займет несколько секунд. Обратите внимание на Project ID и Project Number в верхней части экрана.

Запишите Project Number – он еще пригодится при настройке клиента приложения Android.

2: Включение Google Cloud Messaging

Убедитесь, что в Google Developers Console все еще выбран только что созданный проект. В левой панели выберите APIs & auth, затем – APIs.

В появившемся списке интерфейсов включите тумблер Google Cloud Messaging for Android и примите условия обслуживания.

Теперь Google Cloud Messaging for Android появится в списке включенных API данного проекта.

Снова выберите APIs & auth в левом меню, затем – Credentials.

Под Public API access нажмите на Create new Key и выберите Server key. Укажите IP-адрес сервера. Затем нажмите кнопку Create. Скопируйте API KEY – позже его нужно будет ввести на вашем сервере.

3: Настройка приложения Android

Чтобы протестировать отправку push-уведомлений, нужно соединить приложение Android с только что созданным проектом Google API.

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

Официальный исходный код можно загрузить со страницы gcm.

Имейте в виду, исходный код не является обновлением, потому нужно отредактировать файл Gradle:

gcm-client/GcmClient/build.gradle

Обновите строку:

compile "com.google.android.gms:play-services:4.0.+"

следующим образом:

compile "com.google.android.gms:play-services:5.0.89+"

В main activity поместите строку:

String SENDER_ID = "YOUR_PROJECT_NUMBER_HERE";

Замените выделенную фразу значением Project Number проекта Google API.

При регистрации устройства на GCM оно получает регистрационный ID, который пригодится для дальнейшей проверки. Чтобы получить его, просто измените эти строки в основном файле:

if (regid.isEmpty()) {
registerInBackground();
}else{
Log.e("==========================","=========================");
Log.e("regid",regid);
Log.e("==========================","=========================");
}

Поле запуска приложения откройте logcat и скопируйте regid, который выглядит примерно так:

=======================================
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UJY0KNqpL4EUXTWOm0RxccxpMk
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ =======================================

4: Развертывание сервера

Разверните сервер Ubuntu 14.04, который будет использоваться в качестве стороннего сервера приложений.

Как уже говорилось, серверы GCM принимают сообщения от стороннего сервера приложений (в данном случае – от выделенного сервера Ubuntu 14.04) и отправляют их приложениям Android. Google предоставляет серверы для HTTP и CCS (XMPP); данное руководство сфокусировано на HTTP.

Итак, сервер:

  • взаимодействует с клиентом;
  • отправляет правильно отформатированные запросы серверу GCM;
  • обрабатывает запросы и пересылает их по мере необходимости с помощью экспоненциального отката;
  • хранит ключ API и идентификаторы регистрации клиента. Ключ API включен в заголовок POST-запросов, которые отправляют сообщения;
  • создает уникальные идентификаторы для каждого отправляемого сообщения.

Клиент будет взаимодействовать с сервером, отправляя регистрационный номер устройства (который нужно хранить и использовать при отправке уведомления). Управлять клиентом очень просто; кроме того, GCM поможет в этом, отправляя сообщения об ошибках, в случае если регистрационный ID является недействительным.

5: Создание простого сервера Python GCM

Войдите на сервер как пользователь с расширенными привилегиями. Обновите список пакетов:

sudo apt-get update

Установите пакеты Python:

sudo apt-get install python-pip python-dev build-essential

Установите python-gcm (подробнее здесь):

sudo pip install python-gcm

Создайте новый файл Python в любой удобной точке системы, например:

sudo nano ~/test_push.py

Внесите следующую информацию в файл, заменив значения, выделенные красным (разбор конфигураций можно найти ниже):

from gcm import *
gcm = GCM("AIzaSyDejSxmynqJzzBdyrCS-IqMhp0BxiGWL1M")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}
reg_id = 'APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UxxxqpL4EUXTWOm0RXE5CrpMk'
gcm.plaintext_request(registration_id=reg_id, data=data)

Данные конфигурации выполняют следующее:

  • from gcm import *: импортирует клиента Python в Google Cloud Messaging.
  • gcm: в эту строку нужно внести API KEY проекта Google API; убедитесь, что IP сервера разрешен.
  • reg_id: укажите regid приложения Android.

6: Рассылка Push-уведомлений

Запустите следующую команду, чтобы выполнить тестовую отправку уведомления:

sudo python ~/test_push.py

Это займет около 10 секунд. Устройство Android должно получить уведомление.

Устранение неполадок

Если уведомление не пришло на устройство в течение 10 секунд, проверьте:

  • подключен ли смартфон/планшет к интернету;
  • правильно ли указан ключ проекта;
  • правильно ли указан regid приложения;
  • внесен ли IP в ключ Google API;
  • подключен ли сервер к интернету.

Если даже после этого уведомление не приходит, вероятно, проблема в приложении. Проверьте logcat на наличие ошибок.

Заключение

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

Примечание: если CGM сообщает «invalid ID», удалите его из базы данных.

Tags: , , , , , , , , , , ,

Добавить комментарий