From a47038c46f90bdf651f23bfe60b0d4704de213c4 Mon Sep 17 00:00:00 2001 From: chenhang Date: Tue, 23 Jun 2026 17:55:51 +0800 Subject: [PATCH] fix(payment): guard ezpay redirect persistence --- .../chat/components/pwa-install-overlay.tsx | 39 ++++++----- .../subscription-checkout-button.tsx | 68 ++++++++++++------- 2 files changed, 64 insertions(+), 43 deletions(-) diff --git a/src/app/chat/components/pwa-install-overlay.tsx b/src/app/chat/components/pwa-install-overlay.tsx index 477a7a0d..be6f330b 100644 --- a/src/app/chat/components/pwa-install-overlay.tsx +++ b/src/app/chat/components/pwa-install-overlay.tsx @@ -26,26 +26,14 @@ export function PwaInstallOverlay() { let mounted = true; const init = async () => { - // 0) PWA 支持 / 安装 双重门禁(两种环境都检查): - // isSupported() 检查 serviceWorker + window(SSR 安全) - // isInstalled() 检查 standalone display-mode(避免给已安装用户再弹) - if (!pwaUtil.isSupported()) return; - if (pwaUtil.isInstalled()) return; - if (BrowserDetector.isInAppBrowser()) return; + // const isDev = AppEnvUtil.isDevelopment(); + const isDev = false; + const shouldShowDialog = await shouldShowPwaInstallDialog(isDev); + if (!shouldShowDialog) return; + // 提前挂 beforeinstallprompt 监听,避免用户点 OK 时事件已在更早时机丢失。 pwaUtil.prepareInstallPrompt(); - const isDev = AppEnvUtil.isDevelopment(); - - if (!isDev) { - // 生产环境:每日只弹一次(防骚扰) - const lastResult = await SpAsyncUtil.getString(PWA_DIALOG_KEY); - if (!lastResult.success) return; - const today = new Date().toISOString().slice(0, 10); - if (lastResult.data === today) return; // 今天已显示过 - } - // 开发环境:跳过"每日一次"门禁,每次进入都弹,方便 UI 测试 - // 开发环境 1s 后弹(快);生产环境 3.5s 后弹(让用户先看到聊天内容) const delay = isDev ? 1000 : 3500; setTimeout(() => { @@ -63,6 +51,23 @@ export function PwaInstallOverlay() { return