iOS16.4上的Safari创建了一个没有PushManager的serviceWorker,为什么?

nvbavucw  于 2023-05-19  发布在  iOS
关注(0)|答案(1)|浏览(168)

我的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上也遇到了同样的问题。我不知道还能做什么,因为这似乎是一个浏览器问题。

q1qsirdb

q1qsirdb1#

我想明白了我在iOS上的Safari浏览器中运行PWA,苹果故意不支持(这与Chrome和Firefox不同)。the official documentation支持的是“iOS 16.4或更高版本中的主屏幕Web应用程序”,也就是说,将PWA下载到iPhone主屏幕并从那里打开它。一旦我运行了独立的PWA,ServiceWorkerRegistration就包含了PushManager。
顺便说一下,web推送通知在xcode模拟器中仍然不起作用,因为它们目前不受支持。当我尝试时,应用程序会请求权限,然后就卡在那里了。然而,一旦我在实际的iPhone上测试了相同的应用程序(并将PWA下载到主屏幕上),推送通知就完全正常了!

相关问题