我的PWA在MacOS(以及Chrome和Firefox)上的Safari上有web推送功能,但在iOS 16.4上的Safari上,ServiceWorkerRegistration对象不包含PushManager:
ServiceWorkerRegistration: {
listeners: {updatefound: Array}
active: ServiceWorker {scriptURL: "http://localhost:9200/sw.js", state: "activated", onstatechange: null, onerror: null, postMessage: function, …}
installing: null
navigationPreload: NavigationPreloadManager {enable: function, disable: function, setHeaderValue: function, getState: function}
onupdatefound: function()
scope: "http://localhost:9200/"
updateViaCache: "imports"
waiting: null
}
我知道16.4现在应该支持web-push标准,所以我错过了什么?
我已经检查过了,这不仅仅是xcode iPhone模拟器的问题,我在实际的iPhone上也遇到了同样的问题。我不知道还能做什么,因为这似乎是一个浏览器问题。
1条答案
按热度按时间q1qsirdb1#
我想明白了我在iOS上的Safari浏览器中运行PWA,苹果故意不支持(这与Chrome和Firefox不同)。the official documentation支持的是“iOS 16.4或更高版本中的主屏幕Web应用程序”,也就是说,将PWA下载到iPhone主屏幕并从那里打开它。一旦我运行了独立的PWA,ServiceWorkerRegistration就包含了PushManager。
顺便说一下,web推送通知在xcode模拟器中仍然不起作用,因为它们目前不受支持。当我尝试时,应用程序会请求权限,然后就卡在那里了。然而,一旦我在实际的iPhone上测试了相同的应用程序(并将PWA下载到主屏幕上),推送通知就完全正常了!