我正在尝试在 KaiOS 应用程序中实现推送通知。我只需点击以下链接即可。
遵循所有链接后,推送可以在浏览器中运行,但不能在 KaiOS 应用程序中运行。如果有人有任何示例代码或文档,请分享。
任何帮助将不胜感激。
1)首先添加这个权限manifest.webapp
"permissions": {
"serviceWorker":{
"description": "required for handle push."
},
"push":{
"description": "New update push."
},
"desktop-notification": {
"description": "New content update notification for the user."
}
}
Run Code Online (Sandbox Code Playgroud)
2)Service Worker文件sw.js代码
self.addEventListener('push', function(event) {
event.waitUntil(
self.registration.showNotification('My Push', {
body: 'Push Activated',
})
);
});
self.addEventListener('activate', e => {
self.clients.claim();
});
Run Code Online (Sandbox Code Playgroud)
3) 在应用程序启动时添加 Service Worker
registerSW : function() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./sw.js').then(function(reg) {
console.log('Service Worker Registered!', reg);
reg.pushManager.getSubscription().then(function(sub) {
if (sub === null) {
} else {
console.log('Subscription object: ', sub);
}
});
}).catch(function(e) {
console.log('SW reg failed');
});
}
}
Run Code Online (Sandbox Code Playgroud)
4) 通过任何 dom 元素(如按钮)调用 service worker
registerServiceWorker: function() {
Notification.requestPermission().then(function(permission) {
if (permission === 'granted') {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready.then(function(reg) {
reg.pushManager.subscribe({
userVisibleOnly: true
}).then(function(sub) {
console.log('Endpoint URL: ', sub.endpoint);
}).catch(function(e) {
if (Notification.permission === 'denied') {
console.warn('Permission for notifications was denied');
} else {
console.error('Unable to subscribe to push', e);
}
});
})
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
就是这样。