Android studio push уведомления через firebase

Содержание
  1. Пара способов отправить уведомления на смартфон со своего сервера
  2. 1. Регистрируемся в Firebase
  3. 2. Настраиваем Firebase
  4. 3. Настройка приложения Android на приём уведомлений.
  5. 4. Отправляем уведомление со своего сервера
  6. Протокол первого поколения — Legacy HTTP
  7. Протокол второго поколения — (Modern) HTTP v1.
  8. Бонус, дополнительные параметры для уведомлений:
  9. Заключение
  10. Руководство по отправке push-уведомлений на устройства Android с помощью SDK Firebase версии 1.0.0-preview1
  11. Предварительные требования
  12. Создание проекта Android Studio
  13. Создание проекта Firebase с поддержкой FCM
  14. Настройка центра уведомлений
  15. Настройка параметров Firebase Cloud Messaging для центра
  16. Подключение приложения к центру уведомлений
  17. Добавление служб Google Play в проект
  18. Затем добавьте библиотеки Центров уведомлений Azure.
  19. Добавление поддержки Google Firebase
  20. Добавление кода
  21. отправка проверочного уведомления.
  22. Запуск мобильного приложения в эмуляторе
  23. Дальнейшие действия

Пара способов отправить уведомления на смартфон со своего сервера

В этом туториале я рассмотрю пошагово, как отправлять со своего сервера уведомления на свой (или не свой) смартфон, какие средства для этого понадобятся. Эти способы универсальны и подойдут для любого языка программирования, т.к. напрямую используют API гугла, без использования библиотек. Отправить можно на смартфоны с Android, iOS и в браузеры с поддержкой Push API (на сегодня это Chrome, Firefox и их производные).

В общем всем тем, кто давно хотел отправлять уведомления со своего домашнего сервера на свой смартфон, но не знал с чего начать, посвящается.

Немного истории. В начале (с версии андроида 2.2) у гугла для доставки использовалась система C2DM (Android Cloud to Device Messaging), начиная с июня 2012 для этого стали предлагать использовать GCM (Google cloud messaging).

В настоящее время используется универсальная платформа Firebase, которая помимо доставки уведомлений имеет ещё много всяких других возможностей. Firebase тоже успела эволюционировать и протокол первого поколения уже считается устаревшим и для доставки сообщений рекомендуется использовать протокол второго поколения.

Технически, уведомления отправляются с сервера не напрямую в смартфон, а на некий промежуточный сервер, на котором при необходимости хранятся до 4-х недель (настраиваемо), и по возможности отправляются получателю. Т.е. если смартфон находится оффлайн, сервер ждёт. Как только появляется возможность — отправляет.

1. Регистрируемся в Firebase

Для регистрации в Firebase понадобится учётка гугла.

Жмём «Перейти к консоли».

Затем «Добавить проект».

Вводим название проекта. Рекомендую в диапазоне 8-16 символов.
Выбираем страну. Жмём «Создать проект».

2. Настраиваем Firebase

Прокручиваем до блока «Notifications», жмём «Начать».

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

Шаги для Andriod-приложения:

Шаг 1 — Вводим название проекта на Andriod.
Жмём «Зарегистрировать приложение».

Шаг 2 — Жмём «Скачать google-services.com».
Добавляем скачанный файл конфигурации в проект, рядом с файлом build.gradle (тем, который персональный для приложения).
Жмём «Продолжить».

После настройки приложения, можно сразу протестировать работает ли связь отправив тестовое сообщение (нет нельзя, у нас ещё нет ID клиента, куда слать).

3. Настройка приложения Android на приём уведомлений.

Важное примечание: некоторые оболочки, например MIUI, могут блокировать уведомления, если приложение не запущено или не висит в фоне. Делается это якобы для экономии заряда батареи.

Грубо говоря, отправлять можно два вида уведомлений:
— уведомление по запросу,
— уведомление с полезной нагрузкой.
У них разные способы взаимодействия с приложением.

Уведомление по запросу выведет уведомление в области уведомлений, но только в случае если приложение свёрнуто. При тапе пользователя оно откроет заранее выбранную (при отправке) активити приложения, и передаст бандлом экстра-параметры.

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

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

И пример кода службы, принимающей сообщения. Приложение должно быть запущено, или висеть в фоне, иначе не гарантируется приём сообщений. Некоторые оболочки, например MIUI, в целях экономии, режут всё подряд, в том числе привелегии фоновых служб.

Читайте также:  Как установить драйвер для самсунг андроид

не забудьте прописать службы в манифесте.

