уведомление в браузере php

HTML5 Notifications — это просто: делаем уведомления одной строкой, как в GMail

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Наверняка все, кто пользовался почтой от Google, хоть раз видели уведомления вроде этого:

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Уведомления почты gmail

Эти уведомления называются HTML5 Notifications, и они видны, даже если перейти в другую вкладку или вообще свернуть браузер.

После прочтения этой статьи вы сможете сделать такие же уведомления и для своего сайта. Код простой, кроссплатформенный, и непосредственно отправка уведомления занимает всего 1 строку на любимом JavaScript.

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

Согласно сайту caniuse.com, сейчас такие уведомления (HTML5 Notifications) работают в браузерах Chrome, Firefox (35+), Opera (27+), Safari (7.1+). Internet Explorer поддержки интернета уведомлений не имеет. Если рассматривать мобильные платформы, то частичная поддержка HTML5 Notifications есть только у Android Browser.

Перед тем, как непосредственно отправлять уведомления, нам нужно получить права (permission) на это.
Сделать это можно методом Notification.requestPermission() :

Вот её разные значения с пояснениями:

Получив права, можем приступать непосредственно к отправке уведомлений.
Делается это очень просто, одной строкой:

title — заголовок уведомления,

options (опционально) имеет следующие параметры:

Попробуем установить параметры и отправить уведомление:

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Результат выполнения кода выше

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Одна функция для всего

Теперь соберем всё в единую функцию и добавим несколько проверок на ошибки:

Теперь у нас есть красивая функция, с помощью которой можно просто отправлять уведомления, не отвлекаясь на запрос прав или поддержку браузера:

Результат выполнения функции в разных браузерах:

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Внешний вид уведомления в Chrome

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Внешний вид уведомления в Firefox

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации

Источник

Уведомления в браузере ( типа вк или другое)

3 ответа 3

Есть два типа пуш уведомлений: на одном вебсокеты точеные, с другим проблем тоже хватает.

Для реализации первого типа вам по сути нужна любая обычная система мессаджей от вашего сервера вашему клиенту. Это могут быть хоть вебсокеты, может быть лонг поллинг, может быть sse. Да хоть сигнальные костры на гуглмапс =)
Алексей Шиманский в своем комментарии подразумевал именно этот тип сообщений.

Со вторым типом все сложнее. И реализовать их «просто прикрутив какую-то библиотеку или плагин на js» нельзя. Потому что нету этого вашего клиентского js когда вкладка закрыта. Ну собственно почему у клиента должен выполняться ваш скрипт если он не у вас на сайте?

Сделать это можно, но на пути нас поджидают неприятности.

Начнем с того, что есть спецификация Notifications api. Но разумеется она еще совсем не готова, браузеры ее нормально не поддерживают (что поддерживать то, что десять раз еще поменяется). Использовать в кровавом энтерпрайзе нельзя точно. Если у вас много энтузиазма и смузи, можете попробовать прикрутить для каких-то браузеров.

Это разумеется порождает следующую проблему: для того чтобы у вас все было чудесно кроссбраузерно и розовые единороги прыгали по зеленой лужайке, вам нужно найти как можно больше таких сервисов и для каждого написать прослойку на своей стороне, которая будет этот сервис дергать. А универсального формата нету. А сервисов не так уж и мало. И каждый что-то да меняет иногда, и придется поддерживать как-то этот зоопарк.

Соответственно появились прослойки разной степени надежности, функциональности и платности. Упомянутые пользователем mics onesignal.com и clevertap.com относятся к таким прослойкам.

А теперь к плохому. Готовое работающее исключительно бесплатное решение я не нашел (искал где-то полдня, если кто-то подскажет, буду благодарен.). Есть решения платные, есть сервисы предоставляющие бесплатную триалку и есть «бесплатные».

Источник

Web PUSH Notifications быстро и просто

