Sheldhur
они же не напрямую отправляются? через сервисы гугла, мозилы, эпла?
Dmitriy
Через APNS, FCM
Dmitriy
У FCM все просто, там ща для разрабов хорошо сделанно
Sheldhur
ога, это там регаться надо, сертификаты какие-то получать и всё такое?
Dmitriy
А вот по части APNS надо конечно поплясать
Dmitriy
С FCM просто регаешься, получаешь ключи и вуаля почти все там уже готово
Dmitriy
особенно если еще их либу использовать
Sheldhur
а файрфокс и ie?
Dmitriy
А вот safari это другая песня, нужно для каждого устройства формировать pushPackage
Dmitriy
FireFox работает через FCM, я так понял у них что-то там свое есть, но через FCM норм и до firefox
Dmitriy
IE в разработке
Dmitriy
еще вроде не поддерживают
Sheldhur
окай
Dmitriy
Код sdk со всякими нюансами есть у https://github.com/OneSignal/OneSignal-Website-SDK
Dmitriy
В открытом виде имеется ввиду)
Sheldhur
а сообщения как отправляются? понятно, что json, но в нем должны быть только свежие сообщения или просто последние, а браузер уже сам определит что показать, что нет
Dmitriy
Сообщения отправляются на сервера FCM или APNS. В случае с APNS сафари само там принимает и рисует мессагу. А вот через FCM есть такая тема как ServiceWorker(гугл в помощь), вот этот воркер как раз отвечает за показ и прием сообщений в браузере
Sheldhur
или это очередь должна быть? типа пока пользователь оффлайн они копятся, а как зайдет так должны все вывалиться?
Dmitriy
https://github.com/OneSignal/OneSignal-Website-SDK/blob/master/src/utils.ts - вот тут есть метод isPushNotificationsSupported - видно кто поддерживает
Dmitriy
Как только юзер становиться онлайн - то FCM присылает в ServiceWorker события, там ты их и отлавиваешь
Sheldhur
ааа
Dmitriy
SW работает когда запущен браузер, при этом не нужды открывать страницу с доменом к которому SW привязан
Sheldhur
т.е. мой бэк шлет мессаги в FCM и не парится вообще ни о чём? они там копятся, и вываливаются
Sheldhur
понятно
Dmitriy
SW нужно регистрировать в момент подписки, это можно тоже найти в гите onesignl
Dmitriy
Да, вроде 100 мессаг может храниться в FCM
Dmitriy
Дальше старые удаляются и не будут доставлены
Sheldhur
про sw я в курсе примерно
Sheldhur
мне просто надо понять, как делать, хранить очередь сообщений у себя или нет
Sheldhur
это главное
Dmitriy
Там еще есть тема что старые версии GCM еще поддерживаются и получается что по факту можно реализовать по разному, но я лично советую использовать уже FCM по полной, GCM уже устарел
Dmitriy
До момента отправки в FCM надо конечно что-то хранить у себя
Dmitriy
У нас хранится все сообщения и все статусы
Sheldhur
а у эпла?
Dmitriy
У эпла не могу сказать какой лимит
Dmitriy
С сафари больше мозг выносит формирование правильного пакета для подписки браузера
Dmitriy
А по части клиента там все просто, никаких воркеров
Sheldhur
кто в лес, кто по дрова
Sheldhur
наааайс
Dmitriy
Ага, ну если делаешь для одного сайта и жестко заданно условия то конечно это все не сложно
Dmitriy
Труднее вот такой сервис для всех сделать, клиенты тупят безбожно)
Sheldhur
а зачем нужен тогда скрипт подписки?
Sheldhur
https://meduza.io/push-worker.js
Sheldhur
как я вижу, что всё напрямую делается
Dmitriy
Для того чтобы:
1) Хранить инфу о клиенте на клиенте
2) Спрашивать права у браузера
3) Отслеживать статистику и всякие события
4) Для реализации всяких виджетов, типо кнопок отписки и т.д.
Dmitriy
Ну это костыль как по мне, ну или точнее видимо у них для всех одна мессага
Sheldhur
ну да
Dmitriy
Поэтому они шлют тупо всем сигнал
Dmitriy
а дальше получают с сервака инфу
Sheldhur
ну мне так и надо
Dmitriy
Тогда да, это самое простое
Sheldhur
ну типа тогда никаких FCM и APNS не надо?
Dmitriy
У нас просто задача в отправки куча триггерных мессаг и все они персонализированны, плюс полная стата и история, а это уже ID сообщений и т.д.
Dmitriy
Надо, я не знаю как еще событие push получить
Dmitriy
FCM генерирует событие push и там типо набор данных
Sheldhur
Dmitriy
Можно, даже закрыто или кликнуто
Dmitriy
Но тока это по части FCM
Dmitriy
У сафари все плохо
Sheldhur
крута
Dmitriy
https://github.com/OneSignal/OneSignal-Website-SDK/blob/master/src/service-worker/ServiceWorker.ts
Dmitriy
Вот там видно кучка событий
Dmitriy
notificationclose
Dmitriy
notificationclick
Sheldhur
угу
Dmitriy
Аа, ну и важный момент, в SW нет доступа до localStorage, надо юзать indexedDb чтобы соеденить данные между страницей и воркером
Sheldhur
последний вопрос в FCM\APNS шлется конекретно мессага, которая должна отобразиться или событие, чтобы воркер чекнул?
Dmitriy
Шлеться объект с данным(прям текст сообщения, картинки и т.д.). Либо можно отослать пустое сообщений. Все эти данные будут доступны в обработчике события push
Dmitriy
Далее либо вот как медуза запрашивать данные
Dmitriy
либо использовать то что пришло в push
Sheldhur
а вы как делаете?
Sheldhur
как лучше то?
Sheldhur
универсальнее
Dmitriy
У нас конкретный push это набор данных, никаких запросов на сервере(кроме статистики) мы не делаем
Sheldhur
окай, спсб
ikasymov
Ребята у меня вопрос, если я запустил скрипт через крон и если этот скрипт после завершение своей цели не выходит с процесса то то это в итоге приведет к утечке памяти?при каждом последующем запуске этого скрипта кроном
Dmitriy
@b101010 Советую посмотреть, просто ради понимания какие есть возможности:
1) https://onesignal.com/
2) https://viapush.com/
Dmitriy
@ikasymov еще как
ikasymov
епт мать
Dmitriy
У тебя будут запускатья каждый раз новый процесс