Push уведомления python android

Содержание
  1. klen.github.io
  2. Введение
  3. Подготовка к работе
  4. Получение токена для сервера
  5. Отправка Push уведомлений
  6. Интеграция с Django
  7. Создание сервера push-уведомлений для устройств Android
  8. Требования
  9. Что такое push-уведомления?
  10. 1: Создание проекта Google API
  11. 2: Включение Google Cloud Messaging
  12. 3: Настройка приложения Android
  13. 4: Развертывание сервера
  14. 5: Создание простого сервера Python GCM
  15. 6: Рассылка Push-уведомлений
  16. Устранение неполадок
  17. Заключение
  18. Как начать работу с Push-уведомлениями на Android
  19. Введение
  20. Зачем использовать Google Cloud Messaging?
  21. Предпосылки
  22. 1. Настройка проекта Android Studio
  23. Шаг 1: добавьте зависимости
  24. Шаг 2: обновите манифест
  25. 2. Получите ключ API сервера и идентификатор отправителя
  26. 3. Регистрация клиента
  27. Шаг 1. Создание службы регистрации
  28. Шаг 2. Создание службы InstanceIDListenerService
  29. Шаг 3: Запуск службы регистрации
  30. 4. Отображение Push-уведомлений
  31. 5. Добавление значков Push Notification
  32. 6. Запуск приложения для Android
  33. 7. Отправка Push-уведомлений
  34. Шаг 1. Создание сценария
  35. Шаг 2. Запуск сценария
  36. Заключение

klen.github.io

Статьи по теме

Настало время рассказать, как реализовать серверную поддержку Push уведомлений для Android. Эта возможность появилась в мобильной системе начиная с версии 2.2 (API8). Ниже я рассмотрю реализацию на Python, но для программиста владеющего другими языками, не должно составить труда справиться самостоятельно.

Введение

Эта простая схема описывает работу с C2DM сервисом. Ваше Android приложение (APP) регистрируется в C2DM сервисе (например при запуске) и отправляет полученный регистрационный код серверу (APP SERVER).

Теперь сервер (APP SERVER) используя полученный регистрационный код и специальный токен может сформировать специальный HTTP-запрос сервису C2DM, который в свою очередь отправит Push сообщение устройству на котором запущена ваша программа.

По-умолчанию в C2DM установлена квота на отсылку не более 200000 уведомлений в день. http://code.google.com/android/c2dm/quotas.html

Подготовка к работе

Для начала необходимо зарегистрировать ваше приложение в C2DM по адресу: http://code.google.com/android/c2dm/signup.html

Вам потребуется указать ваш действующий Google-аккаунт и доменное имя вашего приложения. Вы должны получить на почту письмо с подтверждением. После регистрации вашему приложению будет добавлена возможность получать Push-уведомления с учетом действующих в C2DM квот.

Настройка поддержки Push уведомлений на стороне приложения в данной статье не рассматривается. Вы можете изучить например эту статью: C2DM Написание Android клиента

Получение токена для сервера

Получение авторизационного токена для сервера подробно рассматривается в документации: ClientLogin for Installed Applications. Резюмируя данный документ: для получения токена, нам надо сформировать POST запрос со следующими параметрами:

accountType HOSTED_OR_GOOGLE
Email our@email.here (email аккаунта регистрировавшего C2DM)
Passwd our_password_here (пароль)
service ac2dm
source our.app идентификатор для логирования (например доменное имя)

Сделать это можно например используя Curl (Замените ACCOUNT, PASSWORD, SOURCE на ваши реквизиты):

В третьей строке Auth=. и будет ваш искомый токен. Сохраните его в надежном месте.

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

Отправка уведомлений описана в разделе: How the Application Server Sends Messages. Поддерживаются следующие параметры:

registration_id Ключ регистрации, полученный приложением от C2DM и переданный серверу приложений
collapse_key Название группы сообщений.
Authorization: GoogleLogin auth= Токен авторизации (передается в заголовке)
data. Набор дополнительных данных в формате key-value
delay_while_idle Флаг отложенной доставки. Сообщение может быть доставлено позже.

Этих данных достаточно, чтобы написать простой код (для работы с HTTP я использую замечательную библиотеку Requests):

Теперь отправлять нотификации можно так:

Интеграция с Django

При интеграции с Django проектом стоит подумать об асинхронности запросов в C2DM.

Асинхронность достигается использованием Celery.

Мысли на будущее: отключение недействительных устройств, массовые рассылки и проверка доставки.

Источник

Создание сервера 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.

Читайте также:  Uvc драйвер для андроид что это такое

В появившемся списке интерфейсов включите тумблер 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:

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

String SENDER_ID = «YOUR_PROJECT_NUMBER_HERE»;

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

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

Поле запуска приложения откройте 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 в любой удобной точке системы, например:

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

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-уведомлений

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

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

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

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

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

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

Заключение

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

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

Источник

Как начать работу с 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-уведомлений.

Читайте также:  Firebase загрузка изображений android

Предпосылки

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

  • Последняя версия 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, см. Руководство по облачным сообщениям.

Источник

Оцените статью