Добрый день. В этой небольшой заметке я хочу рассказать как быстро и просто настроить push-уведомления на вашем сайте. Эта статья ни в коем случае не претендует на звание исчерпывающего руководства, но, я надеюсь, что она даст точку старта для дальнейшего изучения.

Информации по этой теме в интернете полно, но она фрагментирована, разбросана по разным ресурсам и перемешена с уведомлениями для мобильных устройств с примерами на Java, C++ и Python. Нас же, как веб-разработчиков, интересует JavaScript. В этой статье я постараюсь саккумулировать всю необходимую и полезную информацию.

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Я думаю, вы уже знаете что такое push-уведомления, но я всё же напишу коротко о главном.

Пользователь, заходя на сайт, вытягивает (pull) с него данные. Это удобно и безопасно, но с развитием интернет ресурсов, появилась необходимость оперативно доставлять информацию пользователям не дожидаясь пока те сами сделают запрос. Так и появилась технология принудительной доставки (push) данных с сервера клиенту.

Push-уведомления работают только если у вас на сайте есть HTTPS.
Без валидного SSL сертификата запустить не получится. Так что если у вас еще нет поддержки HTTPS, то пришло время её сделать. Рекомендую воспользоваться Let’s Encrypt.
Для запуска на localhost нужно прибегать к хитростям. Я же тестировал скрипты на Github Pages.

Оглавление

Хорошие уведомления

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

Плохие примеры тоже требуют уведомления, но на них не нужно реагировать оперативно. Эти уведомления можно отправить на почту. Вообще, все важные уведомления рекомендуется дублировать на почту, так-как push-уведомления могут не дойти до пользователя по разным, не зависящих от вас, причинам. Также важным фактором является актуальность события. Об этом я еще поговорю чуть позже. Рекомендую к прочтению:

Вернемся к нашим баранам. Так как же всё это работает? Для начала немного теории.

Теория

Среди непосвященных бытует мнение что push-уведомления это простая технология, не требующая для реализации особых ресурсов. В действительности же это целый пул технологий.

Для начала небольшая схема того как все это работает (анимированная схема):

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

К сожалению, мне не удалось выяснить кто и как создает ID устройства и как сервер сообщений привязывается к конкретному устройству. Я использовал сервер сообщений Firebase Cloud Messaging от Google и его библиотеку. К сожалению, я не смог выяснить можно ли его заменить на свой сервер и как это сделать.

Изначально для отправки сообщений использовали:
Cloud to Device Messaging

Потом его заменили на:
Google Cloud Messaging

А потом еще раз поменяли на:
Firebase Cloud Messaging

Интересно, что дальше.

Что же происходит на стороне клиента?

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

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

Это все выглядит очень сложно, но на сервере все не проще.

Сложности на серверной стороне

Практика

Наконец-то, мы перешли к самому главному. Как я уже говорил ранее, в качестве сервера сообщений мы будем использовать Firebase Cloud Messaging, поэтому мы начинаем с регистрации и создания проекта на Firebase.

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

Приступаем к написанию клиента

Начнем с того что создадим Service Worker для получения push-уведомлений.
Создаем файл firebase-messaging-sw.js с следующим содержимым.

Файл Service Worker-а должен называться именно firebase-messaging-sw.js и обязательно должен находиться в корне проекта, то есть доступен по адресу https://example.com/firebase-messaging-sw.js. Путь к этому файлу жестко прописан в библиотеке Firebase.

Написанного кода достаточно для того чтобы показывать уведомления. О дополнительных возможностях поговорим чуть позже. Теперь добавим библиотеку Firebase и скрипт подписки в наш шаблон страницы.

Добавляем на страницу кнопку для подписки на уведомления

Подписка на уведомления

Вот и все. Это весь код который требуется для получения push-уведомлений.

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

В общем виде отправка уведомления выглядит так:

Все поля по порядку:

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Это пример отправки одного уведомления одному получателю. Можно отправить одно уведомление сразу нескольким получателям. Вплоть до 1000 получателей за раз.

