为啥chrome浏览器经常更换端点
Posted
技术标签:
【中文标题】为啥chrome浏览器经常更换端点【英文标题】:Why chrome browser is changing endpoint frequently为什么chrome浏览器经常更换端点 【发布时间】:2016-08-12 08:39:45 【问题描述】:我正在为我的网站开发 chrome 推送通知,并在 localhost(本地机器)环境中进行开发。当我第一次订阅通知时,使用特定端点发送推送通知是成功的。我对所有推送消息使用相同的端点。
这里有时推送通知由于端点不匹配而失败。当我在 chrome 控制台(调试模式)中看到时,有不同的端点。 为什么chrome浏览器正在改变端点?在这种情况下,我们如何处理这种情况并更新数据库中的新端点?
示例端点: https://android.googleapis.com/gcm/send/AWERdvfdfdsfdobRH4zlXGuyeuie3543uTBuP6air5dzZfltNa-FKF6K6S-9P5SdfbCbyvn9RdsfsdvU1XwSBwIrekjdK6_i4Cg-5rZAj8UvL1s-Bbr61yvvt_y2Hg9RdsyV
当我下次检查时,上面的端点已更改如下https://android.googleapis.com/gcm/send/reytryMkQwtY:YTUNMdsjjfhsdf349851VS6McDE7s_GITe_djsgfdkjghcdfdfgdftrkddfdsXiwX1vP_XclmDqrKPOAMJDfsYYXdhMX164694Q&ksdhfksdfhkjfhksdcndsk
谢谢。
【问题讨论】:
您如何检索端点?如果您有有效的订阅,getSubscription()
应该返回相同的端点。 (subscribe()
可以返回不同的端点。)
你好 mjs,我正在使用 getsubscription() 但它并不总是在变化。在这里我要澄清一下,最终用户已经允许通知并获得端点并存储到数据库中。再次如果你使用 subscribe() 来获取端点,我们是否会得到不同的端点?
我认为端点不应从一个 getSubscription()
更改为另一个。 (前提是客户端没有取消订阅。)如果您可以重现此内容,我会将其记录为 Chrome 中的错误。 (特别是如果 FF 的行为方式不同。)
为已订阅(已授予权限)的用户再次调用 .pushManager.subscribe 将返回不同的端点?
它不会改变,但是在谷歌浏览器移动端清理历史记录和 cookie 会改变它
【参考方案1】:
推送通知端点依赖于 service-worker。当 service-worker 被注销并再次创建时,PushManager.getSubscription()
方法确实会返回null
。然后您需要再次调用subscribe()
,这将返回一个新端点。
如果您的服务器在 service-worker 取消注册后尝试向第一个端点发送推送通知,您将收到 NotRegistered
(对于 Chrome)或 Gone
(对于 Firefox)错误。因此,请确保在应用加载后立即注册新端点,否则设备可能无法访问。
请注意,这似乎不会影响 service-worker 更新。
【讨论】:
以上是关于为啥chrome浏览器经常更换端点的主要内容,如果未能解决你的问题,请参考以下文章
为啥谷歌Chrome浏览器打开一些网页是(1X1)图片、空白的?
chrome浏览器更换favicon.ico后不更新缓存解决方案
烧瓶 api 端点使用邮递员返回正确的响应,但不使用浏览器(chrome)