Javascript 未调用服务辅助进程的推送事件
我正在尝试从GCM接收推送消息。我只是按照教程进行操作,并按如下方式注册了服务人员:-Javascript 未调用服务辅助进程的推送事件,javascript,push-notification,google-cloud-messaging,service-worker,progressive-web-apps,Javascript,Push Notification,Google Cloud Messaging,Service Worker,Progressive Web Apps,我正在尝试从GCM接收推送消息。我只是按照教程进行操作,并按如下方式注册了服务人员:- function urlB64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding) .replace(/\-/g, '+') .rep
function urlB64ToUint8Array(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 (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
var subscribeForPush = function() {
navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) {
serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey : urlB64ToUint8Array('<API-KEY>')
})
.then(function(subscription) {
console.log("Subscription for Push successful: ", subscription);
})
.catch(function(error) {
console.log("Subscription for Push failed", error);
});
});
};
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
subscribeForPush();
}).catch(function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
我能够使用终端向gcm发送消息并获取消息:-
{"multicast_id":4983340130324592129,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1483043226210433%cc9b4facf9fd7ecd"}]}
但我不知道为什么在push listener中看不到日志?我被这个问题困扰了两天多。有人能帮我吗?我正在本地主机上执行此操作。您没有返回pushManager订阅
navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) {
return serviceWorkerRegistration.pushManager.subscribe({
'userVisibleOnly': true
}).then(function(subscription) {
if (!subscription) {
// Set appropriate app states.
return;
}
console.log(subscription.endpoint);
}).catch(function (err) {
console.log('error in subcription .. '+ err);
});
})
检查我的github项目
如果您需要任何详细信息,请告诉我,我想通过声明
applicationServerKey: convertedVapidKey
在pushManager中订阅。我在互联网上找到的大多数教程都使用了bvakiti的方法,大多数遵循该教程的开发人员在接收推送通知时都遇到了问题。如果有帮助,您可以检查并尝试给出的解决方法。有时候,推送需要时间才能到达,所以请检查您发送的推送内容。
applicationServerKey: convertedVapidKey