Пример ответов от сервера сообщений:

Мы не привязаны к какому-то конкретному языку программирования и для простоты примера будем использовать PHP с расширением cURL. Скрипт отправки уведомления нужно запускать из консоли.

messaging.onMessage

Обработчик messaging.onMessage стоит отдельного упоминания, так как он относится как раз к категории подводных камней. В примерах от Firebase я не видел примера использование этого обработчика. О нем мне рассказал FluorescentHallucinogen, за что ему отдельное спасибо, но он не упомянул о некоторых особенностях его использования.

Что же это за обработчик и как он работает. Из документации мы знаем, что этот обработчик вызывается если мы получаем push-уведомление и находимся в этот момент на странице сайта с которого отправлено уведомление (желающие использовать нативное решение могут посмотреть пример реализации). Эта функциональность очень полезна тем, что мы можем отобразить уведомление на странице сделав красивую модалку или еще что-то. У меня такой необходимости нет, потому я просто отображу стандартное уведомление.

Вроде все просто, но есть подводный камень. Дело все в том что на мобильных устройствах запрещено использовать конструктор Notification. И для решения этой проблемы нужно использовать ServiceWorkerRegistration.showNotification() и обработчик в этом случае будет иметь виде:

Теперь уведомления работают и на мобильных устройствах. Казалось бы уже все, но нет. Не смотря на заверения некоторых, ServiceWorker не должен быть пустым. Мы же хотим, что бы по клику пользователь переходил на нужную нам страницу. Для этого нам нужно добавить обработчик клика по уведомлению в ServiceWorker.

Сохраняем параметры уведомления для доступа свойству click_action в ServiceWorker-е.

Обрабатываем клик по уведомлению в ServiceWorker-е.

TTL и дополнительный контроль над уведомлением

Важным свойством для уведомления может является время его актуальности. Это зависит от ваших бизнес процессов. По умолчанию время жизни уведомлений 4 недели. Это очень много для уведомлений такого характера. Например, уведомление «Ваша любимая передача начинается через 15 минут» актуально в течении 15 минут. После этого сообщение уже не актуально и показываться не должно. За контроль над временем жизни отвечает свойство time_to_live со значением от 0 до 2419200 секунд. Подробней читать в документации. Сообщение с указанным TTL будет иметь вид:

Сообщение вида «Ваша любимая передача начинается через 15 минут» актуально в течении 15 минут, но уже через минуту после отправки оно станет не корректным. Потому что передача начнется не через 15 минут, а уже через 14. Контролировать такие ситуации нужно на стороне клиента.

Для этого мы поменяем отправляемое с сервера сообщение:

Вот таким незамысловатым образом мы получили полный контроль над уведомлением. Что самое интересное, пользователю мы показываем время уведомления в его часовом поясе. Это актуально для сервисов который работают по всему миру или регионах с широким разбросом часовых поясов как у матушки-России.

Заключение

А теперь поговорим о грустном. Не смотря на все прелести технологии, у неё есть ряд недостатков:

Библиотека Firebase скрывает в себе много тайн и её исследование могло бы дать ответы на некоторые вопросы, но это уже выходит за рамки этой статьи.

Поиграться

Проект на GitHub Pages

Так как для запуска Service Worker-а нужен HTTPS, то самым простым решением было разместить проект на GitHub Pages, что я и сделал.

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

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

Можно отправить уведомление через любой инструмент для отправки HTTP запросов. Можно использовать сURL, я предпочитаю приложение Postman для Chrome.

Запрос такой же как и описанный ранее:

Вот и все. Получаем уведомление и радуемся жизни.

Ссылки

Updated at 2018-06-09

Обнаружились некоторые «особенности» в работе уведомлений.

Дубликаты уведомлений

Ко мне несколько раз обращались с вопросом: «Как исправить дублирующиеся уведомления?»

