iOS 上的 PWA:Notification.permission 返回我们选择的默认值

问题描述 投票:0回答:1

自从苹果在 iOS 上发布 PWA 和 webpush 通知以来,我在我的应用程序中实现了它,但遇到了问题。

在应用程序中,我使用Notification.permission 来了解用户是否激活了推送通知。基本上,行为应该是: 返回“拒绝”不显示任何内容 返回“允许”不显示任何内容 返回“默认”显示消息“您要激活通知吗”

但是在iOS上,如果我同意接收通知,那么我会转到另一个页面Notification。权限恢复为默认值。

它不会对接收良好的通知产生影响,但总是会询问用户是否要激活它们。

ios上是否有转机来知道是否已授予权限并且更改页面后不会更改?

提前致谢

ios push-notification progressive-web-apps web-push
1个回答
0
投票

最新的 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 上下文,则在销毁(通过终止应用程序)之前它可能不会更新。

我花了几个小时研究这个错误......

© www.soinside.com 2019 - 2024. All rights reserved.