Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
abills:docs:manual:sender:push [2017/04/21 16:08]
anton [Google Cloud Messaging]
abills:docs:manual:sender:push [2017/07/04 16:34] (текущий)
anton [Web Push API]
Строка 21: Строка 21:
 </​code>​ </​code>​
  
-Администраторы подписываются на Push уведомления на странице "​Профиль"​. +Создать таблицы,​ в которых хранятся клиенты и сообщения 
-Пользователям предложит подписаться сразу при входе в кабинет.+<​code>​ 
 +  # mysql -D abills < db/​Push.sql 
 +</​code>​ 
 + 
 +После этого можно включить скрипты Push переменной конфигурации $conf{PUSH_ENABLED}. 
 + 
 +Администраторы подписываются на Push уведомления на странице "​Профиль"​.\\ 
 +{{ :​abills:​docs:​manual:​sender:​admin_push_subscribe.png?​nolink |}} 
 +\\ 
 +Пользователям предложит подписаться сразу при входе в кабинет.\\ 
 +{{ :​abills:​docs:​manual:​sender:​client_push_subscribe.png?​nolink |}} 
 +\\
 ==== Для разработчиков ==== ==== Для разработчиков ====
 Пример использования:​ Пример использования:​
 <​code>​ <​code>​
   # Подключаем модуль   # Подключаем модуль
-  use Abills::​Sender::​Push+  use Abills::​Sender::​Core
-  my $Gcm = Abills::​Sender::​Push->​new($db,​ $admin, \%conf);+  my $Sender ​= Abills::​Sender::​Core->​new($db,​ $admin, \%conf, { 
 +    SENDER_TYPE => '​Push'​ 
 +  });
  
   # Отправляем сообщение   # Отправляем сообщение
-  $Gcm->​send_message({ +  ​my $request_sent = $Sender->​send_message({ 
-      UID => 2,+      UID     ​=> 2
 +      TITLE   => '​ABillS Push',
       MESSAGE => '​Hello,​ world sended via Push message'​       MESSAGE => '​Hello,​ world sended via Push message'​
     });     });
 +    ​
 + # $request_sent == 1, если запрос к сервису Push завершился успешно. (но это не гарантирует доставку)
 </​code>​ </​code>​
  
-**Важно!!! В строке ​MESSAGE ​не должно быть двойных кавычек **+==== Детали реализации ==== 
 +Сама схема работы WebPush хорошо расписана в [[https://​developers.google.com/​web/​fundamentals/​engage-and-retain/​push-notifications/​|документации для разработчиков Google]]. 
 + 
 +В даном случае есть ServiceWorker в браузере,​ который отвечает за подписку и уведомление сервера о своей подписке.\\ 
 + 
 +Сервер,​ получив даные о подписке записывает контакты в таблицу ''​push_contacts''​ (модуль ''​Contacts''​) и отдаёт клиенту ''​contact_id'',​ который сохраняется внутри ''​indexedDB''​ в браузере ​ \\ 
 + 
 +Когда нужно ​отправить уведомление,​ модуль ''​Push''​ получает контакт из таблицы и отправляет запрос на ''​Push-уведомление''​ сервису Push. Если запрос завершился удачно,​ сообщение сохраняется в таблицу ''​push_messages''​ с некоторым TTL (24 часа).  
 + 
 +Когда клиент получает ''​Push-уведомление''​ от Push-сервиса,​ он используя сохранённый ''​contact_id'',​ получает с сервера ABillS сообщение ​для этого ''​contact_id''​. После отправки сообщения клиенту,​ оно удаляется из таблицы. 
 + 
 +Дневной периодик функцией ''​msgs_clear_push_messages'',​ удаляет сообщения которые так и не были доставлены.\\ 
 +Для модуля ''​Notepad'' ​есть [[abills:​docs:​manual:​periodic:​periodic#​plagin_notepad|billd плагин]],​ для рассылки напоминаний через Push.