Проявляется эта проблема если открыть сайт отправляющий уведомления одновременно в нескольких вкладках. В этом случае Service Worker отправляет уведомление в обе вкладки и в обоих вкладках срабатывает метод messaging.onMessage. Наблюдать эту проблему можно на моем Demo проекте.

Могу порекомендовать для этих целей библиотеку pamelafox/lscache.
Если у вас есть другой метод решения проблемы, напишите в комментариях.

Картинки в уведомлениях

Сегодня ко мне обратился пользователь CTterorist, заметивший, что не отображаются картинки (image) в уведомлениях.

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

То есть, если вы отправите сообщение в таком виде, то Firebase потеряет картинку.

Обработчики показа уведомления такие же как в примерах выше.

Источник

Реализуем пуш-уведомления на фронтенде и бэкенде

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

В предыдущей статье об iss-observer.com я обещал рассказать о технической стороне реализации пуш-уведомлений. Изначально я планировал сконцентрироваться на проблемах, с которыми пришлось иметь дело в процессе работы над iss-observer.com. Теперь я думаю, будет полезнее посвятить материал базовым вопросам, и уточнять детали, где это необходимо. Обращаю ваше внимание, что фронтенд частично опирается на этот урок.

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Фронтенд

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

Посмотрим на push.js. Здесь мы регистрируем сервис-воркер и подписываемся на уведомления:

В первую очередь создаем константу addServiceKey : ей присваиваем значение с открытым ключ VAPID (о нем мы говорили выше). Также создаем несколько элементов и переменных. Записываем функцию urlB64ToUint8Array() : она понадобится для конвертации ключа из base64 в Uint8Array.

Метод subscribe() возвращает промис, а в качестве аргумента принимает объект с двумя свойствами:

Теперь отправляем данные подписки на сервер. Смело используем Fetch API, так как все браузеры, которые поддерживают пуш-уведомления, поддерживают и Fetch. После получения ответа выводим результат — завершена ли подписка успешно.

Этот этап прекрасно подходит для уточнения нужных параметров у пользователя. Например, на iss-observer.com он может выбрать время получения уведомлений (утро и/или вечер). Я также отправляю на сервер данные о стране, регионе и городе, по которому пользователь хочет получать уведомления; данные сохраняются и могут потребоваться при отправке уведомлений.

Последний шаг — регистрация сервис-воркера.

Сервис-воркер

Бэкенд

Переходим к серверной части, в которой мы используем web-push library. В нашем случае это реализация библиотеки для Node.js, но версии для PHP, Java и C# также доступны.

Я предполагаю, что у вас есть базовые знания Node.js и опыт использования Express. В ином случае, я рекомендую вам ознакомиться с ними прежде чем продолжить.

Итак, в первую очередь:

Теперь передаем данные VAPID. Помимо сгенерированной в начале пары ключей, нужно указать адрес электронной почты (с префиксом mailto: ) либо URL сайта. Контактные данные могут потребоваться сервису для связи с вами. Обратите внимание на комментарии: я предпочел сохранить ключи в переменную окружения. Вы можете поступить так же или выбрать свой метод, но главное помните, закрытый ключ должен быть всегда защищен от обращений извне. Собственно поэтому он так и назван.

Переходим к функции подписки:

Прим. переводчика: endpoint — это уникальный URI, создаваемый для каждого пользователя индивидуально в соответствии с паттерном : p256dh — открытый ключ, auth — закрытый ключ.

Затем получаем наше первое уведомление — то, которое приветствует подписавшегося пользователя. Метод sendNotification() принимает три аргумента:

TTL (Time To Live) — срок жизни уведомления —по умолчанию четыре недели. Это значит, что оно будет ожидать появления пользователя онлайн в течение этого срока. Например, если вы отправили уведомление пользователю в оффлайне, и он подключится к сети только через две недели, сообщение все равно будет доставлено. В моем случае разумно изменить TTL на более короткий срок.

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

Дополнительно

