Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

странный баг #3

Open
nicdnepr opened this issue Sep 24, 2017 · 9 comments
Open

странный баг #3

nicdnepr opened this issue Sep 24, 2017 · 9 comments
Assignees
Labels

Comments

@nicdnepr
Copy link

делал по материалам статьи https://habrahabr.ru/post/321924/
в итоге получил 2 файла https://gist.github.com/nicdnepr/91f6d4be7c4c2d75e62ec96fa680ac91
скрипт firebase_subscribe.js подключаю на странице subscribe.php, причем метод subscribe() вызываю сразу после загрузки страницы
нотификации шлю с ссылкой такого типа site.ru/page/?param1=val1&param2=val2&param3=val3
проблема такая- если активна вкладка subscribe.php, там где подключаются нотификации, то при клике на нотификацию ничего не происходит,вкладка не открывается,нотификация не пропадает
если активна любая другая вкладка сайта то работает нормально
подозреваю изза явного вызова subscribe()
это баг? пока вижу решение подписывать по клику на кнопку

@peter-gribanov
Copy link
Owner

Читай внимательней раздел messaging.onMessage и пример.
Есть особенности с показом уведомлений на активной вкладке.

@nicdnepr
Copy link
Author

читал и этот код у меня есть https://gist.github.com/nicdnepr/91f6d4be7c4c2d75e62ec96fa680ac91#file-firebase_subscribe-js-L11
проблема в том что если активна именно вкладка где вызывается подписка тогда глючит- при клике на нотис он не исчезает и вкладка не открывается

@peter-gribanov
Copy link
Owner

Плохо читали. У вас не закрывается уведомление потому, что у вас не навешивается обработчик клика на уведомление.

И для решения этой проблемы нужно использовать ServiceWorkerRegistration.showNotification()

и

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

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

@nicdnepr
Copy link
Author

я читал хорошо, наверно плохо описываю
я уже писал что если активна любая страница сайта то клик на нотис открывает новую вкладку или активирует открытую,и сам нотис пропадает
но если активна вкладка где идет подписка на уведомления тогда вылазит баг

@peter-gribanov
Copy link
Owner

По моему я уже ответил на ваш вопрос, но давайте все же разберемся. Может я что упустил.

Вы регистрируете ServiceWorker который работает в фоне на всех страницах.
В ServiceWorker-е вы переопределяете обработчик по умолчанию.

Вы подключаете firebase_subscribe.js только на одной странице. Так?
Вы обрабатываете событие messaging.onMessage() только на той странице, на которой подключаете firebase_subscribe.js.
На всех остальных страницах обработчик messaging.onMessage() не вызывается.

Вам не кажется что тут не хватает обработчик клика?
Или может стоит взять пример из статьи и показывать уведомление через ServiceWorker?

@nicdnepr
Copy link
Author

спасибо, понял
добавил этот код https://github.com/peter-gribanov/serviceworker/blob/master/app.js#L100 до 111
только вылез новый баг- каждая открываемая вкладка регистрирует свой messaging.onMessage() и изза этого вместо одного нотиса получаю по каждому нотису на каждую открытую вкладку
проверяю так- подписался в хроме и лисе, в лисе 1 вкладка, в хроме 2 вкладки, в лисе выводит 1 нотис а в хром 2 нотиса

@peter-gribanov
Copy link
Owner

Этот баг уже из другой серии.
Один из читателей статьи мне уже сообщал о нем:

Серёжа Антисептик:
Привет, подскажи как удалось победить баг когда шлется два уведомления при двух открытых вкладках?

Конкретного решения я предложить не могу так как не занимался этим багом.

@nicdnepr
Copy link
Author

обнаружил что дублирование происходит если активна любая вкладка сайта
если нет активных тогда выводит 1 нотис
может это как то поможет?

@nicdnepr
Copy link
Author

nicdnepr commented Sep 25, 2017

помог такой код, не знаю только насколько это правильное решение

if (!document.hidden) {
        // do what you need
        payload.notification.data = payload.notification;
        registration.showNotification(payload.notification.title, payload.notification);
}

@peter-gribanov peter-gribanov self-assigned this Jun 18, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants