为啥 Chrome 的 PushManager 会返回旧版 API?
Posted
技术标签:
【中文标题】为啥 Chrome 的 PushManager 会返回旧版 API?【英文标题】:Why does Chrome's PushManager return a legacy API?为什么 Chrome 的 PushManager 会返回旧版 API? 【发布时间】:2020-01-29 15:12:42 【问题描述】:我这样调用pushManager.subscribe
函数:
return navigator.serviceWorker.register(process.env.PUBLIC_URL + '/sw-notifications.js').then(function(registration)
let subscribeOptions =
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicKey)
;
return registration.pushManager.subscribe(subscribeOptions);
)
.then(function(pushSubscription)
return pushSubscription;
);
这很好用,它返回一个看起来像这样的对象:
"endpoint":"https://fcm.googleapis.com/fcm/send/foo:bar","expirationTime":null,"keys":"p256dh":"key","auth":"key"
文档说要向endpoint
URL 发送一个 POST 请求以向用户发送推送通知。
很遗憾,it doesn't seem to specify 该请求使用什么样的正文。
我尝试用谷歌搜索,发现 this page 说这是旧版 API。
现在我很困惑。为什么最新 Chrome 上的 PushManager
会返回旧版 API?我应该使用其他东西吗?或者这仍然可以使用?
我正在尝试为我的网站启用推送通知,但无法弄清楚所有这些拼图是如何对齐的。
【问题讨论】:
【参考方案1】:firebaser 在这里
FCM 旧版 API 不会以任何方式被弃用,仍然可以毫无问题地使用。
如果您开始一个新项目,我们建议您查看新的(版本化的)API,因为它提供了更多的向前兼容性。但是使用旧版 API 仍然完全没问题(在某些情况下甚至是必要的)。
更新:我问了一圈,从其中一位团队成员那里得到了详细说明:
有两种使用网络推送通知的方法。
使用网络标准的工作方式,浏览器为您提供一个端点——这似乎就是您正在使用的。
使用基于标准网络推送协议构建的 FCM 网络 SDK。 FCM Web SDK 使您可以更轻松地跨 Web 和移动应用程序 (ios/android) 发送消息。请参阅setting up a javascript Firebase Cloud Messaging client app 上的文档。如果您使用 FCM Web SDK,我们建议您使用新的(版本化的)API,因为它提供了更多的前向兼容性。但是使用旧版 API 完全没问题(无论如何都不会弃用)。
如果你使用的是标准的网络推送协议,你完全可以使用浏览器返回给你的端点。这个端点对于不同的浏览器是不同的(Firefox 和 Edge 会返回不同的端点)。 Chrome 的推送提供者是 FCM,在这种情况下您不必担心返回什么端点(FCM 会正确处理它并处理您的请求)。
【讨论】:
嗨。是的,我想使用新的 API,但 Chrome 的 PushManager 正在返回旧的 API。它最终会返回新的吗?如果它给了我旧的,我不确定如何使用新的。以上是关于为啥 Chrome 的 PushManager 会返回旧版 API?的主要内容,如果未能解决你的问题,请参考以下文章
Edge 17 - PushManager.Subscribe 失败并出现 AbortError