Запуск сервера на nodejs, поскольку я перешел на уведомления о базе данных полезной нагрузки , следуя инструкции Google (и используя пакет * node-gcm '), все работает нормально. Регистрация на моем телефоне Android (Galaxy A3 2017 на Android 8.0.0) работает, я получаю уведомления, НО это не является постоянным. Через несколько дней моя машина больше не регистрируется . Он хорошо работает на настольном 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");
};
};