Поиск по сайту:

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


Введение

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

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

Предпосылки

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

  • Приложение для Android; см. developer.android.com
  • Дроплет Ubuntu 14.04
  • IP-адрес вашего дроплета

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

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

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

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

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

Посетите консоль разработчиков Google.

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

Щелкните Создать проект.

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

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

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

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

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

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

Выберите API.

В отображаемом списке API установите переключатель Google Cloud Messaging для Android в положение ON. Примите условия обслуживания.

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

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

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

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

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

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

Щелкните Создать.

Скопируйте КЛЮЧ API. Вам нужно будет ввести это на вашем сервере позже.

Шаг третий — привяжите Android-приложение

Чтобы протестировать уведомления, нам нужно связать наше приложение для 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+"

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

String SENDER_ID = "YOUR_PROJECT_NUMBER_HERE";

Замените его номером проекта из вашего проекта 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 принимают сообщения от стороннего сервера приложений (нашего дроплета) и отправляют их приложениям на устройствах 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 здесь.

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)

Объяснение:

  • из gcm import *: импортирует клиент Python для Google Cloud Messaging для Android
  • gcm: добавьте свой КЛЮЧ API из проекта Google API; убедитесь, что IP-адрес вашего сервера находится в разрешенных IP-адресах
  • reg_id: добавьте свой regid из своего приложения для Android

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

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

sudo python ~/test_push.py

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

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

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

  • Подключен ли ваш смартфон/планшет к Интернету?
  • У вас есть правильный ключ проекта?
  • У вас правильный регистрационный номер из приложения?
  • Добавлен ли IP-адрес вашего сервера для ключа сервера Google API?
  • Подключен ли сервер к Интернету?

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

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

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

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