更改Service Worker订阅端点

3

我正在尝试了解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...."。

现在我的问题是:是否实际上(即使这是个坏主意),可以拥有自定义的推送服务终端点,一个自托管的解决方案?

谷歌 Firebase 是否真的垄断了这一领域?

2个回答

4
正如提供的链接所述,每个浏览器都可以使用任何推送服务,这是开发人员无法控制的
我需要在一个使用本地网络且没有互联网访问权限的组织中使用推送通知,但事实证明服务工作者推送通知目前不适用于内部网络,也许在不久的将来会有一些解决方案。有一种名为SignalR技术的替代方法,但正如你所知道的那样,当浏览器标签关闭时它不起作用,因此与WbPush相反,SignalR不能唤醒已关闭的Web浏览器。
也许唯一的希望是dom.push.serverURL,你可以在这里阅读更多相关信息。 我还了解到Firefox使用Autopush作为推送服务。 以下是一些链接,它们表明你不能: 没有第三方的WebPush - 更改推送提供者

非常感谢您的回答,我从未想过离线/内网应用程序的问题!如果不需要浏览器在后台调用serviceworker的优势,即如果页面仅限桌面且已经打开,则可以使用例如node实现自己的解决方案。 - CodingKiwi

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接