标签: push-api

PushManager订阅承诺永远不会履行或拒绝

我目前面临一些Chrome(Chromium)版本的问题,其中PushManager.subscribe来自ServiceWorker 的承诺保持在待处理状态.

代码本身很简单:

return serviceWorkerRegistration.pushManager.subscribe({
    userVisibleOnly: true
  });
Run Code Online (Sandbox Code Playgroud)

我有一个有效且可访问的JSON 清单,提供GCM发件人ID.我也尝试过不同的实现方式,如在这个岗位,但结果还是一样.

订阅部分适用于每47个以上的版本,旧版本中会出现此问题.(我正在使用Chromium连续版本来测试不同的主要版本).

另请注意,在Ubuntu上使用Chromium 46(及以下版本)时,承诺会在15分钟后拒绝使用Internal Server Error.

javascript chrome-gcm service-worker web-push push-api

8
推荐指数
1
解决办法
1794
查看次数

`pushManager.subscribe`和`pushManager.getSubscription` Service Worker之间有什么区别?

PushManager.getSubscription()

检索现有推送订阅.它返回一个Promise,它解析为包含现有订阅详细信息的PushSubscription对象.如果不存在现有订阅,则解析为空值.

[...]

PushManager.subscribe()

订阅推送服务.它返回一个Promise,它解析为一个PushSubscription对象,其中包含推送订阅的详细信息.如果当前服务工作者没有现有订阅,则会创建新的推送订阅.

根据MDN的pushManager文档.除了getSubcription()可能使用空值解析的点之外,方法几乎相同.

我基本上明白我可以简单地使用subscribe(),Service Worker将尝试获取订阅以备不时使用,并且如果不可用则创建新订阅.

=>但我正在尝试做别的事情.我想先尝试订阅,如果解决了,null我会尝试订阅它.

    navigator.serviceWorker.register('./worker.js')
    .then(function(reg) {

        // Subscribe push manager
        reg.pushManager.getSubscription()
        .then(function(subscription) {

            if(subscription){
                // TODO... get the enpoint here
            } else {
                reg.pushManager.subscribe()
                .then(function(sub){
                    // TODO... get the endpoint here
                });
            }

        }, function(error) {
            console.error(error);
        })
    });
Run Code Online (Sandbox Code Playgroud)

但后来我最终得到了错误:

未捕获(在承诺中)DOMException:订阅失败 - 没有活动的服务工作者

这很令人困惑,我怀疑这是Chrome服务工作者的推送API的限制,或者可能是一个错误.有没有人有关于这种奇怪行为的任何信息?

google-chrome service-worker push-api progressive-web-apps

7
推荐指数
1
解决办法
1723
查看次数

如何进行Web Push的功能检测?

是否有任何简单的方法可以在浏览器(桌面和移动设备)中检测Web Push API

javascript service-worker web-push push-api

7
推荐指数
1
解决办法
1162
查看次数

如何在本机和渐进式Web应用程序之间重复删除通知?

如果我同时拥有本机应用程序和使用由服务工作者提供支持的Web推送通知的渐进式Web应用程序,是否有办法阻止用户在选择接收来自网站的通知并且还安装了应用程序时接收重复通知?

service-worker web-push push-api progressive-web-apps

6
推荐指数
1
解决办法
552
查看次数

服务工作者不提示注册 - net :: ERR_FILE_EXISTS

我浏览了其他主题 - 没有具体的答案.

我为通知实施了一个服务工作者

http://docs.pushwoosh.com/docs/chrome-web-push
Run Code Online (Sandbox Code Playgroud)

我检查了所有内容 - 所有脚本都在root中,密钥很好实现.但是,我没有被提示允许通知.

控制台输出读取:

GET https://mydomain/service-worker.js net::ERR_FILE_EXISTS
Run Code Online (Sandbox Code Playgroud)

注意:我有正确的URL(只是在这里更改).

是什么导致服务工作者错误?我该如何解决?

google-chrome push-notification service-worker web-push push-api

6
推荐指数
1
解决办法
1019
查看次数

是否可以在没有GCM的Chrome中使用新的推送通知支持?

在与服务工作者一起使用新的Push API时,我可以使用Google的GCM以外的推送服务吗?

service-worker web-push push-api progressive-web-apps

5
推荐指数
1
解决办法
1282
查看次数

Firefox Push API - AbortError:检索推送订阅时出错

我使用的是 46.0a1 版本的 Firefox Nightly(OS X 只有 42v,而 Push API 需要 43v)。

我收到此错误:

DOMException [AbortError: "Error retrieving push subscription"
code: 20
nsresult: 0x80530014]
Run Code Online (Sandbox Code Playgroud)

这是抛出此错误的片段:

navigator.serviceWorker.ready.then(function (serviceWorkerRegistration) {

    serviceWorkerRegistration.pushManager.subscribe()
        .then(function (subscription) {
            endpoint = subscription.endpoint;
            console.log('subscription endpoint: ', subscription.endpoint);
            subscribeOnServer();
        })
        .catch(function (e) {

            // here that error is raised

            errorNotification.innerHTML = 'Unable to subscribe to push';
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

在 Chrome 中,这个地方不会抛出任何东西,我通过正确的端点获得订阅。

web-push firefox-nightly push-api

5
推荐指数
1
解决办法
2053
查看次数

刷新在服务工作者中使用importScripts导入的脚本

我有一个网站,有一个服务工作者喜欢:

// Import a script from another domain
importScripts('https://example.com/script.js')
Run Code Online (Sandbox Code Playgroud)

假设script.js使用一些新代码进行更新,并且由于推送事件而激活了服务工作者(用户同时没有再访问过我的网站).

importScripts每次激活服务工作者时是否检查更新,或者script.js在首次安装服务工作者时仅下载一次更新?

有没有办法让服务工作者每次收到推送消息时刷新服务工作者代码(特别是导入的脚本)?

javascript service-worker push-api

5
推荐指数
1
解决办法
3793
查看次数

离线状态下是否可以在指定时间通知ServiceWorker?

比如说,我想在 Android 上制作一个闹钟应用程序作为渐进式网络应用程序。

就像本机警报应用程序一样,即使没有活动网页,它也应该在选定的时间收到通知。

一开始我考虑使用push api。当然,离线状态下推送消息是无法到达的。而且推送消息到达时间对于闹钟来说也不够准确。

即使没有网络也能及时收到通知吗?

javascript service-worker push-api progressive-web-apps

5
推荐指数
1
解决办法
1428
查看次数

如何处理订阅用户退出?

在我正在构建的应用程序中,登录用户可以接收与其用户帐户正在参与或订阅的活动相关的特定推送通知。

就目前而言,如果用户注销,他们仍保持订阅状态,并且 Service Worker 仍保持注册状态。

但是,这意味着他们仍然会收到他们订阅的推送通知。

然而,从好的方面来说,这意味着如果原始用户再次登录,他们将不需要转到自己的首选项并重新启用通知并重新注册新的服务工作线程/订阅。

有没有人有任何示例说明如何以安全的方式处理此问题,以便在注销后不会泄露通知,但在他们重新登录时仍保留现有的订阅?有可能吗?

谢谢,

push-notification web-push push-api

5
推荐指数
1
解决办法
638
查看次数