ID клиента генерируется на устройстве, но вы сами выбираете способ доставки этого ID к себе на сервер.

Вот теперь можно протестировать, отправив тестовое сообщение из консоли.

4. Отправляем уведомление со своего сервера

Существует несколько способов обмена данными с сервером Firebase. Мы рассмотрим два способа обмена по протоколу HTTP.

Протокол первого поколения — Legacy HTTP

Понадобится ключ. Жмём на гайку, выбираем «Настройки проекта».

Вкладка «Cloud Messaging».
Копируем «Устаревший ключ сервера».

Здесь в поле «to» надо подставить ID клиента. В http заголовок «Authorization: key=» подставить «Устаревший ключ сервера».

Протокол второго поколения — (Modern) HTTP v1.

(источник: developers.google.com/identity/protocols/OAuth2ServiceAccount)
Не спрашивайте, почему вторая версия протокола называется V1, видимо первая считалась бетой и носила нулевой номер.
Я не углублялся в подробности, но так понимаю этот протокол более универсальный и имеет более широкие возможности, чем просто отправка уведомлений.

‘; // — parse answer JSON (lame) — // $line = explode(«\r\n», $receive); if ($line[0] != ‘HTTP/1.1 200 OK’) die($line[0]); $pos = FALSE; if (($pos = strpos($receive, «\r\n\r\n», 0)) !== FALSE ) < if (($pos = strpos($receive, "<", $pos+4)) !== FALSE ) < if (($pose = strpos($receive, ">«, $pos+1)) !== FALSE ) < $post = substr($receive, $pos, ($pose - $pos+1) ); $aw = json_decode($post, TRUE); $access_token = $aw['access_token']; >else die(‘> not found.’); > else die(‘ < not found.'); >else die(‘\r\n\r\n not found.’); // — шаг 3. отправляем запрос на Firebase сервер — // $socket = @fsockopen(‘ssl://fcm.googleapis.com’, 443, $errno, $errstr, 10); if (!$socket) die(‘error: remote host is unreachable.’); $payload = ‘ < "message":< "token" : "cGAFgPJGf-s:APA91bF**. **aEVM17c9peqZ", "notification" : < "title" : "Заголовок сообщения", "body" : "(Modern API) Моё первое сообщение через Firebase!" >> >’; // или $payload = ‘ < "message": < "token" : "cGAFgPJGf-s:APA91bF**. **aEVM17c9peqZ", "data":< "val1" : "Заголовок сообщения", "val2" : "(Modern API) Моё первое сообщение через Firebase!", "val3" : "дополнительные данные" >> >’; $send = »; $send .= ‘POST /v1/projects/pyur-test-id/messages:send HTTP/1.1’.»\r\n»; $send .= ‘Host: fcm.googleapis.com’.»\r\n»; $send .= ‘Connection: close’.»\r\n»; $send .= ‘Content-Type: application/json’.»\r\n»; $send .= ‘Authorization: Bearer ‘.$access_token.»\r\n»; $send .= ‘Content-Length: ‘.strlen($payload).»\r\n»; $send .= «\r\n»; $send .=$payload; $result = fwrite($socket, $send); $receive = »; while (!feof($socket)) $receive .= fread($socket, 8192); fclose($socket); echo »; ?>

по адресу console.firebase.google.com/project/poject-id/settings/serviceaccounts/adminsdk надо скопировать «Сервисный аккаунт Firebase» и подставить в переменную «$JWT_claim_set», в поле «iss».

Жмём «Создание закрытого ключа»

Создаём ключ, сохраняем, никому не показываем. В скачанном файле будет содержаться «Закрытый ключ», его подставляем в переменную «$private_key».

Хинт: токен, полученный в шагах 1 и 2 можно и нужно кешировать в локальном временном хранилище, например файле, или базе данных. И только по истечении времени (по умолчанию один час), запрашивать у сервера авторизации следующий токен.

Важно! Перед использованием Modern Http API необходимо явно разрешить его использование здесь: console.developers.google.com/apis/library/fcm.googleapis.com/?project=your-project

Бонус, дополнительные параметры для уведомлений:

sound — либо «default», либо имя ресурса в приложении. Должен располагаться в «/res/raw/». Формат MP3, AAC или ещё чего подходящее.
icon — меняет иконку уведомления. Должна храниться в «drawable» приложения. Если отсутствует, FCM будет использовать иконку приложения (указанную как «launcher icon» в манифесте приложения).
tag — Следует использовать для группировки однотипных уведомлений. Новые уведомления будут выводиться поверх уже имеющихся с таким же тегом.
color — цвет иконки, задаётся как «#rrggbb» (у меня в MIUI не заработало)
click_action — запускаемое активити, при нажатии пользователем на уведомлении.

