Javascript-форум (https://javascript.ru/forum/)
-   Работа (https://javascript.ru/forum/job/)
-   -   Разработка Service Workers Web Push (https://javascript.ru/forum/job/84317-razrabotka-service-workers-web-push.html)

krakoss 04.08.2022 12:28

Разработка Service Workers Web Push
 
Добрый день
ищу специалиста готового реализовать отправку Web Push на любые устройства
Для сервиса, связывающего поставщика и покупателя на рынке металлолома и производственных отходов
созданного: C# MVC5, база данных MS SQL 2016. + JavaScript
Для настройки серверной части был использован материал из данной статьи:
https://blog.elmah.io/how-to-send-pu...-asp-net-core/
но после реализации есть недочеты
1. Не приходят сообщения на ПК в Google Chrome
2. Не верно настроена подписка на Web Push
3. Не приходят сообщения и нет возможности на них подписаться в iOS
Оплата по договоренности
Контакты
тел: +79227335515
емайл: krakoss@mail.ru
С уважением Юрий
:help:

Благодаря этой статье == Push-уведомления для Windows 10 в Google Chrome: нововведения
Удалось настроить WINDOWS 10 для получения пуш в браузере GOOGLE CHROME
windows 10 необходимо настроить Отдельно для того чтобы получать ПУШ на которые клиент подписался в браузере GOOGLE CHOME на своем ПК

krakoss 04.08.2022 12:32

код существующего ServiceWorker.js
var num = 1; //habr.com/ru/company/2gis/blog/350034/ ||  qna.habr.com/q/616168

self.addEventListener('install', () => self.skipWaiting())

self.addEventListener('activate', () => {
    self.clients.matchAll({ type: 'window' }).then(windowClients => {
        for (const windowClient of windowClients) {
            // Force open pages to refresh, so that they have a chance to load the
            // fresh navigation response from the local dev server.
            windowClient.navigate(windowClient.url)
        }
    })
})



self.addEventListener('push', function (event) {
    if (!event.data) return;

    var serverData = event.data.json();
    if (serverData) {
        var title = serverData.companynameandtown;
        var options = {
            tag: 'renotify',
            renotify: true,
            body: ++num > 1 ? serverData.textmessage : serverData.textmessage,
            icon: serverData.logocompany,
            data: {
                dateOfArrival: Date.now(),
                redirectUrl: serverData.redirectUrl
            }
        };
        event.waitUntil(
            // Получить список клиентов для SW
            self.clients.matchAll().then(function (clientList) {
                // Проверяем, есть ли хотя бы один сфокусированный клиент.
                var focused = clientList.some(function (client) {
                    return client.focused;
                });
                var notificationMessage;
                if (focused) {
                    notificationMessage = 'Imperio! You\'re still here, thanks!';
                } else if (clientList.length > 0) {
                    notificationMessage = 'Imperio! You haven\'t closed the page, ' +
                        'click here to focus it!';
                } else {
                    notificationMessage = 'Imperio! You have closed the page, ' +
                        'click here to re-open it!';
                }
                self.registration.showNotification(title, options);
            })
        );
    }
    else
        console.log("Нет данных для отображения.");
});

// Регистрируем обработчик события 'notificationclick'.
self.addEventListener('notificationclick', function (event) {
    event.notification.close();
    var url = event.notification.data.redirectUrl;
    event.waitUntil(
        // Получаем список клиентов SW.
        self.clients.matchAll().then(function (clientList) {
            // Если есть хотя бы один клиент, фокусируем его.
            if (clientList.length > 0) {
                return clientList[0].focus();
            }
            // В противном случае открываем новую страницу.
            return self.clients.openWindow(url);
        })
    );
});

self.addEventListener('notificationclose', function (event) {
    //do something
    event.notification.close();
});


function arrayBufferToBase64(buffer) {
    var binary = '';
    var bytes = new Uint8Array(buffer);
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode(bytes[i]);
    }
    return window.btoa(binary);
}


Часовой пояс GMT +3, время: 11:12.