Разработчики Mozilla представили начальный прототип технологии Push Notifications, позволяющей организовать доставку уведомлений, отправляемых клиентам по инициативе сайтов. Используя представленную технологию сайт может отправить пользователю небольшое сообщение, даже когда данный сайт не открыт в браузере пользователя. В настоящее время похожие сервисы реализованы в iOS и Android, но они специфичны для каждой из этих платформ. Задачей Mozilla является создание универсальной реализации, которая могла бы выступать в роли web-стандарта. Технологию "Push Notifications" не стоит путать с механизмом "Desktop Notification", требующим для своей работы наличия открытого в браузере окна с сайтом.

Технология Push Notifications рассчитана на непосредственный вывод уведомлений пользователю (вывод уведомления осуществляет браузер) и является чем-то средним между email и системами мгновенного обмена сообщениями. В качестве областей возможного применения называется отправка webmail-системами уведомлений о получении новых email, генерация сообщений о наступлении каких-то событий, например, информации о проблемах от системы мониторинга или достижения курса валюты какого-то уровня.

Чтобы сообщения могли быть отправлены пользователю, сайт запрашивает подтверждение операции, при получении которого генерируется специальный URL-идентификатор доставки. Процесс доставки контролируется на стороне браузера, что защищает систему от возможных рассылок спама, - браузер забирает только сообщения из каналов доставки, с идентификаторами на которые явно подписался пользователь. Отменив подписку, пользователь больше не увидит сообщений, даже если сервер продолжит их отправлять.

Получив URL-идентификатор, серверное ПО сайта при необходимости отправки сообщения определённому пользователю, формирует по данному URL обычный POST-запрос с пакетом данных в json-формате (передаётся заголовок сообщения, тело сообщения, ссылка для перехода и другие информационные данные). URL-идентификаторы ссылаются на специальный промежуточный сервер нотификации (Notification Service), который занимается приёмом запросов с серверов и организацией доставки сообщений клиентам. Периодически браузер проверяет наличие новых сообщений на серверах нотификации и забирает те, на которые имеется активная подписка. При этом доставка будет осуществлена даже если сообщение отправлено в момент неактивности пользователя, например, когда браузер не запущен. Способ доставки с сервера нотификации в браузер планируется реализовать с использованием методов, уже применяемых при работе функции синхронизации настроек (Firefox Sync). В качестве сервера нотификации могут выступать как централизованные службы, так и поднятое на своих мощностях специальное ПО.

API новой системы нотификации базируется на объекте navigator.notification. На начальном этапе подписки на уведомления, JavaScript-код сайта, который желает отправлять уведомления, вызывает метод notification.requestRemotePermission(), что приводит к выводу специального диалогового окна с вопросом о подтверждении подписки. Если подписка подтверждена на выходе формируется объект для дальнейшего слежения за событиями, связанными с оформлением подписки. Одновременно формируется запрос к серверу нотификации, в результате которого он генерирует уникальный URL-идентификатор, привязывающий сайт к пользователю. Затем данный URL-идентификатор возвращается в скрипт сайта через callback-вызов request.onsuccess, после чего передаётся на сервер, желающий отправлять сообщения.


var notification = (navigator.notification ||




navigator.mozNotification ||




navigator.webkitNotification);
if (notification) {

// Спрашивает подтверждения получения уведомлений

var request = notification.requestRemotePermission();

request.onsuccess = function() {


var url = request.result;


console.log('New push URL: ' + url);


// Сохраняет URL-идентификатор на своём сервере


jQuery.post('/push-urls/', {url: url});

};
}



Источник: http://www.opennet.ru/opennews/art.shtml?num=32992