diff --git a/index.html b/index.html index fb48b33..cf3fe35 100644 --- a/index.html +++ b/index.html @@ -4206,6 +4206,21 @@ window.PWAUtils = { window.pwaInstallPrompt.checkInstallationStatus(); console.log('🔄 PWA Installation status reset'); } + }, + + // Метод для отмены отложенного промпта + cancelDelayedPrompt: () => { + if (window.pwaInstallPrompt) { + return window.pwaInstallPrompt.cancelDelayedPrompt(); + } + return false; + }, + + // Метод для перезапуска отложенного промпта + rescheduleDelayedPrompt: () => { + if (window.pwaInstallPrompt) { + window.pwaInstallPrompt.rescheduleDelayedPrompt(); + } } }; diff --git a/src/pwa/install-prompt.js b/src/pwa/install-prompt.js index 0bff821..500165a 100644 --- a/src/pwa/install-prompt.js +++ b/src/pwa/install-prompt.js @@ -7,6 +7,7 @@ class PWAInstallPrompt { this.dismissedCount = 0; this.maxDismissals = 3; this.installationChecked = false; + this.delayedPromptTimeout = null; this.init(); } @@ -24,6 +25,9 @@ class PWAInstallPrompt { this.startInstallationMonitoring(); } + // Автоматический показ через 10 секунд для новых пользователей + this.scheduleDelayedPrompt(); + console.log('✅ PWA Install Prompt initialized'); } @@ -95,6 +99,23 @@ class PWAInstallPrompt { }); } + scheduleDelayedPrompt() { + // Автоматический показ промпта через 10 секунд для новых пользователей + this.delayedPromptTimeout = setTimeout(() => { + console.log('⏰ Checking if delayed install prompt should be shown...'); + + // Проверяем, нужно ли показывать промпт + if (!this.isInstalled && this.shouldShowPrompt()) { + console.log('💿 Showing delayed install prompt after 10 seconds'); + this.showInstallOptions(); + } else { + console.log('💿 Delayed install prompt not shown - app is installed or dismissed'); + } + }, 10000); // 10 секунд + + console.log('⏰ Delayed install prompt scheduled for 10 seconds'); + } + setupEventListeners() { window.addEventListener('beforeinstallprompt', (event) => { console.log('💿 Install prompt event captured'); @@ -223,6 +244,13 @@ class PWAInstallPrompt { return; } + // Отменяем отложенный промпт, так как показываем промпт сейчас + if (this.delayedPromptTimeout) { + clearTimeout(this.delayedPromptTimeout); + this.delayedPromptTimeout = null; + console.log('⏰ Delayed install prompt cancelled - showing prompt now'); + } + if (this.isIOSSafari()) { this.showInstallButton(); } else if (this.isMobileDevice()) { @@ -285,6 +313,13 @@ class PWAInstallPrompt { hideInstallPrompts() { console.log('💿 Hiding all install prompts'); + // Отменяем отложенный промпт + if (this.delayedPromptTimeout) { + clearTimeout(this.delayedPromptTimeout); + this.delayedPromptTimeout = null; + console.log('⏰ Delayed install prompt cancelled'); + } + if (this.installButton) { this.installButton.classList.add('hidden'); console.log('💿 Install button hidden'); @@ -649,6 +684,24 @@ class PWAInstallPrompt { this.saveInstallPreference('dismissed', 0); console.log('💿 Install dismissals reset'); } + + // Метод для отмены отложенного промпта + cancelDelayedPrompt() { + if (this.delayedPromptTimeout) { + clearTimeout(this.delayedPromptTimeout); + this.delayedPromptTimeout = null; + console.log('⏰ Delayed install prompt manually cancelled'); + return true; + } + return false; + } + + // Метод для перезапуска отложенного промпта + rescheduleDelayedPrompt() { + this.cancelDelayedPrompt(); + this.scheduleDelayedPrompt(); + console.log('⏰ Delayed install prompt rescheduled'); + } // Method for setting service worker registration setServiceWorkerRegistration(registration) {