自从苹果在 iOS 上发布 PWA 和 webpush 通知以来,我在我的应用程序中实现了它,但遇到了问题。
在应用程序中,我使用Notification.permission 来了解用户是否激活了推送通知。基本上,行为应该是: 返回“拒绝”不显示任何内容 返回“允许”不显示任何内容 返回“默认”显示消息“您要激活通知吗”
但是在iOS上,如果我同意接收通知,那么我会转到另一个页面Notification。权限恢复为默认值。
它不会对接收良好的通知产生影响,但总是会询问用户是否要激活它们。
ios上是否有转机来知道是否已授予权限并且更改页面后不会更改?
提前致谢
最新的 iOS (17.5) 似乎已经解决了这个错误。 但是,它对于 serviceworker 上下文仍然部分存在:对于 serviceworker 来说,权限仍然是“默认”,而在某些随机情况下,对于应用程序来说,权限是“授予”的,这会阻止它显示通知(但不会收到推送的通知)。 notification.permission 在 serviceworker 中返回“默认”。
showNotification 将失败并出现以下错误:
类型错误:注册无权显示通知
Webkit 源代码触发此错误:https://github.com/WebKit/webkit/blob/main/Source/WebCore/workers/service/ServiceWorkerRegistration.cpp#L297C64-L297C123
我发现的解决方法是在授予权限后安装 serviceworker。
在这种情况下,将使用“授予”权限创建 serviceworker 的上下文。 如果之前创建了 serviceworker 上下文,则在销毁(通过终止应用程序)之前它可能不会更新。
我花了几个小时研究这个错误......