尝试向Chrome和Opera发送推送通知时,WebPushError和UnauthorizedRegistration,FF就可以了

时间:2017-01-26 09:56:16

标签: firebase web-push

我成功运行了一个发送网络推送通知的工作示例 - 订阅用户推送通知,获取端点,从订阅对象生成两个is_isogram('abolishment') # ('abolishment', True) is_isogram('happy') # ('happy', False) is_isogram('') # ('', False) is_isogram(1) # TypeError: Argument should be a string 密钥 - browser和{{1 }}。在服务器端,我生成p256dh个密钥。 所以,有了这些,我在auth nodejs包上调用VAPID,并且还 - 我传递了一个有效负载。

在Firefox上 - 我收到有效负载的通知。

在Chrome和Opera上,我得到sendNotification,还有web-pushWebPushError: Received unexpected response code

用于发送内容的服务器端代码是:

UnauthorizedRegistration

我还在Error 400文件中将MY_GCM_SENDER_ID设为// import our web-push package .. var webPush = require('web-push'); webPush.setGCMAPIKey('MY_GCM_SENDER_ID'); // we generated the VAPID keys .. var vapidKeys = { "publicKey": "...", "privateKey": "..." }; // set our VAPID credentials .. webPush.setVapidDetails( 'mailto:{my email}', vapidKeys.publicKey, vapidKeys.privateKey ); var device_endpoint = "https://android.googleapis.com/gcm/send/..."; var device_key = "..."; var device_auth = "..."; /* * Sending the notification .. */ webPush.sendNotification( { endpoint: device_endpoint, keys: { p256dh: device_key, auth: device_auth } }, 'My payload', { TTL: 86400, // 24 hours .. } ) .then(function() { console.log('SUCCESS'); }) .catch(function(err) { console.log('Unsuccessful'); console.log(err); }); ;我从gcm_sender_id获取了它 - 创建了一个项目并从manifest.json获得了https://console.firebase.google.com/。我在这里阅读的说明如下: https://firebase.google.com/docs/cloud-messaging/js/client

那么......我做错了什么?

2 个答案:

答案 0 :(得分:2)

我设法解决了......现在我正在成功发送PUSH有效负载:)

问题在于,当我注册PUSH时 - 我这样做:

reg.pushManager.subscribe({
    userVisibleOnly: true
})

当我这样做的时候:

reg.pushManager.subscribe({
    userVisibleOnly: true,
    applicationServerKey: new urlBase64ToUint8Array([VAPID public key)
})
然后它工作得很好。现在我可以发送正常的PUSH或PUSH和有效载荷,没有任何问题。

更多信息:

  1. https://rossta.net/blog/using-the-web-push-api-with-vapid.html
  2. https://web-push-book.gauntface.com/chapter-02/01-subscribing-a-user/
  3. 关于所有教程,告诉你只使用userVisibleOnly属性......这不起作用。我不知道为什么他们会推荐这个。

答案 1 :(得分:0)

  • 您将遇到此错误的一种情况如下所述:

    One will produce the wrong process

    Google教程还提到了以下内容:

    open DevTools (Right Click > Inspect) and go to the Application panel, click the Service Workers tab and check the Update on Reload checkbox. When this checkbox is enabled the service worker is forcibly updated every time the page reloads.

  • 如果您想在网站中推送带有效负载的通知:

    在您applicationServerKey

  • 时加入subscribe
  • 如果您在applicationServerKey

    时加入subscribe
    1. openssl生成的密钥对我不起作用。
    2. vapid生成的密钥对我不起作用。
    3. Google教程中提到的网站生成的密钥可用。
  • 可行键生成器: Workable keys generator

  • 可行的Google教程: Workable google tutorial

<强>结论

  1. 我添加applicationServerKey并导致错误
  2. 我使用Workable keys generator但仍有错误
  3. 我按照Google tutorial更新服务工作者以防止出现错误
  4. 工作原理