- Push уведомления в Android с помощью Firebase Cloud Messaging для начинающих
- Нюансы Firebase messaging для начинающих
- Firebase Cloud Messaging
- Обзор
- Firebase облачных сообщений в действии
- Регистрация с помощью FCM
- Подчиненный обмен сообщениями
- Обмен сообщениями с темой
- Настройка Firebase Cloud Messaging
- Дополнительные материалы
- Итоги
Push уведомления в Android с помощью Firebase Cloud Messaging для начинающих
. GCM users are strongly recommended to upgrade to FCM, in order to benefit from new FCM features today and in the future.
В этой статье мы разберем тестовый проект и рассмотрим один подводный камень связанный с иконкой уведомления.
- Android Studio
- Код демо-проекта с github
- 20 минут свободного времени
Шаг 1.
Скачайте демо-проект и откройте его в своей любимой Android Studio.
Теперь нам нужно пойти в Firebase console и добавить наш проект.
Затем нажимаем «Добавьте Firebase в свое приложение для Android».
Название пакета, если вы все делаете по манула: «com.google.firebase.quickstart.fcm».
На втором шаге скачиваем файл google-service.json и добавляем его к проекту.
Нажимаем готово, зависимости уже добавлены в тестовом проекте.
Подготовительная часть закончена, можно нажимать кнопку «Запустить приложение»
В процессе компиляции вы можете получить 2 ошибки:
Missing api_key/current key with Google Services 3.0.0
В этом случае вам нужно зайти в настройки проекта и перезакачать файл google-service.json. Это странный баг, но благо легко лечится.
Вторая ошибка — это:
Failed to resolve: com.google.firebase:firebase-core:9.0.0
Тогда вам нужно обновить Google Play Service и Google Repository. Ссылка на Stackoverflow.
После запуска приложения, в Android monitor увидите наш токен. Можно отправляться тестировать. Идем в консоль, ищем наше приложение, и идем в раздел Grow->Notifications:
Нажимаем создать сообщение:
Вводим наши данные, нажимаем отправить и наблюдаем в Android monitor как все пришло.
Теперь к самому интересному
Самый частый вопрос: как поменять иконку уведомления, когда приложение работает в бэкграунде?
Дело в том, что когда приложение находится в бэкграунде, то оно отправляется сразу в Notification center, и функция
Чтобы использовать свои иконки уведомлений, вам нужно посылать сообщение через API, через консоль такая кастомизация на данный момент не работает.
UPD: Если вы хотите, чтобы все ваши сообщения даже когда приложение в background или убито, обрабатывались с помощью
в приложении, то отправляйте data-сообщения, т.е. без секции notification
Ссылка на API. Для тестов можно использовать старый-добрый CURL.
Вот в целом и все, что вам нужно знать чтобы попробовать новые push уведомления.
Источник
Нюансы Firebase messaging для начинающих
После публикации на Хабре статьи Артёма Осипова «Push уведомления в Android с помощью Firebase Cloud Messaging для начинающих» возник ряд вопросов, которые удалось решить.
Удалось добиться отправки Push-уведомления с вибрацией и со своим звуком + уведомление в статус баре имеет большую иконку и рядом вмещается весь текст. И неважно активно приложение или висит в фоне — при клике на уведомление Main Activity всегда обновляется и несет в себе параметры из уведомления.
Итак, в layout activity_mail.xml добавим два TextView: один для заголовка уведомления и один для текста.
В MainActivity между:
удалить все строки и вставить:
В файле MyFirebaseMessagingService функция
должна иметь такой код:
должна принять код такого вида:
это моя иконка для уведомления, и
это мой .mp3 файл для звукового сопровождения входящего уведомления, помещённый в директорию raw.
Отправку уведомлений осуществляю через CURL. Сначала для тестов пробовал делать это из терминала Raspberry Pi, где строка имела такой вид:
но когда приложение в фоне или закрыто, то уведомление приходило в урезанном текстовом формате без вибрации, но со своими звуком и иконкой. Пришлось отправлять CURL из PHP. Сначала установим CURL в Raspberry Pi:
Создаём файл PHP:
Из терминала запускаем отправку уведомления:
и не важно в каком состоянии находится наше приложение: в фоне или работает — мы получаем уведомление со своим звуком, со своей иконкой и текст уведомления вмещается весь. При нажатии на уведомление (если приложение запущено) главное activity обновится и в двух TextView будут помещены title и body уведомления. Если приложение в фоне, то оно запускается с вышеозначенным результатом.
Ежели мы хотим чтобы при нажатии на уведомление открывалось другое активити, то делаем так:
создаём другое activity с именем Main2Activity. В манифесте перед
Источник
Firebase Cloud Messaging
Firebase Cloud Messaging (FCM) — это служба, которая упрощает обмен сообщениями между мобильными приложениями и серверных приложений. В этой статье приводятся общие сведения о том, как работает FCM, и объясняется, как настроить службы Google, чтобы приложение могла использовать FCM.
В этом разделе представлен общий обзор того, как Firebase Cloud Messaging маршрутизирует сообщения между приложением Xamarin. Android и сервером приложений, а также предоставляет пошаговую процедуру для получения учетных данных, чтобы приложение могла использовать службы FCM.
Обзор
Firebase Cloud Messaging (FCM) — это кросс-платформенная служба, которая обрабатывает отправку, маршрутизацию и очередность сообщений между серверными приложениями и мобильными клиентскими приложениями. FCM является преемником Google Cloud Messaging (GCM) и построен на Сервисы Google Play.
Как показано на следующей схеме, FCM выступает в качестве посредника между отправителями и клиентами сообщений. Клиентское приложение — это приложение с поддержкой FCM, которое выполняется на устройстве. Сервер приложений (предоставленный вами или вашей организацией) — это сервер с поддержкой FCM, с которым клиентское приложение взаимодействует с помощью FCM. В отличие от GCM, FCM позволяет отправлять сообщения в клиентские приложения непосредственно через графический интерфейс уведомлений консоли Firebase:
С помощью FCM серверы приложений могут передавать сообщения на одно устройство, в группу устройств или на несколько устройств, подписанных на раздел. Клиентское приложение может использовать FCM для подписки на подчиненные сообщения с сервера приложений (например, для получения удаленных уведомлений). Дополнительные сведения о различных типах сообщений Firebase см. в разделе About FCM messages.
Firebase облачных сообщений в действии
Когда в клиентское приложение отправляется подчиненное сообщение с сервера приложений, сервер приложений отправляет сообщение на сервер подключения FCM , предоставленный Google; сервер подключения FCM, в свою очередь, перенаправляет сообщение на устройство, на котором выполняется клиентское приложение. Сообщения можно отправлять по протоколу HTTP или XMPP (расширенный протокол обмена сообщениями и протокола присутствия). Поскольку клиентские приложения не всегда подключены или выполняются, сервер подключения FCM ставит в очередь и сохраняет сообщения, отправляя их в клиентские приложения при повторном подключении и доступности. Аналогичным образом FCM помещает в очередь вышестоящее сообщение от клиентского приложения к серверу приложений, если сервер приложений недоступен. Дополнительные сведения о серверах подключения FCM см. в разделе о Firebase Cloud Messaging Server.
FCM использует следующие учетные данные для указания сервера приложений и клиентского приложения и использует эти учетные данные для авторизации транзакций сообщений через FCM:
— идентификатор отправителя — это уникальное числовое значение, которое назначается при создании проекта Firebase. Идентификатор отправителя используется для идентификации каждого сервера приложений, который может передавать сообщения в клиентское приложение. Идентификатор отправителя также является номером вашего проекта; При регистрации проекта вы получаете идентификатор отправителя из консоли Firebase. Примером идентификатора отправителя является 496915549731 .
— ключ API предоставляет серверу приложений доступ к службам Firebase Services; FCM использует этот ключ для проверки подлинности сервера приложений. Эти учетные данные также называются ключом сервера или ключом веб-API. Примером ключа API является AJzbSyCTcpfRT1YRqbz-jIwp1h06YdauvewGDzk .
— удостоверение клиентского приложения (независимо от любого конкретного устройства), которое регистрируется для получения сообщений от FCM. Пример идентификатора приложения: 1:415712510732:android:0e1eb7a661af2460 .
— токен регистрации (также называемый идентификатором экземпляра) является FCM удостоверением клиентского приложения на заданном устройстве. Маркер регистрации создается во время выполнения — приложение получает маркер регистрации при первой регистрации в FCM при выполнении на устройстве. Маркер регистрации авторизует экземпляр клиентского приложения (выполняющегося на этом конкретном устройстве) для получения сообщений от FCM. Примером маркера регистрации является fkBQTHxKKhs:AP91bHuEedxM4xFAUn0z . JKZS (очень длинная строка).
Настройка Firebase Cloud Messaging (далее в этом пошаговом окне) содержит подробные инструкции по созданию проекта и созданию этих учетных данных. При создании нового проекта в консоли Firebaseсоздается файл учетных данных Google-Services. JSON — этот файл добавляется в проект Xamarin. Android, как описано в разделах Удаленные уведомления с помощью FCM.
В следующих разделах объясняется, как эти учетные данные используются при взаимодействии клиентских приложений с серверами приложений через FCM.
Регистрация с помощью FCM
Клиентское приложение должно сначала зарегистрироваться в FCM до того, как система обмена сообщениями может быть выполнена. Клиентское приложение должно выполнить действия по регистрации, показанные на следующей схеме:
Клиентское приложение обращается к FCM, чтобы получить маркер регистрации, передав идентификатор отправителя, ключ API и идентификатор приложения в FCM.
FCM возвращает маркер регистрации клиентскому приложению.
Клиентское приложение (необязательно) перенаправляет маркер регистрации на сервер приложений.
Сервер приложений кэширует маркер регистрации для последующего взаимодействия с клиентским приложением. Сервер приложений может отправить подтверждение обратно в клиентское приложение, чтобы указать, что получен маркер регистрации. После выполнения этого подтверждения клиентское приложение может получать сообщения от сервера приложений (или отправлять сообщения на него). Клиентское приложение может получить новый маркер регистрации, если старый маркер скомпрометирован (см. раздел Удаленные уведомления с помощью FCM в качестве примера того, как приложение получает обновления маркера регистрации).
Когда клиентскому приложению больше не требуется получать сообщения с сервера приложений, оно может отправить запрос на сервер приложений для удаления маркера регистрации. Если клиентское приложение удалено с устройства, FCM обнаруживает это и автоматически уведомляет сервер приложений об удалении маркера регистрации.
Подчиненный обмен сообщениями
На следующей схеме показано, как Firebase облачные службы обмена сообщениями сохраняют и пересылает нисходящие сообщения:
Когда сервер приложений отправляет в клиентское приложение подчиненное сообщение, он выполняет следующие действия, как перечислено на приведенной выше схеме.
Сервер приложений отправляет сообщение в FCM.
Если клиентское устройство недоступно, сервер FCM сохраняет сообщение в очереди для последующей передачи. Сообщения хранятся в хранилище FCM не более 4 недель (Дополнительные сведения см. в разделе Установка срока существования сообщения).
Когда клиентское устройство доступно, FCM перенаправляет сообщение клиентскому приложению на этом устройстве.
Клиентское приложение получает сообщение от FCM, обрабатывает его и отображает для пользователя. Например, если сообщение представляет собой удаленное уведомление, оно будет представлено пользователю в области уведомлений.
В этом сценарии обмена сообщениями (где сервер приложений отправляет сообщение в одно клиентское приложение) размер сообщений может доставлять до 4 КБ.
Подробные сведения о получении подчиненных сообщений FCM в Android см. в разделе Удаленные уведомления с помощью FCM.
Обмен сообщениями с темой
Обмен сообщениями с разделами позволяет серверу приложений отправить сообщение на несколько устройств, участвующих в определенном разделе. Вы также можете создавать и отправлять сообщения раздела с помощью графического интерфейса уведомлений консоли Firebase. FCM обрабатывает маршрутизацию и доставку сообщений раздела клиентам, подписавшимся на них. Эта функция может использоваться для таких сообщений, как оповещения о погоде, котировки котировок и заголовки новостей.
Следующие шаги используются в разделе Обмен сообщениями (после того, как клиентское приложение получит маркер регистрации, как описано выше):
Клиентское приложение подписывается на раздел, отправляя сообщение подписки в FCM.
Сервер приложений отправляет сообщения раздела в FCM для распространения.
FCM пересылает сообщения раздела клиентам, которые подписались на этот раздел.
Дополнительные сведения о сообщениях в разделе Firebase см. в разделе Обмен сообщениями Google в Android.
Настройка Firebase Cloud Messaging
Прежде чем можно будет использовать службы FCM в приложении, необходимо создать новый проект (или импортировать существующий проект) через консоль Firebase. Чтобы создать Firebase облачный проект обмена сообщениями для приложения, выполните следующие действия.
Войдите в консоль Firebase , используя учетную запись Google (т. е. адрес Gmail), и щелкните создать новый проект:
Если у вас уже есть проект, щелкните Импорт проекта Google.
В диалоговом окне Создание проекта введите имя проекта и нажмите кнопку создать проект. В следующем примере создается новый проект с именем ксамаринфкм :
В разделе Обзорконсоли Firebase щелкните Добавить Firebase в приложение Android:
На следующем экране введите имя пакета приложения. В этом примере имя пакета — com. Xamarin. фкмексампле. Это значение должно совпадать с именем пакета приложения Android. Псевдоним приложения также можно указать в поле псевдонима приложения :
Если приложение использует динамические ссылки, приглашения или Google AUTH, необходимо также ввести сертификат для подписи отладки. Дополнительные сведения о поиске сертификата для подписи см. в разделе Поиск подписи MD5 или SHA1. В этом примере сертификат подписи остается пустым.
Щелкните Добавить приложение:
Для приложения автоматически создаются ключ API сервера и идентификатор клиента. Эти сведения упаковываются в файл Google-Services. JSON , который автоматически загружается при нажатии кнопки Добавить приложение. Не забудьте сохранить этот файл в надежном месте.
Подробный пример добавления Google-Services. JSON в проект приложения для получения сообщений push-уведомлений FCM на устройстве Android см. в статье Удаленные уведомления с помощью FCM.
Дополнительные материалы
Облачная система обмена сообщениями Google Firebase предоставляет общие сведения о ключевых возможностях Firebase облачных сообщений, описание его работы и инструкции по установке.
Запросы на отправку приложений Google Build Server посвящены отправке сообщений с сервера приложений.
Rfc 6120 и RFC 6121 объясняют и определяют расширяемый протокол обмена сообщениями и присутствия (XMPP).
О сообщениях FCM описывает различные типы сообщений, которые можно отправить с помощью Firebase Cloud Messaging.
Итоги
В этой статье представлен обзор Firebase Cloud Messaging (FCM). В нем объясняются различные учетные данные, используемые для обнаружения и авторизации обмена сообщениями между серверами приложений и клиентскими приложениями. В нем проиллюстрированы сценарии регистрации и подчиненных сообщений, а также подробно описаны действия по регистрации приложения в FCM для использования служб FCM.
Источник