Статья

Создание Push-оповещений из Умного дома на android-смартфон через сервисы Google.

У Google существует межплатформенное облачное решение под названием Firebase Cloud Messaging для отправки Push-оповещений для Android, iOS и веб-приложений, которые в настоящее время могут быть использованы бесплатно.

 В настоящей статье мы рассмотрим создание простого приложения под Android из исходников демо-проекта Google FCM.

Шаг 1. Настраиваем Firebase Cloud Messaging

Перед использованием FCM служб в приложении, необходимо создать новый проект (или импортировать существующий проект) с помощью консоли Firebase.

Войдите в консоль Firebase с вашей учетной записью Google (т. е. ваш адрес электронной почты Gmail) и нажмите кнопку «Добавить проект»:

  • Если у вас есть существующий проект, нажмите кнопку импортировать проект Google.
  • Заполните необходимые поля проекта:
  • В консоли Firebase Project Overview нажмите кнопку «Добавить Firebase» в приложение Android и выполните шаги настройки.
  • При появлении запроса введите имя своего приложения по умолчанию «com.google.firebase.quickstart.fcm». Ключ API сервера и идентификатор клиента автоматически создадутся после регистрации приложения. Эта информация помещается в файл google-services.json, который необходимо загрузить и сохранить в надежном месте. Вы можете загрузить этот файл снова в любое время.

На этом предварительную настройку Firebase Cloud Messaging можно завершить.

Шаг 2. Собираем приложение в Android Studio

  • Скачайте и установите последнюю версию Android Studio.
  • Скачайте исходники демо-проекта с github. Нам потребуется проект, расположенный в каталоге messaging.
  • Поместите ранее скачанный JSON-файл в каталог «messaging\app» как показано на рисунке выше.
  • Запустите Android Studio и выберете пункт меню Open an existing Android Studio project.
  • Укажите расположение вашего проекта и запустите его.
  • Дождитесь завершения синхронизации.
  • Для функционирования нашего приложения нам будет достаточно его отладочной версии, без формирования подписанного сертификата. Компилируем приложение, выполнив Build -> Build Bundle(s) / APK(s) -> Build APK(s), как показан ниже:
  • Скомпилированное приложение app-debug.apk, размещенное по адресу …\app\build\outputs\apk\debug, копируем на свой телефон и устанавливаем его.

Шаг 3. Отправка Push-оповещений

  • Для отправки Push-оповещений из своего Умного дома на телефон с установленным приложением нам потребуется Token приложения Ключ сервера.
  • Token получаем непосредственно из приложения, нажав LOG TOKEN.
  • Ключ сервера получаем из консоли Firebase в настройках проекта на вкладке Cloud Messaging. Для упрощенной отправки используем Устаревший ключ сервера.
  • Можно протестировать свое приложение непосредственное из консоли Firebase. В боковой панели слева выбираем Cloud Messaging и создаем Новое уведомление.
  • Заполняем поля Сообщения: Заголовок (необязательно) и Текст сообщения. Нажимаем Тестирование на устройстве:
  • Вставляем Token приложения:
  • Далее выбираем наше приложение из выпадающего списка, пощелкиваем все остальные поля до конца и публикуем сообщение. Вы должны получить на своем телефоне PUSH-оповещение:

Умный дом может отправлять PUSH-оповещения на телефон через сервис Firebase Cloud Messaging путем отправки json данных методом HTTP POST запроса на адрес https://fcm.googleapis.com/fcm/send с содержанием:
body: {"to": "здесь указывается Token приложения", "notification":{"title" : "Ваш заголовок", "body" : "Текст сообщения"}};
headers: {"Authorization":"key=Здесь указывается Ключ сервера"}.
Пример отправки PUSH-оповещения через CURL:

curl -s "https://fcm.googleapis.com/fcm/send" -H "Authorization: key=AIzaSy**************" -H "Content-Type: application/json" -d '{"to": " fEzintBBJk8:APA91bHuUlRNhzgIKf7Y3T5z*****************************", "notification":{"title" : "TITLE", "body" : "BODY"}}'

  • Пример отправки PUSH-оповещения через Node-RED:

