Как получить push-подписку с конечной точкой, ключами авторизации и т. Д.? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть приложение, которое должно показывать уведомление. Поэтому я попытался зарегистрировать работника службы, и после этого я попытался получить конечную точку, аутентификацию и другой ключ для отправки на сторону сервера (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'. Эта папка находится в «публичной» папке, которая находится в корневой папке

...