Заключение

В будущем API вероятно будет изменяться, объявляться depricated и т.п. Поэтому сегодня думаю стоит делать сразу на протоколе HTTP v1.

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

Да, я в курсе, что существует Zabbix и т.п., но тема статьи — домашние сервера, и прочие умные дома. Считаю системы корпоративного класса перебором в любительских поделках.

Читайте также:  Android all info txt

Источник

Руководство по отправке push-уведомлений на устройства Android с помощью SDK Firebase версии 1.0.0-preview1

В этом руководстве показано, как использовать Центры уведомлений Microsoft Azure и обновленный SDK Firebase Cloud Messaging (FCM) версии 1.0.0-preview1 для отправки push-уведомлений в приложение на платформе Android. Следуя инструкциям этого руководства, вы создадите пустое приложение Android, которое получает push-уведомления с помощью Firebase Cloud Messaging (FCM).

Полный код для этого руководства вы можете скачать на сайте GitHub.

В этом руководстве рассматриваются следующие действия:

  • Создание проекта Android Studio.
  • Создание проекта Firebase с поддержкой Firebase Cloud Messaging.
  • Создание центра уведомлений.
  • Подключение своего приложения к концентратору.
  • Тестирование приложения.

Предварительные требования

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

Вам также понадобятся следующее.

  • Рекомендуется последняя версия Android Studio.
  • Минимальный уровень поддержки — API 19.

Создание проекта Android Studio

Сначала нужно создать проект в Android Studio:

Запустите Android Studio.

В меню выберите Файл, потом Новый, а затем — Новый проект.

На странице Choose your project (Выбор проекта) выберите Empty Activity (Пустое действие) и щелкните Далее.

На странице Настройка проекта выполните следующее:

  1. Введите имя приложения.
  2. Укажите расположение для сохранения файлов проекта.
  3. Нажмите кнопку Готово.

Создание проекта Firebase с поддержкой FCM

Войдите в консоль Firebase. Создайте проект Firebase, если его еще нет.

После создания проекта выберите Add Firebase to your Android app (Добавить Firebase в приложение Android).

Выполните следующие действия на странице Добавление Firebase в приложение для Android.

Для параметра Имя пакета Android скопируйте свое значение applicationId в файл приложения build.gradle. В нашем примере он выглядит следующим образом: com.fabrikam.fcmtutorial1app .

Выберите Регистрация приложения.

Выберите Download google-services.json (Загрузить google-services.json), сохраните файл в папку приложения проекта, а затем выберите Далее.

В консоли Firebase щелкните значок шестеренки возле имени проекта. Выберите пункт Project Settings (Параметры проекта).

Если вы еще не скачали файл google-services.json в папку app проекта Android Studio, это можно сделать на этой странице.

Переключитесь на вкладку Обмен сообщениями в облаке.

Скопируйте и сохраните Ключ сервера для последующего использования. Это значение используется для настройки имени центра.

Настройка центра уведомлений

Выберите Все службы в меню слева и щелкните Центры уведомлений в разделе Мобильный. Щелкните значок звездочки рядом с именем службы, чтобы добавить ее в раздел Избранное в меню слева. После добавления Центров уведомлений в Избранное выберите их в меню слева.

На странице Центры уведомлений выберите Добавить на панели инструментов.

На странице Центры уведомлений выполните следующее:

Введите имя в поле Центр уведомлений.

Введите имя в поле Создать пространство имен. Пространство имен содержит один или несколько центров.

Выберите значение в раскрывающемся списке Расположение. Это значение определяет расположение, в котором создается центр.

В разделе Группа ресурсов создайте группу ресурсов или выберите имеющуюся.

Выберите Создать.

Последовательно выберите Уведомления (значок колокольчика) и Перейти к ресурсу. Вы также можете обновить список на странице Центры уведомлений и выбрать свой центр.

Выберите Политики доступа в списке. Обратите внимание, что станут доступны две строки подключения. Они потребуются позже для обработки push-уведомлений.

Не используйте в приложении политику DefaultFullSharedAccessSignature. Эта политика используется только в серверной части приложения.

Настройка параметров Firebase Cloud Messaging для центра

На панели слева в разделе Параметры, выберите Google (GCM/FCM) .

Введите ключ сервера для проекта FCM, сохраненного ранее.

На панели инструментов нажмите кнопку Сохранить.

