From 2012abc6700fbbe3f0882b0dc493062c575408f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E5=AE=87=E5=AE=81?= Date: Tue, 15 Sep 2026 22:24:31 +0700 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=9B=BA=E5=AE=9A=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=8E=B7=E5=8F=96ios=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/useAppDownload.ts | 66 +++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/src/utils/useAppDownload.ts b/src/utils/useAppDownload.ts index fab2f3e..81a3e4f 100644 --- a/src/utils/useAppDownload.ts +++ b/src/utils/useAppDownload.ts @@ -3,8 +3,8 @@ * * - 进页面:bottonlist 拿按钮开关(iosDown / iosStore / iosTF / iosH5 / androidButton),不含下载地址 * - 点下载:bottonclick 返回 data.link(地址数组),跳 link[index];同一请求后端记点击 - * - iOS:商店包 iosStore(packageType 2) / 企业签 iosDown(1) / TF iosTF(3) 走 bottonclick 拿 link; - * iosH5 走 h5/config 下载描述文件;社媒内置浏览器装不了描述文件,只弹「复制到 Safari」引导 + * - iOS 轻量版:点击直接调 h5/config 下载描述文件(不看开关);社媒内置浏览器装不了描述文件,只弹「复制到 Safari」引导 + * - iOS 商店版:iosStore(packageType 2) 走 bottonclick 拿 link * - 下载前把 { ...query, tid } 写入剪贴板供 App 首启归因 * * 组件接入: @@ -121,38 +121,24 @@ export function useAppDownload() { setTimeout(() => URL.revokeObjectURL(objectUrl), 10000) } - async function downloadIos(param: donwloadParam, useStore: boolean) { - const flags = buttonList.value - if (useStore) { - if (!flags.iosStore) return false - param.type = 'iosStore' - param.packageType = 2 - const links = await fetchLinks(param) - if (!links.length) return false - jumpToLink(links[0]) - return true - } + // iOS 轻量版:不看 bottonlist 开关,直接调 h5/config 下载描述文件 + async function downloadIosLite() { + guide.value = 'ios' + // 社媒内置浏览器无法装描述文件,只展示引导,由页面「复制到 Safari」处理 + if (isSocialInAppBrowser()) return true + await downloadMobileConfig() + return true + } - if (flags.iosDown || flags.iosTF) { - param.type = flags.iosDown ? 'iosDown' : 'iosTF' - param.packageType = flags.iosDown ? 1 : 3 - guide.value = 'ios' - const links = await fetchLinks(param) - if (!links.length) return false - jumpToLink(links[0]) - return true - } - - if (flags.iosH5) { - guide.value = 'ios' - // 社媒内置浏览器无法装描述文件,只展示引导,由页面「复制到 Safari」处理 - if (!isSocialInAppBrowser()) await downloadMobileConfig() - return true - } - - // 没开轻量版时退到商店包 - if (flags.iosStore) return downloadIos(param, true) - return false + // iOS 商店版:后台开了 iosStore 才有入口,走 bottonclick 拿 link + async function downloadIosStore(param: donwloadParam) { + if (!buttonList.value.iosStore) return false + param.type = 'iosStore' + param.packageType = 2 + const links = await fetchLinks(param) + if (!links.length) return false + jumpToLink(links[0]) + return true } async function downloadAndroid(param: donwloadParam, index: number) { @@ -171,10 +157,20 @@ export function useAppDownload() { * @param terminal 默认按 UA;PC 端弹窗里的 iOS / Android 按钮显式传入 */ async function download(index = 0, terminal: Terminal = isIos ? 'ios' : 'android') { - await init() const trace_id = renewSessionTraceId() // 写剪贴板供 App 首次启动读取做安装归因:整包 URL 参数 + tid(黄果 App 按 tid 读) copyToClipboard(JSON.stringify({ ...route.query, tid: trace_id })) + + if (terminal === 'ios' && index !== 1) { + try { + return await downloadIosLite() + } catch (err) { + console.log('下载描述文件失败' + err) + return false + } + } + + await init() const param: donwloadParam = { appId: APP_ID, ip: ip.value, @@ -186,7 +182,7 @@ export function useAppDownload() { } try { return terminal === 'ios' - ? await downloadIos(param, index === 1) + ? await downloadIosStore(param) : await downloadAndroid(param, index) } catch (err) { console.log('下载失败' + JSON.stringify(err))