网站的 OSX 推送通知 - 从未调用过 Safari requestPermission 回调

Posted

技术标签:

【中文标题】网站的 OSX 推送通知 - 从未调用过 Safari requestPermission 回调【英文标题】:OSX Push Notifications for Websites - Safari requestPermission callback never called 【发布时间】:2014-07-06 14:26:33 【问题描述】:

按照Apple Documentation 的说明,允许 Safari 用户访问网站并获取 Apple 推送通知服务的推送通知。

我正在使用 SSL,拥有 Apple 的证书,并且已经生成了推送包文件。

Safari 在运行提示 requestPermission 时下载此内容,显示用户权限请求提示,但在用户单击“批准”时,从不调用回调函数。

window.safari.pushNotification.requestPermission(url, websitePushID, userInfo, callback);
    永远不会调用回调函数。 不抛出异常。 对于任何成功或错误,都不会向服务器发送 POST。 该网站现在列在“系统偏好设置”>“通知”下。 该网站列在 Safari 偏好设置中的通知下。 请求权限或查询权限的进一步尝试立即被拒绝。

重置被拒绝权限的唯一方法是编辑 OSX 的内部 sqllite 文件并删除 Safari 中的一堆配置文件,然后我才能重试请求。

什么可能导致这种异常行为?

【问题讨论】:

【参考方案1】:

如果没有您使用的确切 javascript,很难判断,但您在苹果文档中看到的 3 种权限类型是默认、授予和拒绝。

如果授予或拒绝权限,则用户已设置是否要接收这些推送通知。一旦用户拒绝推送通知,Apple 就决定不能再次询问他们(不更改设置)。如果他们已经被授予权限,则无需调用 window.safari.pushNotification.requestPermission

您调用 window.safari.pushNotification.requestPermission 的唯一时间是权限既没有被拒绝也没有被授予。只有在这种情况下,您才需要调用该函数并期望响应触发回调函数。如果您看到权限请求提示,则表示 requestionPermission 已生效。

【讨论】:

在调用 requestPermission 之前,权限处于“默认”状态,但仍然没有进行回调。正在运行的代码实际上与示例中的代码一样,只是回调将其参数写入控制台。我有一个与 Apple 合作的错误报告。 @simbolo 你有没有下定决心?我们看到了同样的事情。 @Casey 不!我打开了许多开发人员技术支持案例,却被告知 Safari 不是受支持的产品。所以有一个开放的错误报告 (#17565372) 在这些月之后仍然开放。最后我放弃了实施,因为无法弄清楚为什么它不起作用。我也无法订阅任何其他网站,这让我感到安慰,所以不仅仅是我。我得出的结论是,小牛队的 Safari 出现了问题,直到今天仍然存在问题。

以上是关于网站的 OSX 推送通知 - 从未调用过 Safari requestPermission 回调的主要内容,如果未能解决你的问题,请参考以下文章

iOS 推送通知 - didReceiveRemoteNotification:fetchCompletionHandler: 从未在前台调用

推送通知接收器 android(清单?)

从网站推送通知到移动应用程序

分组推送通知再次调用 MainActivity 的 OnCreate()。如何处理?

推送通知已交付,但 didReceiveRemoteNotification 从未被称为 Swift

如何在固定时间发送推送通知?