服务工作者在Chrome Android上意外注销-服务工作者在Chrome Android上不是永久性的

服务工作者在Chrome Android上意外注销-服务工作者在Chrome Android上不是永久性的,android,google-chrome,push-notification,firebase-cloud-messaging,service-worker,Android,Google Chrome,Push Notification,Firebase Cloud Messaging,Service Worker,在nodejs上运行服务器,自从我按照google的教程(并使用“node gcm”包)跳到有效负载firebase notifications之后,一切都很好。我的Android手机(Android 8.0.0上的Galaxy A3 2017)的注册正在进行,我确实收到了通知,但这不是永久性的几天后,我的机器不再注册。它在桌面chrome上运行良好,因此我不会怀疑服务器端 下面是客户端的代码 var reg; navigator.serviceWorker.register('sw.js').

在nodejs上运行服务器,自从我按照google的教程(并使用“node gcm”包)跳到有效负载firebase notifications之后,一切都很好。我的Android手机(Android 8.0.0上的Galaxy A3 2017)的注册正在进行,我确实收到了通知,但这不是永久性的几天后,我的机器不再注册。它在桌面chrome上运行良好,因此我不会怀疑服务器端

下面是客户端的代码

var reg;
navigator.serviceWorker.register('sw.js').then(function() {
        return navigator.serviceWorker.ready;
        }).then(function(serviceWorkerRegistration) {
        reg = serviceWorkerRegistration;
        console.log('Service Worker is ready :^)', reg);
        checkSubscription();
                    }).catch(function(error) {
                    console.log('Service Worker Error :^(', error);
            });
        };
function urlBase64ToUint8Array(base64String) {
  const padding = '='.repeat((4 - base64String.length % 4) % 4);
  const base64 = (base64String + padding)
    .replace(/-/g, '+')
    .replace(/_/g, '/');

  const rawData = window.atob(base64);
  const outputArray = new Uint8Array(rawData.length);

  for (var i = 0; i < rawData.length; ++i) {
    outputArray[i] = rawData.charCodeAt(i);
  }
  return outputArray;
}

 const vapidPublicKey = '<Your Public Key from generateVAPIDKeys()>';
const convertedVapidKey = urlBase64ToUint8Array(vapidPublicKey);


function subscribe() {
    if (reg){
        reg.pushManager.getSubscription().then(function(pushSubscription) {
            if (pushSubscription==null){
                reg.pushManager.subscribe({
                    userVisibleOnly: true,
                    applicationServerKey: convertedVapidKey
                    }).then(function(pushSubscription) {
                    var sub = pushSubscription;
                    console.log('Subscribed!', sub);
                    socket.emit("notification subscription payload",sub);
                    isSubscribed = true;
                }).catch(function(error){
                    alexUI.view.log.addLog({severity:"ERROR"},clientSocketID,"Erreur de souscription");
                    alexUI.view.radioButton($("#subscription"),"Off");
                });
            }else{
                var sub = pushSubscription;
                // socket.emit("notification subscription",sub.endpoint);
                socket.emit("notification subscription payload",sub);
                isSubscribed = true;
            };
        }).catch(function(e){
            // to remove message later Alex
            alexUI.view.log.addLog({severity:"ERROR",message:e},clientSocketID,"Notifications indisponibles");
            alexUI.view.radioButton($("#subscription"),{set:"Off"});
        });
    }else{
        alexUI.view.log.addLog({severity:"ERROR"},clientSocketID,"Navigateur incompatible");
        alexUI.view.radioButton($("#subscription"),"Off");
    };
};
var-reg;
navigator.serviceWorker.register('sw.js')。然后(function(){
返回navigator.serviceworner.ready;
}).then(函数(serviceWorkerRegistration){
reg=服务工作注册;
console.log('Service Worker is ready:^'),reg);
checkSubscription();
}).catch(函数(错误){
log('服务工作者错误:^(',错误);
});
};
函数urlBase64ToUint8Array(base64String){
常量填充='='.repeat((4-base64String.length%4)%4);
常量base64=(base64String+填充)
.替换(/-/g,“+”)
.替换(/_/g,“/”);
const rawData=window.atob(base64);
const outputArray=新的Uint8Array(rawData.length);
对于(变量i=0;i
清理手机存储后,问题消失。服务人员无法在手机内存已满的情况下正确加载