Портал Azure отобразит сообщение о том, что центр был успешно обновлен. Кнопка Сохранить отключена.

Теперь ваш центр уведомлений настроен для работы с Firebase Cloud Messaging. У вас также есть строки подключения, которые необходимы для отправки уведомлений на устройство и регистрации приложения для получения уведомлений.

Читайте также:  Android system files read only one

Подключение приложения к центру уведомлений

Добавление служб Google Play в проект

В Android Studio в меню выберите Средства, а затем — Диспетчер пакетов SDK.

Выберите целевую версию пакета SDK для Android, который используется в проекте. Затем выберите Show Package Details (Показать сведения о пакете).

Выберите Google APIs (API-интерфейсы Google), если они еще не установлены.

Переключитесь на вкладку SDK Tools. Если сервисы Google Play еще не установлены, щелкните Сервисы Google Play, как показано на рисунке ниже. Затем выберите Применить для установки. Запишите путь к пакету SDK. Он вам потребуется в дальнейшем.

Если вы видите диалоговое окно Подтвердить изменение, выберите ОК. Установщик компонентов устанавливает запрошенные компоненты. После установки компонентов выберите Готово.

Выберите ОК, чтобы закрыть диалоговое окно Settings for New Projects (Параметры для новых проектов).

Затем добавьте библиотеки Центров уведомлений Azure.

В файле build.gradle для приложений добавьте следующие строки в раздел dependencies:

После раздела dependencies добавьте следующий репозиторий:

Добавление поддержки Google Firebase

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

На панели инструментов щелкните Синхронизировать сейчас.

Добавление кода

Создайте объект NotificationHubListener, который обрабатывает перехват сообщений из Центров уведомлений Azure.

В методе OnCreate класса MainActivity добавьте следующий код, чтобы запустить инициализацию Центров уведомлений при создании действия:

В Android Studio в строке меню выберите Сборка, затем выберите Пересобрать проект чтобы убедиться, что в вашем коде нет ошибок. Если появляется сообщение об ошибке о значке ic_launcher, удалите следующую инструкцию из файла AndroidManifest.xml:

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

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

Во время первоначального запуска регистрация может завершиться неудачно, пока не будет вызван метод onTokenRefresh() службы ИД экземпляра. Чтобы заново начать регистрацию в центре уведомлений, обновите страницу.

отправка проверочного уведомления.

Push-уведомления можно отправлять в центр уведомлений из портала Azure следующим образом:

На портале Azure на странице «Центра уведомлений» для своего центра выберите Тестовая отправка в разделе Устранение неполадок.

В качестве платформы выберите Android.

Нажмите кнопку Отправить. Вы пока не увидите уведомление на устройстве Android, потому что на нем еще не запущено мобильное приложение. После запуска мобильного приложения нажмите еще раз кнопку Send (Отправить), чтобы просмотреть уведомление.

Результат операции можно увидеть в списке в нижней части портала.

Вы увидите сообщение уведомления на своем устройстве.

Push-уведомления обычно отправляются во внутренней службе, например мобильных приложениях или службе ASP.NET, с помощью совместимой библиотеки. Если для серверной части библиотека недоступна, для отправки уведомлений также можно напрямую использовать REST API.

Запуск мобильного приложения в эмуляторе

Перед проверкой отправки push-уведомлений в эмуляторе, убедитесь, что образ эмулятора поддерживает уровень API Google, выбранный для приложения. Если образ не поддерживает собственные API-интерфейсы Google, создается исключение SERVICE_NOT_AVAILABLE.

Кроме того, добавьте учетную запись Google в запущенный эмулятор. Для этого щелкните Settings (Параметры) > Accounts (Учетные записи). В противном случае попытки регистрации в FCM могут привести к исключению AUTHENTICATION_FAILED.

Дальнейшие действия

В этом руководстве вы использовали Firebase Cloud Messaging, для отправки уведомлений на все устройства Android, зарегистрированных в службе. Чтобы узнать, как отправлять push-уведомления на конкретные устройства, перейдите к следующему руководству:

Ниже приведен список других учебников, касающихся отправки уведомлений:

Мобильные приложения Azure. Пример отправки уведомлений с сервера мобильных приложений, интегрированного с Центрами уведомлений, см. в статье Добавление push-уведомлений в приложение iOS.

Пакет SDK для Центров уведомлений Azure для Java: сведения об отправке уведомлений Java см. в статье Использование концентраторов уведомлений из Java. Было протестировано в Eclipse для разработки для Android.

Источник

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