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

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

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

В этом уроке рассмотрим основы — отображение/обновление/удаление уведомления и обработка нажатия на него.

Отображение

Код создания простого уведомления выглядит так:

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

Далее используем NotificationManager и его метод notify, чтобы показать созданное уведомление. Кроме notification, требуется передать id. Это необходимо, чтобы в дальнейшем мы могли использовать этот id для обновления или удаления уведомления.

Конструктор new NotificationCompat.Builder(Context) будет помечен как Deprecated, если вы используете библиотеку appCompat версии 26 и выше. Так получилось потому, что в Android API 26 появился новый конструктор и рекомендуется использовать его. Пока не обращайте внимание на это. В одном из следующих уроков мы рассмотрим использование правильного конструктора.

Запустив этот код, мы увидим уведомление

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

Обновление

Мы отобразили уведомление и теперь хотим его обновить. Для этого нужно просто снова показать уведомление методом notify и использовать при этом тот же id.

Это будет выглядеть так:

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

Несколько уведомлений

Чтобы показать новое уведомление, а не обновить уже существующее, надо использовать другой id в методе notify.

Мы использовали разные id в методе notify и получили два разных уведомления

Удаление

Чтобы удалить уведомление, используем NotificationManager и его метод cancel с указанием id уведомления.

Либо методом cancelAll можем удалить все уведомления сразу

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

Обработка нажатия

Чтобы выполнить какое-либо действие по нажатию на уведомление, необходимо использовать PendingIntent. PendingIntent — это контейнер для Intent. Этот контейнер может быть использован для последующего запуска вложенного в него Intent.

Мы будем создавать Intent для запуска, например, Activity, упаковывать этот Intent в PendingIntent и передавать PeningIntent в уведомление. По нажатию на уведомление, система достанет из него PedningIntent и использует вложенный в него Intent, чтобы запустить Activity.

Давайте посмотрим, как это выглядит на практике:

Создаем Intent для запуска Activity и упаковываем его в PedningIntent.

Подробно о PedningIntent и его параметрах вы можете почитать в Уроке 119. Там я подробно рассмотрел различные кейсы на примерах с уведомлением и вызовом BroadcastReceiver.

Созданный PendingIntent нам надо будет передать в билдер уведомления. Полный код создания уведомления будет выглядеть так:

Передаем PendingIntent в метод setContentIntent билдера уведомления.

По нажатию на уведомление откроется MainActivity

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

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

Билдер уведомления имеет еще несколько методов, которые могут быть полезны.

setNumber — позволяет добавить число в уведомление

setContentInfo — добавит текст справа

В старых версиях это выглядит так

Читайте также:  Winhost exe как удалить

В последних версиях он переехал в верхнюю часть уведомления

setColor — добавит фоновый цвет к иконке

setWhen — можно указать свое время для уведомления (время when). По умолчанию when = времени создания уведомления

setShowWhen — показывать ли время в уведомлении

setUsesChronometer — вместо статичного времени в уведомлении будет отображаться счетчик (00:00), показывающий сколько прошло от времени when. Может быть полезно для уведомления секундомера или звонка.

setOngoing — такое уведомление пользователь не сможет закрыть или смахнуть. Оно будет отображаться поверх обычных уведомлений.

setVibrate, setSound, setLights — настройки вибры, звука и LED индикатора устройства

setPriority — возможность установить приоритет. Доступные значения от -2 (NotificationCompat.PRIORITY_MIN) до 2 (NotificationCompat.PRIORITY_MAX). Поведение может отличаться на разных версиях Android, но общий смысл одинаков — чем выше приоритет, тем выше вероятность того, что пользователь увидит ваше уведомление.

setTimeoutAfter — возможность установить таймаут (в мсек), после которого уведомление само удалится. Добавлен в API 26.

setLargeIcon — возможность задать свою картинку в качестве иконки уведомления.

Иконка из setSmallIcon будет видна в статусбаре, когда панель уведомлений не раскрыта.

А само уведомление будет выглядеть так:

