更改服务工作者订阅端点

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 错误

AMAZON AWS 我如何为端点订阅 SNS 主题?

graphql 订阅无法连接到弹性 beantalk 的 websocket 端点

如何在GCP发布/订阅中推送到多个端点?

如何在 graphql-playground 中更改 websocket url(订阅)

通过 GAE 标准上的 Websockets 订阅 GraphQL 没有响应