代码之家  ›  专栏  ›  技术社区  ›  Mike.R

使用firebase-messaging-sw.js在backgroundmessagehandler reactpp中同步数据

  •  0
  • Mike.R  · 技术社区  · 5 年前

    我认为这个问题已经被问到了,一些建议已经完成了:
    Store data in Background Message
    Unable to store web notifications received in service worker in indexDB

    不幸的是,我仍然找不到一个具体的例子来说明如何去做(或者如果确实有可能的话)。
    afaik本地存储或cookies在 firebase-messaging-sw.js 唯一可用的方法是 indexDB .

    目标:可以选择处理接收到的数据 messaging.setBackgroundMessageHandler 并将其存储在本地存储器中。

    方法:将数据存储在 索引数据库 当Web应用程序在后台时,当Web应用程序变为可见时,将数据替换为本地存储。

    我们的应用程序基于 React , Redux .
    我对网络开发的了解非常有限,请随时纠正我的错误。

    Firebaase Documentation
    提前谢谢

    1 回复  |  直到 5 年前
        1
  •  0
  •   Mike.R    5 年前

    要在中使用indexdb的代码示例 firebase-messaging-sw.js

    messaging.setBackgroundMessageHandler(payload => {
            try {
                function logerr(err) {
                    console.log('Database erroor: ',err);
                }
                function connectDB(f) {
                    const request = exports.indexedDB.open('lone', 1);
                    request.onerror = logerr;
                    request.onsuccess = function() {
                        f(request.result);
                    };
                    request.onupgradeneeded = function(e) {
                        e.currentTarget.result.createObjectStore('Table1', { keyPath: 'ssn' });
                        connectDB(f);
                    };
                }
                    connectDB(db => {
                        const transition = db.transaction(['Table1'], 'readwrite');
                        const objectStore = transition.objectStore('data');
                        const customerData = {
                            ssn: '444-44-4444',                                                
                            payload: payload.data.payload,
                        };
                        const objectStoreRequest = objectStore.add(customerData);
    
                        objectStoreRequest.onerror = logerr;
                        objectStoreRequest.onsuccess = function() {
                            return objectStoreRequest.result;
                        };
                    });
    
                    const notificationTitle = 'Title';
                    const notificationOptions = {
                        body: message,
                        icon: 'favicon.png',
                    };
    
                    return self.registration.showNotification(notificationTitle, notificationOptions);
    
            } catch (e) {
                console.log('error', e);
            }
        });
    })(this);