@@ -8,37 +8,60 @@ const NotificationsHandler: FC = () => {
88 const userId = user ?. uid ;
99 const [ isRegistered , setIsRegistered ] = useState ( false ) ;
1010
11+ function initServiceWorker ( ) {
12+ navigator . serviceWorker
13+ . register ( "/firebase-messaging-sw.js" )
14+ . then ( ( registration ) => {
15+ setIsRegistered ( true ) ;
16+ return registration ;
17+ } )
18+ . catch ( ( err ) => {
19+ console . log ( "ServiceWorker registration failed: " , err ) ;
20+ } ) ;
21+ }
22+
23+ // Check if the service worker is already registered or register a new one
1124 useEffect ( ( ) => {
1225 if ( "serviceWorker" in navigator ) {
1326 navigator . serviceWorker
14- . register ( "/firebase-messaging-sw.js" )
15- . then ( ( registration ) => {
16- setIsRegistered ( true ) ;
17- return registration ;
27+ . getRegistration ( "/firebase-messaging-sw.js" )
28+ . then ( ( existingRegistration ) => {
29+ if ( existingRegistration ) {
30+ setIsRegistered ( true ) ;
31+ } else {
32+ initServiceWorker ( ) ;
33+ }
34+
35+ return ;
1836 } )
1937 . catch ( ( err ) => {
20- console . log ( "ServiceWorker registration failed : " , err ) ;
38+ console . log ( "Error checking service worker registration : " , err ) ;
2139 } ) ;
2240 }
2341 } , [ ] ) ;
2442
43+ // Handle notification permissions and foreground message listener
2544 useEffect ( ( ) => {
26- if ( ! userId && ! isRegistered ) {
45+ if ( ! userId || ! isRegistered ) {
2746 return ;
2847 }
2948
3049 let unsubscribeOnMessage ;
3150 ( async ( ) => {
3251 const hasPermissions = await NotificationService . requestPermissions ( ) ;
33- if ( hasPermissions ) {
34- await NotificationService . saveFCMToken ( ) ;
35-
36- unsubscribeOnMessage = NotificationService . onForegroundMessage ( ) ;
52+ if ( ! hasPermissions ) {
53+ console . log ( "Notification permissions denied" ) ;
54+ return ;
3755 }
56+
57+ await NotificationService . saveFCMToken ( ) ;
58+ unsubscribeOnMessage = NotificationService . onForegroundMessage ( ) ;
3859 } ) ( ) ;
3960
4061 return ( ) => {
41- unsubscribeOnMessage && unsubscribeOnMessage ( ) ;
62+ if ( unsubscribeOnMessage ) {
63+ unsubscribeOnMessage ( ) ;
64+ }
4265 } ;
4366 } , [ userId , isRegistered ] ) ;
4467
0 commit comments