Был не прав. Исправлюсь
Я тут недавно писал, что на iOS уведомления для PWA - это боль и костыли. Что Apple всё усложнила, и без бубна ничего не заработает. А потом я решил поинтересоватся у владельцев iPhone, как у них дела с уведомлениями в мессенджере MAX.
И знаете что мне ответили? «Нормально всё! Приходят».
Я такой: «В смысле? Как? Это же iOS, там же всё заблокировано».
Оказалось, что MAX не изобретал велосипед. Они просто сделали всё по уму. У них есть веб-версия web.max.ru, которую можно добавить на экран «Домой». И после этого уведомления начинают приходить как обычные пуши - с баннерами, звуком и бейджем на иконке.
Причём, если у тебя установлено нативное приложение MAX, то при нажатии на уведомление система откроет именно его. А если нет - откроется веб-версия.
Где я был не прав.
Я полез в чат к Дипу и спросил: «Как они это сделали?». И понял, что я сам себе навыдумывал проблем.
Я думал, что для уведомлений на iOS нужно что-то сверхъестественное. А оказалось, что нужно было просто правильно настроить sw.js.
В моём сервис-воркере не было обработчика push. Я настроил его только для кэширования, чтобы сайт работал офлайн. А для уведомлений нужен отдельный слушатель, который ловит пуш и вызывает self.registration.showNotification().
Именно из-за этого на iOS ничего бы не заработало. Apple не даёт использовать обычный new Notification() в режиме приложения. Только через showNotification().
Что это значит.
MAX не использовал никаких секретных хаков. Они просто взяли стандартный Web Push API и правильно его приготовили. Apple разрешила это ещё в iOS 16.4. А я, как обычно, усложнил себе жизнь на ровном месте.
Так что я обещаю исправить свой sw.js, когда дойду до разработки чата. Добавлю обработчик push, настрою showNotification(), и сделаю нормальную кнопку подписки.
И тогда уведомления будут приходить и на айфоны. Так же, как у MAX. И тогда мой проект наконец-то станет по-настоящему живым.
Лучше поздно чем никогда! И всему свое время.