Вероятно, каждый из вас столкнется со своим случаем применения пуш-уведомлений, и просто скопировать код не получится. Однако я надеюсь, что этот урок поможет вам реализовать искомую функциональность как на стороне клиента, так и на стороне сервера.

Демо проекта, исходный код опубликован на GitHub.

Для более глубокого погружения в тему рекомендую бесплатную книгу Web Push Book и примеры на servicewore.rs.

Если вам есть что спросить, или есть что добавить, пишите в Twitter или по электронной почте.

Источник

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

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Вероятно, вы все уже слышали про технологию «Веб-push» в составе Push API и Notifications API. Я уверен, что среди вас есть те, кто возлагает надежды на эту технологию, как на новый канал коммуникации с пользователем. И я не исключаю возможность, что данную статью будут читать основатели тех немногочисленных стартапов, которые всерьёз занялись окучиванием технологии «Веб-push» для рекламы и маркетинга. Сегодня я вам расскажу, о том как можно использовать данную технологию.

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

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

Но так или иначе технология существует и её надо осваивать. Настал тот момент, когда я решил встроить уведомления на сайт. Как оказалось, технология (Web Push API и Notification API) достаточно простая и естественно появилось желание поэкспериментировать. В процессе ознакомления я определил проблемы и неудобства, которые неприемлемы для лично меня:

Собственно, для начала было сделано расширение для браузера, которое умеет бегать на сервер и спрашивать есть ли для него сообщения (ссылка на код расширения в конце статьи). Если сообщения есть, то в зависимости от настроек пользователя, появляются уведомления на рабочем столе. Так же пользователь может получить доступ к списку активных уведомлений в любое время нажав на иконку расширения в браузере. Есть опция «Не беспокоить», которая позволяет отключать уведомления, но оставляет возможность пользователю получить доступ к пришедшим уведомлениям через кнопку расширения. Так же вне зависимости от настроек на кнопке расширения присутствует индикация наличия непрочитанных сообщений.

Установка расширения выполнена в inline стиле, благодаря чему подписка на уведомления сводится к двум кликам мышкой. Необходимо разместить кнопку, при нажатии на которую пользователю будет предложено установить расширение. Данную кнопку можно разместить в любом месте сайта. Также кнопку подписки можно прятать если расширение уже установлено. Вот пример посадочной страницы подписки на уведомления, который я сделал для приложения Пример посадочной страницы подписки

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Расширение можно удалить стандартным способом, т.е. так же, как и любое другое расширение для браузера, но для удобства, дополнительно добавлена кнопка для удаления. На случай самоликвидации отправителя, существует способ удаленно деинсталлировать расширение со всех устройств пользователей, послав в заголовке сообщения секретную команду, где вы ещё такое найдёте :).

Что касается серверной части, то тут мы имеем небольшую админку написанную на PHP для внесения уведомлений в БД и шлюз для приема запросов от пользователей и соответственно выдачу уведомлений из БД. Этот же шлюз используется для сбора статистики и пишет всё в ту же БД.

уведомление в браузере php. Смотреть фото уведомление в браузере php. Смотреть картинку уведомление в браузере php. Картинка про уведомление в браузере php. Фото уведомление в браузере php

Вот пример того как сервер отдает JSON для уведомлений (установлен лимит в 3 сообщения).

А вот так формирую JSON для отображения в расширении. Тут отдаём HTML снипет:

Формируем HTML снипет extention_m.php:

Осталось рассказать про статистику. Я много делать не стал. В свою базу добавляю по минимуму. С остальным хорошо справляется Google Analytics. Просто при публикации расширения я указал Google Analytics ID и могу получать всю информацию о просмотрах и переходах по ссылкам, которые содержатся в уведомлениях.

Вот таким способом мне удалось оптимизировать технологию веб-push уведомлений и сделать её более удобной (по крайней мере для себя). Учитывая широкие возможности браузерных расширений, в данное приложение можно добавить более богатый функционал.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *