firebase / firebase-js-sdk

Firebase Javascript SDK
https://firebase.google.com/docs/web/setup
Other
4.81k stars 884 forks source link

Event handler must be added on the initial evaluation of worker script #7937

Open stefan-krajnik opened 8 months ago

stefan-krajnik commented 8 months ago

Operating System

macOS Ventura 13.0

Browser Version

Google Chrome Version 120.0.6099.199 (Official Build) (arm64)

Firebase SDK Version

9.22.0

Firebase SDK Product:

Messaging

Describe your project's tooling

React app with Webpack

Describe the problem

I've been seeing these errors in sentry for a while, they come from service worker file even if I register service worker only if isSupported() passes.

This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc) (messaging/indexed-db-unsupported).

So I decided to do the same check in service worker but I'm getting these warnings if I call getMessaging asynchronously after isSupported() is resolved (see the screenshot)

Event handler of 'push' event must be added on the initial evaluation of worker script
Event handler of 'pushsubscriptionchange' event must be added on the initial evaluation of worker script.
Event handler of 'notificationclick' event must be added on the initial evaluation of worker script.
295329942-1cdebf24-4e3c-4e85-8c94-19072d46f3ba

Can you please confirm my approach with calling getMessaging asynchronously only if isSupported is correct ? If not what is the correct way using isSupported in service worker to prevent getting the error mentioned at the beginning ?

Steps and code to reproduce issue

Santas commented 7 months ago

+1

patrikholcak commented 7 months ago

Any news on this? I couldn’t find any official documentation on the usage. Some of the code I found on github uses it the same way OP does, but then it prints the warnings

stefan-krajnik commented 6 months ago

The issue is still present in v10.8.0

Santas commented 3 months ago

@jbalidiong what is the best way to get help regarding this issue?

jdeepwell commented 2 months ago

I ran into this error message too. If I understand correctly, the initialisation of Firebase Push MUST happen in the global scope of the service worker during its initial evaluation – meaning: You cannot call initializeApp/getMessaging asynchronously. They MUST be called immediately when the global scope of the service worker script is first run.