setProgress — возможность отобразить прогрессбар в уведомлении

У метода три параметра:

max — максимальное значение прогрессбара. Укажите 0, если надо скрыть прогрессбар.

progress — текущее значение прогрессбара. Может быть от 0 до max.

indeterminate — если true, то будет показан "бесконечный" прогрессбар

Сначала отображаем бесконечный прогрессбар и текст Preparing. Т.е. делаем вид, что идет подготовка к выполнению операции.

Затем в отдельном потоке имитируем выполнение операции. Каждые 300 мсек увеличиваем значение progress и обновляем уведомление, чтобы прогрессбар показал текущий прогресс. А также в тексте показываем значение прогресса и максимума.

После выполнения операции скрываем прогрессбар и показываем текст Completed.

Повторюсь, очень рекомендую прочесть и понять Урок 119. В нем я подробно рассматриваю, почему PendingIntent последнего уведомления заменяет PendingIntent предыдущих уведомлений, и как этого можно избежать, используя, например, requestCode.

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Это очередное видео из серии «Инструменты андроид-разработчика», в котором мы начинаем разбираться с таким замечательным инструментом от Google, как Firebase. Вернее, это целый набор инструментов и сервисов для реализации в приложениях таких вещей, как аутентификация пользователей, облачное хранение данных и файлов, сообщения и уведомления, облачное тестирование, аналитика, отчеты о сбоях, реклама и т.д. Firebase встроили в среду разработки с последним обновлением до версии Android Studio 2.2, о котором я рассказывал в предыдущем видео. Кто не смотрел, можете найти его по ссылке в описании.

А сейчас я покажу вам, как просто можно реализовать рассылку целевых уведомлений для пользователей вашего приложения через сервис Firebase Notifications.

Чтобы на практике реализовать рассылку уведомлений с помощью FCM, записывайтесь на продвинутый курс по разработке приложения «Чат-мессенжер»

Для этого я создал новый проект в Android Studio, все параметры я оставил по умолчанию.
Сервис Firebase доступен в меню Tools. Открываем и видим все инструменты, доступные для добавления в наше приложение. Сейчас нас интересует Notifications, остальные будем рассматривать в последующих выпусках.
Выбираем его в списке. Открылось меню со списком шагов по внедрению сервиса в проект.

Читайте также:  Android на intel atom

В первом шаге нужно установить связь приложения с Firebase. Нажимаем кнопку. Откроется окно браузера, где нужно выбрать аккаунт Google, через который произойдет ваша регистрация в сервисе Firebase. Нужно подтвердить согласие с предоставлением доступа к вашему аккаунту. В случае успеха в Android Studio видим сообщение «Connected».
Следующий шаг: добавление библиотек Notifications в приложение. Нажатие кнопки добавляет необходимые зависимости в файлы сборки проекта и приложения.
В третьем шаге указано, что приложение уже настроено для получения уведомлений в фоновом режиме. Для проверки нужно перейти в консоль Firebase и отправить уведомление. Но прежде нужно запустить приложение на устройстве. Запускаем и сворачиваем приложение, поскольку на данном этапе уведомление будет получено, только если приложение не активно в настоящий момент. Теперь переходим по ссылке в консоль Firebase, видим наше приложение. Выбираем в меню слева вкладку Notifications.

Здесь можно создать новое сообщение. Вводим его текст. Можно ввести заголовок, но это необязательно — он не будет показан на устройстве.

Указываем дату доставки сообщения — можно отправить сейчас или запланировать на срок до одного месяца. Указываем таргетинг — можно отправить уведомление на все устройства с установленным приложением или только на определенные, на основании токена.
Мы отправляем на все, ниже выбираем имя пакета приложения. Можно обрабатывать события конверсий, например, отправлено, прочитано, или добавлять свои события для оценки эффективности оповещений. В расширенных настройках можно указать заголовок оповещения, который будет отображаться на устройстве, а также добавить пары «ключ-значение», которые будут включены в оповещение. Также можно установить приоритет оповещения, срок его действия и включить звуковое уведомление, которое по умолчанию отключено. Нажимаем кнопку отправки сообщения, и попадаем в список оповещений, где можно посмотреть их состояние, дату доставки и статистику прочитанных сообщений. Статистика обновляется с задержкой, поэтому сейчас ничего не будет видно. Тем не менее, уведомление получено устройством, его можно прочитать и перейти в приложение при нажатии на уведомление.


