发送Web推送通知时出错:没有端点?

5
我创建了一个基本的应用程序,尝试使用web-push节点库发送推送通知。然而,我总是遇到错误:"您必须至少传递一个端点"。我不理解这个错误,因为我使用ServiceWorker Api subscribe()方法进行“订阅”,并且将其创建为我的本地主机地址的端点。
实际上,我真的不知道该怎么做来尝试解决问题。以下是我的“订阅”代码:
async   subscribe() {
   const sw = await navigator.serviceWorker.ready; 
   const applicationServerPublicKey = 'BADCyHKPTCj1B9Knvmz2_EF1iLieHVZX2eEcCnMLvmMJA2ADlcDILgDC31ztGp1T1TznLpaJ14GQbdIM4APrr6k';
   const applicationServerKey = this.urlB64ToUint8Array(applicationServerPublicKey);
   console.log("le service worker est " + sw);
   sw.pushManager.subscribe({
       userVisibleOnly: true,
      applicationServerKey: applicationServerKey,
   }).then(
       subscription => {
           console.log("User is subscribed with the subscription : ");
           console.log(subscription);

在控制台中,我可以看到“subscription”对象中有一个端点, 以下是发送通知的代码:

console.log("Juste avant d'envoyer la notif on veut envoyer à  :")
console.log(this.state.endpoint)

webpush.sendNotification(
  this.state.endpoint,
  payload,
  options
);

但是在控制台上我看到的是:

在发送通知之前,我们想要发送到的是:

 {
   "endpoint":"https://updates.push.services.mozilla.com/wpush/v2/gAAAAABdR_E1S96XSL7LdqLk2i5alH49Ae9v-XeOn1nX6Su9xkY6ETv16NybutJ5pBoA7q4nqHkNxFFJvVpP15JSsIiGPL8vQHSKAkyReS1CpdhTXc13IWllOb0qnFnfD5dFhNFqA9nIlJgAOz-rB3cy9v-AFbnhNh8S_Ea68WLVjIt8WKtPZWc",
   "keys": {
     "auth": "uXYi9oYQArgv_3Z1wD_gMQ",
     "p256dh": "BDpEEP6NWHFGNKY9PWx3wMzjirY98m4S4ntN0E8A0FlVZHZXaeCbc7WO0S0pqwju2SWM0-ivDkAvaFetPrBKMAU"
   }
} 

index.js:271
错误:您必须至少传入一个带有端点的订阅。

2个回答

1
在调用webPush.sendNotification(subscription, payload);之前,执行console.log(subscription.endpoint)。我遇到了同样的问题,subscription.endpoint确实没有设置。然后确保subscription.endpoint已经设置。

1

错误:您必须至少传递一个终结点的订阅。

我遇到了同样的错误,通过对我的网页进行硬刷新(CTRL + SHIFT + R)解决了我的问题。

您也可以避免数据缓存: https://dev59.com/03VD5IYBdhLWcg3wNY1Z#2068407 这样您就不需要每次都进行硬刷新。

使用HTML:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

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