更改服务工作者订阅端点
Posted
技术标签:
【中文标题】更改服务工作者订阅端点【英文标题】:Change service worker subscribe endpoint 【发布时间】:2018-06-27 09:11:07 【问题描述】:所以我尝试进入 Push API,并设置了一个非常基本的示例,其中包含一个空的 service-worker.js 和一个 index.js,它现在只是触发订阅:
function subscribeUserToPush()
return navigator.serviceWorker.register('service worker.js').then(function(registration)
var subscribeOptions =
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(
'foobarkeyoffoobarness'
)
;
return registration.pushManager.subscribe(subscribeOptions);
).then(function(pushSubscription)
console.log('PushSubscription: ', pushSubscription);
return pushSubscription;
);
我收到的订阅端点发回类似于“fcm.googleapis.com/fcm/send/dfyodk6jd3c:APA91bETwSnoOpagCulOlD11XJu7savlJXp4hwEqKeqldHJxW6_WQTfjNTKjsT9JpY1auK....”
现在我的问题是:是否真的有可能(即使这是一个坏主意)有一个自定义的推送服务端点,一个自托管的解决方案?
Google firebase 真的垄断了这方面吗?
【问题讨论】:
【参考方案1】:正如offered link 所述,每个浏览器都可以使用他们想要的任何推送服务,这是开发人员无法控制的
我需要在使用本地网络且无法访问 Internet 的组织中使用推送通知,但事实证明至少现在 Service Worker 推送通知不适合 Intranet,也许在不久的将来会有一些解决方案,有一种名为 SignalR 的替代技术,但您可能知道它在关闭浏览器选项卡时不起作用,因此与 WbPush 相反,SignalR 无法唤醒关闭的网络浏览器。
也许唯一的希望是 dom.push.serverURL,您可以在 here 阅读更多相关信息。 我还了解到 Firefox 使用 Autopush 作为推送服务。 这里有一些链接说你不能: WebPush without third party - Change Push provider
【讨论】:
非常感谢您的回答,没想到离线/内网应用的问题!如果不需要浏览器在后台调用 serviceworker 的优势,也就是如果页面只是桌面并且无论如何都是打开的,那么可以使用节点实现自己的解决方案,例如【参考方案2】:如果有人感兴趣:https://developers.google.com/web/fundamentals/push-notifications/how-push-works
在订阅流程中,浏览器请求订阅 消息服务器。每个浏览器供应商都有自己的消息传递 服务器,但您的浏览器知道要调用哪个服务器。
【讨论】:
以上是关于更改服务工作者订阅端点的主要内容,如果未能解决你的问题,请参考以下文章
Google PubSub:使用 AppEngine 推送端点订阅时出现 SSL 错误
graphql 订阅无法连接到弹性 beantalk 的 websocket 端点