Как я уже говорил, уведомление приходит только когда приложение не активно. Это происходит потому, что когда приложение находится в бэкграунде, то уведомление отправляется сразу в Notification center андроид-устройства. Если открыть приложение, то уведомление не будет получено устройством, хотя на сервере оно отмечается как отправленное. Чтобы получать уведомления, когда приложение открыто, нужно создать сервис в приложении, который будет слушать оповещения и реагировать на них. Создайте в приложении такой класс сервиса, унаследованный от класса FirebaseMessagingService.

. 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 и добавляем его к проекту.

Нажимаем готово, зависимости уже добавлены в тестовом проекте.

Читайте также:  Hp deskjet 1050 driver

Подготовительная часть закончена, можно нажимать кнопку «Запустить приложение»

В процессе компиляции вы можете получить 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 уведомления.

Ой, у вас баннер убежал!

Похожие публикации

Юбилейный Andro > 66,3k 120

Инструкция по публикации Andro > 175k 13

Исследование Google Play Services: Place Picker & Autocomplete

Как настроить проект LibGDX с Gradle, Google Play Services

ActivityRecognitionClient из библиотеки Google Play Services — «распознавание действий пользователя»

Знакомьтесь — Google Play Services

Читают сейчас

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 17

Буквально сегодня подключал FireBase — при создании проекта можно импортировать существующее приложение — оно автоматически подтянет настройки Google Аналитики и ДОпишет идентификатор в json файл настроек — в итоге работает и старая аналитика и новая.

Но пришлось повозиться с управлением проектами (их полный перечень можно найти в https://console.developers.google.com/iam-admin).

Я случайно приимпортировал проект к другому аккаунту. Пришлось удалить. Тоже напугало такое предупреждение, но решил, что смогу приимпортировать заново к другому аккаунту. Фиг. Не получается. Решил проблему так:

— проекты сразу не удаляются, а висят еще неделю в консоли AIM
— я восстановил все проекты, которые нужны и уже вытянули всю статистику
— там же. в AIM консоли добавил все рабочие аккаунты в перечень владельцев, и потом переключив пользователя, убрал права у изначального пользователя-инициатора проекта
— таким образом у необходимого пользователя собрал все проекты после импорта. Пустые дубликаты висят в списке на удаление.

Интересно, что если после удаления проекта (после удачного импорта) повторно импортировать не получается — только создать. Но при этом выдаются новые id приложения, никак автоматически приложения не увязываются c Google Developer Console и Google Analytics.
Поэтому если проект уже приимпортирован рабочий, осторожно — не удаляйте. Просто уберите из json лишнюю аналитику и настройки FireBase сбора данных.

Тестировал аналитику на устройствах — проблем с файловыми интентами не заметил. Но без разрешения для проекта в AIM консоли на отсылку отчетов о крашах «Mobile Crash Analytics» отказывался их слать в FireBase.

Ссылка на основную публикацию
Panel x keeper ru личный кабинет
Скачать Тут вы можете скачать АПK-файл "X-Keeper Panel" для Андроид бесплатно, апк файл версии - 1.1.2 для загрузки на ваш...
Mysql вывести последнюю запись
Это пример кода для выбора всех записей из таблицы. Может ли кто-нибудь показать мне, как выбрать последнюю запись этой таблицы?...
Mysql query error select distinct
I keep running into the same error, using MySQL. The totaal value is marked as wrong, but i have no...
Panther что это за папка
Member Статус: Не в сети Регистрация: 30.07.2006Откуда: Москва Зеленогр День добрыйНе так давно установил Windows 7 x64Диску С я выделил...
Adblock detector