Создание сервера push-уведомлений для устройств Android
Ubuntu, VPS | Комментировать запись
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: Android, Cloud Server, GCM, Google Cloud Messaging, HTTP, Linux, Python, Python 2.7, Ubuntu, Ubuntu 14.04, VPS, XMPP