无法在 macOS Safari 上使用 PushAPI,返回的端点为空字符串

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

我的代码在本地和 Chrome 生产环境中运行良好。

这是我在用户想要启用通知时在浏览器中运行的

Subscribe()
函数(我没有使用 Apple 的 APN 服务,而是标准 PushAPI)。

export function Subscribe(vapid: string): Promise<PushSubscription> {
    return new Promise((resolve, reject) => {
        if (!vapid) {
            reject("VAPID not declared")
        }

        navigator.serviceWorker.getRegistration()
        .then((registration) => {  
            if (!registration) {
                return
            }
            registration.pushManager.subscribe({
                userVisibleOnly: true,
                applicationServerKey: urlBase64ToUint8Array(vapid),
            }).then((subscription) => {
                console.log(subscription)
                if (!subscription) {
                    reject(new Error("Unable to subscribe (empty subscription)"))
                }
                if (subscription.endpoint === "") {
                    reject(new Error("Unable to subscribe (empty endpoint)"))
                }
                resolve(subscription)
            })
        })
        .catch((err) => {
            reject(err)
        });
    })
}

浏览器请求用户的许可,没有问题,然后当尝试订阅时,我得到的有效负载是这样的:

PushSubscription {endpoint: "", expirationTime: null, options: PushSubscriptionOptions, getKey: function, unsubscribe: function, …}

字符串化:

{
  "keys":{
    "p256dh":"",
    "auth":""
  }
}

如您所见,没有错误,但端点和键都是空的。

  • 当我要求某人测试时,它可以在另一台机器上运行
  • 我可以毫无问题地使用这个测试页面:https://www.bennish.net/web-notifications.html(但我不能,直到我删除
    ~/Library/Safari/RemoteNotifications/Permissions.plist
    ),但我认为它使用了不同的API并且这些不是服务器端推送的通知。
  • 我无法使用以下网站https://cleverpush.com/en/test-notifications/,发送通知时收到“未定义”警报。在调试器中,我看到与发送到服务器的有效负载有相似之处:
{
  "endpoint":"",
  "publicKey":"",
  "authSecret":""
}

我的系统看起来像是一个奇怪的问题,但无法找出问题所在。

我要补充一点,这台机器是在企业管理下的,但他们说他们没有阻止推送通知的策略。

javascript safari push-api
1个回答
0
投票

感谢@collimarco,这确实是一个 Safari 错误。 升级到 Safari beta(当时无法升级到 Sequoia)解决了这个问题。

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