Проблема с добавлением приложения на главный экран телефона

Всем привет! Пишу webapp приложение на Python, aiogram. Возникла проблема с кнопкой "добавить на главный экран". Никак не могу понять, почему она не работает и вообще никак не реагирует на нажатие. Кто-то сталкивался с таким? Как это можно исправить?

мой main.js:

document.addEventListener("DOMContentLoaded", function () {
    // Переключение панели фильтров
    const filterToggle = document.getElementById("filter-toggle");
    const filterPanel = document.getElementById("filter-panel");
    if (filterToggle && filterPanel) {
        filterToggle.addEventListener("click", function () {
            filterPanel.classList.toggle("d-none");
        });
    }

    // Открытие/закрытие выезжающего меню (гамбургер)
    const hamburgerMenu = document.getElementById("hamburger-menu");
    const sideMenu = document.getElementById("side-menu");
    const closeSideMenu = document.getElementById("close-side-menu");
    if (hamburgerMenu && sideMenu) {
        hamburgerMenu.addEventListener("click", function () {
            sideMenu.classList.add("open");
        });
    }
    if (closeSideMenu) {
        closeSideMenu.addEventListener("click", function () {
            sideMenu.classList.remove("open");
        });
    }

    // Кнопка "Наверх"
    const backToTop = document.getElementById("back-to-top");
    if (backToTop) {
        window.addEventListener("scroll", function () {
            if (window.scrollY > 300) {
                backToTop.style.display = "flex";
            } else {
                backToTop.style.display = "none";
            }
        });
        backToTop.addEventListener("click", function () {
            window.scrollTo({ top: 0, behavior: "smooth" });
        });
    }

    // PWA установка - улучшенная логика
    let deferredPrompt;
    const addToHomeBtn = document.getElementById("add-to-home-btn");

    if (addToHomeBtn) {
        // По умолчанию скрываем кнопку
        addToHomeBtn.style.display = "none";

        // Событие beforeinstallprompt вызывается, если приложение 
        // может быть установлено и не установлено
        window.addEventListener('beforeinstallprompt', (e) => {
            // Предотвращаем стандартное поведение
            e.preventDefault();
            // Сохраняем событие
            deferredPrompt = e;
            // Показываем кнопку установки
            addToHomeBtn.style.display = "flex";

            console.log('beforeinstallprompt event fired');
        });

        // Добавляем обработчик события клика только один раз
        addToHomeBtn.addEventListener('click', async () => {
            if (!deferredPrompt) {
                console.log('No installation prompt available');
                return;
            }

            console.log('Install button clicked');

            // Показываем диалог установки
            deferredPrompt.prompt();

            // Ждем выбора пользователя
            const { outcome } = await deferredPrompt.userChoice;
            console.log(`User response: ${outcome}`);

            // Больше не используем событие
            deferredPrompt = null;

            // Скрываем кнопку после выбора пользователя
            addToHomeBtn.style.display = "none";
        });

        // Проверяем, не установлено ли уже приложение
        window.addEventListener('appinstalled', (evt) => {
            console.log('App was installed');
            addToHomeBtn.style.display = "none";
        });
    }

    // Обновление placeholder для поля адреса в зависимости от способа доставки
    const deliveryMethodSelect = document.getElementById("delivery_method");
    const deliveryAddressInput = document.getElementById("deliveryAddress");
    if (deliveryMethodSelect && deliveryAddressInput) {
        deliveryMethodSelect.addEventListener("change", function () {
            if (this.value === "cdek") {
                deliveryAddressInput.placeholder = "Введите адрес пункта СДЭК";
            } else if (this.value === "post") {
                deliveryAddressInput.placeholder = "Введите адрес отделения Почты России";
            }
        });
    }

    // Регистрация Service Worker
    if ('serviceWorker' in navigator) {
        window.addEventListener('load', function () {
            navigator.serviceWorker.register('service-worker.js')
                .then(function (registration) {
                    console.log('ServiceWorker registration successful with scope: ', registration.scope);
                })
                .catch(function (err) {
                    console.log('ServiceWorker registration failed: ', err);
                });
        });
    }
});

manifest.json:

{
    "short_name": "ShopBot",
    "name": "Shop Bot WebApp",
    "icons": [
        {
            "src": "/static/images/WU2_classic.png",
            "type": "image/png",
            "sizes": "192x192",
            "purpose": "any"
        }
    ],
    "start_url": "/",
    "display": "standalone",
    "theme_color": "#007bff",
    "background_color": "#ffffff",
    "orientation": "portrait",
    "scope": "/",
    "description": "Удобное приложение для покупок через бота"
}

service-worker.js:

const CACHE_NAME = 'shopbot-cache-v1';
const urlsToCache = [
    '/',
    '/static/css/style.css',
    '/static/js/main.js',
];

self.addEventListener('install', function (event) {
    event.waitUntil(
        caches.open(CACHE_NAME)
            .then(function (cache) {
                return cache.addAll(urlsToCache);
            })
    );
});

self.addEventListener('fetch', function (event) {
    event.respondWith(
        caches.match(event.request)
            .then(function (response) {
                if (response) {
                    return response;
                }
                return fetch(event.request);
            })
    );
});

сама кнопка в html:

    <button id="add-to-home-btn" class="pwa-install-button" style="display: none;">
        <i class="fas fa-download"></i>
    </button>

Ответы (0 шт):