Как создать сервер для отправки push-уведомлений с помощью GCM на устройства Android с помощью Python

Вступление

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

Мы будем использовать термин server для обозначения экземпляра, запущенного с помощью DigitalOcean. Мы будем использовать GCM для ссылки на сервер Google, который находится между устройством Android и вашим сервером.

Предпосылки

Вам понадобятся эти вещи, прежде чем вы начнете учебник:

  • * Android-приложение *; см. developer.android.com

  • A * Ubuntu 14.04 * Droplet

  • IP-адрес вашей капли

О Push-уведомлениях

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

image: https: //assets.digitalocean.com/articles/push_notifications_gcm/1.png [Серверы соединений GCM отправляют данные между вашим сторонним сервером и клиентскими приложениями.]

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

Шаг первый - создание проекта Google API

Нам нужно создать проект API Google, чтобы включить GCM для нашего приложения.

Посетите https://console.developers.google.com [Консоль разработчика Google].

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

Нажмите * Создать проект *.

Введите имя проекта, затем нажмите * Создать *.

изображение: https: //assets.digitalocean.com/articles/push_notifications_gcm/2.png [Новый проект Google API]

Подождите несколько секунд, пока новый проект будет создан. Затем просмотрите свои * Идентификатор проекта * и * Номер проекта * в верхнем левом углу страницы проекта.

изображение: https: //assets.digitalocean.com/articles/push_notifications_gcm/3.png [идентификатор и номер проекта]

Запишите * номер проекта *. Вы будете использовать его в своем клиентском приложении для Android.

Шаг второй - Включите GCM для вашего проекта

Убедитесь, что ваш проект все еще выбран в https://console.developers.google.com [Консоль разработчика Google].

На боковой панели слева выберите * APIs & auth *.

Выберите * API *.

В отображаемом списке API-интерфейсов установите переключатель на * ON *. Принять условия обслуживания.

  • Google Cloud Messaging для Android * теперь должен быть в списке включенных API для этого проекта.

изображение: https: //assets.digitalocean.com/articles/push_notifications_gcm/4.jpg [Google Cloud Messaging для Android включен]

На боковой панели слева выберите * APIs & auth *.

Выберите * Учетные данные *.

В разделе * Публичный доступ к API * нажмите * Создать новый ключ *.

Выберите * Ключ сервера *.

Введите IP-адрес вашего сервера.

изображение: https: //assets.digitalocean.com/articles/push_notifications_gcm/5.png [IP-адрес ключа сервера]

Нажмите * Создать *.

Скопируйте * API KEY *. Вам нужно будет ввести это на своем сервере позже.

изображение: https: //assets.digitalocean.com/articles/push_notifications_gcm/6.jpg [API KEY]

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

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

Вы можете получить официальный исходный код на странице gcm.

Обратите внимание, что источники не являются обновлениями, поэтому вам придется изменить файл Gradle:

+ GCM-клиент / GcmClient / build.gradle +

Старая строка:

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

Обновленная строка:

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

В основном упражнении найдите эту строку:

String SENDER_ID = "";

Замените это на * Project Number * из вашего проекта Google API.

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

           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/==========================﹕ =======================================

Шаг четвертый - Развертывание капли

Разверните новый * Ubuntu 14.04 * сервер. Нам нужно, чтобы это был наш сторонний сервер приложений.

Серверы соединений Google GCM принимают сообщения от стороннего сервера приложений (нашего приложения Droplet) и отправляют их в приложения на устройствах Android. В то время как Google предоставляет серверы соединений для HTTP и CCS (XMPP), мы сосредоточимся на HTTP для этого руководства. HTTP-сервер является только нисходящим: от облака к устройству. Это означает, что вы можете отправлять сообщения только с сервера на устройства.

Роли нашего сервера:

  • Общается с вашим клиентом

  • Запускает правильно отформатированные запросы к серверу GCM

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

  • Хранит ключ API и идентификаторы регистрации клиента. Ключ API включен в заголовок POST-запросов, отправляющих сообщения

  • Генерирует идентификаторы сообщений для уникальной идентификации каждого отправляемого сообщения. Идентификаторы сообщений должны быть уникальными для каждого отправителя

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

Шаг пятый - настройка простого сервера Python GCM

Войдите на свой сервер с пользователем sudo.

Обновите свои списки пакетов:

sudo apt-get update

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

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

Установите + python-gcm +. Узнайте больше о python-gcm here.

sudo pip install python-gcm

Создайте новый файл Python где-нибудь на сервере. Давайте скажем:

sudo nano ~/test_push.py

Добавьте следующую информацию в файл. Замените переменные, отмеченные в. Объяснение ниже.

from gcm import *

gcm = GCM("")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}

reg_id = ''

gcm.plaintext_request(registration_id=reg_id, data=data)
  • Пояснение: *

  • + from gcm import * +: импортирует клиент Python для Google Cloud Messaging для Android

  • + gcm +: добавьте свой * API KEY * из проекта Google API; убедитесь, что IP-адрес вашего сервера находится в разрешенных IP-адресах

  • + reg_id +: добавьте * regid * из вашего приложения для Android

Шаг шестой - отправка push-уведомления

Запустите эту команду, чтобы отправить тестовое уведомление в ваше приложение:

sudo python ~/test_push.py

Подождите около 10 секунд. Вы должны получить уведомление на вашем устройстве Android.

изображение: https: //assets.digitalocean.com/articles/push_notifications_gcm/7.png [Пример push-уведомления]

Поиск неисправностей.

Если уведомление не появляется на вашем устройстве примерно через 10 секунд, выполните следующие действия:

  • Ваш смартфон / планшет подключен к Интернету?

  • У вас есть правильный ключ проекта?

  • У вас есть правильный регид из приложения?

  • Добавлен ли IP-адрес вашего сервера для ключа сервера Google API?

  • Подключен ли сервер к интернету?

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

Куда пойти отсюда

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

Вы можете адаптировать примеры из этого руководства для работы с вашим собственным приложением для Android.

Related