[{"id":"1da8ccd6.dd58c3","type":"function","z":"43db40f1.909be","name":"set payload and headers","func":"msg.payload = {\"to\": \"fEzintBBJk8:APA91bHuUlRNhzgIKf7Y3T5z*****************************\", \"notification\":{\"title\" : \"Node-RED\", \"body\" : msg.payload }};\nmsg.headers = {\"Authorization\": \"key=AIzaSy**************\"};\nreturn msg;\n","outputs":1,"noerr":0,"x":370,"y":120,"wires":[["5ae198f2.eb5b98"]]},{"id":"5ae198f2.eb5b98","type":"http request","z":"43db40f1.909be","name":"http POST to Google FCM","method":"POST","ret":"txt","url":"https://fcm.googleapis.com/fcm/send","tls":"","x":640,"y":120,"wires":[["cc6a625f.12e8e"]]},{"id":"cc6a625f.12e8e","type":"debug","z":"43db40f1.909be","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":867.0000419616699,"y":119.99994039535522,"wires":[]},{"id":"a79f7d72.479a4","type":"inject","z":"43db40f1.909be","name":"","topic":"","payload":"Hello","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":120,"wires":[["1da8ccd6.dd58c3"]]}]

Подведение итогов

В подведении итогов расскажу о доработках FCM приложения благодаря помощи и усилиям пользователя нашего сообщества Yevhen Railian. Удалось добиться отправки Push-оповещения со своим звуком + возможно менять иконку нотификации. Токен приложения теперь копируется в буфер обмена и его не нужно вытаскивать из логов вашего телефона. Исходники обновленного приложения размещены в репозитории github.

Для добавления звука в PUSH-оповещение достаточно поместить звуковой файл в формате *.mp3 в каталог res/raw. Название файла должно быть латинскими буквами в нижнем регистре без пробелов и прочих знаков (кроме нижнего подчеркивания "_"), к примеру "your_custom_notification.mp3". В каталоге уже есть 4 звуковых файла – их не удалять. 

Аналогичным способом может быть изменена стандартная иконка PUSH-оповещения. Для этого файл иконки в формате png или jpg должен быть помещен в каталог res/drawable.

Далее при отправке HTTP POST запроса в body явным методом указываем имена без расширений нашего звукового файла "sound" : "your_custom_notification" и нашей иконки "icon" : "your_custom_icon".

Спасибо за внимание!

P.S. Firebase Cloud Messaging также предоставляет возможность использовать свои службы в iOS-приложениях для получения PUSH-оповещений из Умного дома. Quickstart-исходники приложения размещены на github


Сложно это всё для обычных людей. Мало кто станет запариваться.

Что-то мешает сделать готовое приложение, которому все эти звуки, иконки и прочее добавлять, например, через экран настроек?

И еще.. уведомления будут лететь на все устройства, где установлено это приложение?

Можно ли как-то добавить идентификаторы для устройств и указывать в том же post-запросе, куда это всё добро слать?)

Врядли удасться сделать универсальное приложение, т.к. туда зашивается json-секрет вашего проекта, привязанного к google-акаунту. А рассылку по одному приложению на разные девайсы сделать можно по подписке на разные топики. Один экземпляр приложения может быть подписан не более чем на 2000 топиков, при этом при слишком частых запросах FCM серверы будут отказывать в выполнении по причине превышения квоты. Подробнее можно посмотреть в описании FCM. Все же получается удобнее, чем через рассылку смс. При желании за символический донат тот же Yevhen Railian думаю сможет помочь собрать приложение.

Чтобы полностью выполнить шаг 2 (решить ошибки с сертификатом) то нужно сделать это:

Запустите sdkmanager следующим образом:


sdkmanager --licenses

И принять лицензии, которые вы еще не приняли (но должны).

На шаге 3  я сломался на этом (

Умный дом может отправлять PUSH-оповещения

) ... далее ничего не получилось...


Вернуться назад
Вернуться назад