我正在使用服务工作者概念(API)发送网络推送通知,这是我遵循并从中获取代码示例的书。下面的代码可以完美地从客户端获取订阅,并且我能够在 Chrome Android 设备上成功发送通知
navigator.serviceWorker.register('sw.js').then(function (registration){
return registration.pushManager.getSubscription().then(function (subscription){
})
}).catch()
...
确切的代码似乎不适用于 iPhone chrome 网络浏览器。我尝试添加一些
console.log
来查看发生了什么,看起来我们从上面的代码中获得的 registration
对象没有设置 pushManager
属性,因此下面是我在 iPhone 中看到的问题Chrome 控制台日志。
TypeError: undefined is not an object (evaluating 'registration.pushManager.getsubscription')
这是添加这些控制台日志的代码
navigator.serviceWorker.register('sw.js').then(function (registration){
if (registration){
console.log("registration is found " , registration)
} else {
console.log("registration is not found")
}
if (registration.pushManager){
console.log("pushmanager was found on registration and calling getSubscription() ", registration.pushManager.getSubscription())
} else{
console.log("pushmanager was not found on registration")
}
...
...
iPhone chrome 浏览器上这段代码的输出附在此处。
我想知道是否应该使用 Notification API 来代替,但无法弄清楚是否可以使用通知 API 获取订阅详细信息。
我想看看是否有人已经遇到这个问题并能够解决它。
我能弄清楚的另一件事是
'PushManager' in window
在通知不起作用的环境中返回
false
(iOS chrome)。