如何获得带有端点和身份验证密钥等的推送订阅?

时间:2019-03-20 21:41:13

标签: javascript node.js service-worker web-push

我有一个应显示通知的应用。因此,我尝试注册服务工作者,然后尝试将端点,auth和其他密钥发送到服务器端(NodeJS)。我收到端点未正确传递到服务器的错误。

代码有什么问题,因为我无法弄清楚...

代码

//Check for service worker
if("serviceWorker" in window.navigator){
    send().catch(err => console.error(err));
}

//Register SW, Register Push, Send Push
async function send(){
    //Register service worker
    console.log("Registering Service Worker...");
    const register = await window.navigator.serviceWorker.register("js/worker.js", {
        scope: "/js/"
    });
    console.log("Service Worker Registered...");

    //Register Push
    console.log("Registering Push...");
    const subscription = register.pushManager.subscribe({
        userVisibleOnly: true,
        applicationServerKey: urlBase64ToUint8Array(publicVapidKey)
    }).then(function (pushSubscription){
        const pushSub = {
            endpoint: pushSubscription.endpoint,
            keys:{
                p256dh: pushSubscription.getKey('p256dh'),
                auth: pushSubscription.getKey('auth')
            }
        };
    });

console.log("Push Registered...");

//Send Push Notification
console.log("Sending Push...");
await window.fetch("/subscribe", {
    method: "POST",
    body: subscription,
    headers: {
        "content-type": "application/json"
    }
});
console.log("Push Sent...");

服务器端代码

app.post("/subscribe", function(req, res){
     //Get pushSubscription object
     const subscription = req.body;
     console.log(req.body);
     //Send 201 - resource created
     res.status(201);

     //Create payload
     const payload = {title:"Push Test"};

     //Pass object into sendNotification
     webpush.sendNotification(subscription, payload).catch(err => console.error(err));
});

worker.js和client.js位于“ js”文件夹中。该文件夹位于根文件夹中的“公用”文件夹中

0 个答案:

没有答案