@capgo/capor-webview-version-检查器
在您的 Capacitor app 中检测出已过时的 WebView 引擎并促使用户更新, 在旧的 Android System WebView 版本打破您的UI 之前.
🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用
@capgo/capacitor-webview-version-checker在您的电容应用程序中:npx skills add Cap-go/capgo-skills。然后问你的经纪人: 添加@capgo/capor-webview-version-检查器到我的Capacitor应用上并把它接上 代理设置指南 • 妇女 主机磁共振
主要特点
- 检查数字 :
check()返回WebView是否更新、过时或未知. - 监测数字 :
startMonitoring()与statusChanged, (中文(简体) ),webViewLatest财务报告和审定财务报表webViewOutdated事件. - 更新提示数字 :
showUpdatePrompt()显示本地提示,openUpdatePage()打开正确的更新页面. - 政策: 最小版本规则,带有
latestVersion为明确的目标. - 最后状态数字 :
getLastStatus()返回最新结果. - 平台:iOS,Android和Web. 为Android系统WebView所建. 在iOS上,WebView遵循了OS版本和Apple更新帮助的即时链接.
安装
您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-webview-version-checker` plugin in my project.
如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:
bun add @capgo/capacitor-webview-version-checker
bunx cap sync
使用量
主用例:默认情况下浏览器列表-风格相容性检查.
插件在框外使用此策略, 即使您没有添加任何插件选项 :
minimumDeviceSharePercent默认为3- 版本共享数据来自构建时间生成的由 caniuse 生成的内置数据集
- 默认流量不需要运行时间版本共享 URL 调用
默认设置( 没有插件设置) :
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
WebviewVersionChecker: {},
},
};
export default config;
简单配置( O)
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
WebviewVersionChecker: {
autoPromptOnOutdated: true,
autoPromptDismissible: false,
},
},
};
export default config;
有自定义阈值和自定义数据集的高级模式 :
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
WebviewVersionChecker: {
autoCheckOnLoad: true,
autoPromptOnOutdated: true,
minimumDeviceSharePercent: 3,
versionShareByMajor: {
'137': 58.2,
'136': 21.3,
'135': 4.6,
'134': 2.1,
},
},
},
};
export default config;
这是什么意思:
minimumDeviceSharePercent: 3意思是"只有在主要版本仍然代表我数据集中至少3%的设备时,才考虑一个版本相容".versionShareByMajor是您自己的数据集地图,其中:- 键=主要版本(例如:
137(中文(简体) ) - 数值=份额(百分比)
0..100(中文(简体) )
- 键=主要版本(例如:
- 若您不提供
versionShareByMajor,插件使用其内置生成的数据集.
您可以以两种方式提供共享数据:
- 与
versionShareByMajor(如上所示) - 远程
versionShareApiUrl返回其中一个形状:{ "versionShareByMajor": { "137": 54.2, "136": 23.8 } }{ "shareByMajor": { "137": 54.2, "136": 23.8 } }{ "versions": [{ "major": 137, "share": 54.2 }, { "version": "136.0.0.0", "percent": 23.8 }] }
如果你准备好了 versionShareApiUrl,插件在运行时获取该 URL,并将其用作覆盖.
评价命令:
- 浏览器列表风格的阈值模式( E)
minimumDeviceSharePercent+共享数据集)首先被使用. 默认这是3%与内置生成的数据集. - 替换插件比较
latestVersion编号 :latestVersionApiUrl。 。 。 . - 否则它会回到
minimumMajorVersion。 。 。 .
高级使用 JavaScript( 手动检查、 收听器、 自定义提示) :
import { WebviewVersionChecker } from '@capgo/capacitor-webview-version-checker';
const listener = await WebviewVersionChecker.addListener('webViewOutdated', (status) => {
console.log('Outdated WebView detected', status);
});
const status = await WebviewVersionChecker.check({
latestVersionApiUrl:
'https://versionhistory.googleapis.com/v1/chrome/platforms/android/channels/stable/versions?page_size=1',
minimumMajorVersion: 124,
showPromptOnOutdated: true,
autoPromptDismissible: false,
promptTitle: 'Update WebView',
promptMessage: 'Your WebView is outdated. Please update to continue safely.',
promptUpdateButtonText: 'Update now',
promptCancelButtonText: 'Later',
});
console.log('WebView status', status);
// later
listener.remove();
为什么WebView版本检查器?
控制器已经通过配置提供了内置的 WebView 最小检查 :
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
android: {
minWebViewVersion: 124,
},
server: {
errorPath: 'unsupported-webview.html',
},
};
export default config;
我们为什么要这么做
android.minWebViewVersion是静态配置; 它不给出运行时插件事件, 如webViewOutdated。 。 。 .- 与
server.errorPath,用户会被重定向到静态错误页面(硬块 UX),而不是在正常的应用程序流中看到本地模式. - 无
server.errorPath,Capacitor只记录了这个问题,但不提供本地更新的即时+存储深链接UX. - 这个插件给出了软执行:用户仍然可以打开/使用该应用程序,获得本地更新模式,你决定是否稍后需要更新.
- 主用例:此插件将浏览器list-style兼容逻辑带入Android WebView(例如"至少3%的设备仍然使用支持版本"),同时保持了您的应用程序的可用性.
Android 提供者处理
插件解决了活动 WebView 提供者软件包和版本,然后将路由更新到正确的软件包的链接:
- Android 5-6和10+: Android System WebView (英语:
com.google.android.webview(中文(简体) ) - Android 7-9: Google Chrome (英语:
com.android.chrome(中文(简体) )
当提供者无法检测时,倒回路由遵循上面相同的API-范围规则.
API 密码
check(...)startMonitoring(...)stopMonitoring()getLastStatus()showUpdatePrompt(...)openUpdatePage(...)addListener('statusChanged', ...)addListener('webViewLatest', ...)addListener('webViewOutdated', ...)- 接口
- 类型异名
公共API用于检查WebView新鲜度并指导用户更新.
检查(...)
check(options?: CheckWebViewOptions | undefined) => Promise<WebViewVersionStatus>
运行版本检查并返回最新已知状态.
| 参数 | 类型 |
|---|---|
options | CheckWebViewOptions |
回返情况: Promise<WebViewVersionStatus>
启动监测(...)
startMonitoring(options?: StartMonitoringOptions | undefined) => Promise<MonitoringStateResult>
启用背景监测( 通常在应用程序恢复上) .
| 参数 | 类型 |
|---|---|
options | StartMonitoringOptions |
回返情况: Promise<MonitoringStateResult>
停止监视 ()
stopMonitoring() => Promise<MonitoringStateResult>
禁用监控 .
回返情况: Promise<MonitoringStateResult>
获取最后状态( C)
getLastStatus() => Promise<LastStatusResult>
返回最后解决状态,或 null 如果还没有检查.
回返情况: Promise<LastStatusResult>
显示 Update Prompt (...)
showUpdatePrompt(options?: ShowUpdatePromptOptions | undefined) => Promise<ShowUpdatePromptResult>
显示本地提示请用户更新 WebView .
| 参数 | 类型 |
|---|---|
options | ShowUpdatePromptOptions |
回返情况: Promise<ShowUpdatePromptResult>
打开更新页(...)
openUpdatePage(options?: OpenUpdatePageOptions | undefined) => Promise<OpenUpdatePageResult>
直接打开已配置的更新页面.
| 参数 | 类型 |
|---|---|
options | OpenUpdatePageOptions |
回返情况: Promise<OpenUpdatePageResult>
添加倾听器( “ 状态已改变 ” ,...)
addListener(eventName: 'statusChanged', listenerFunc: (status: WebViewVersionStatus) => void) => Promise<PluginListenerHandle>
为每一次成功的状态评价被开除.
| 参数 | 类型 |
|---|---|
eventName | 'statusChanged' |
listenerFunc | (status: WebViewVersionStatus) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器 ('web ViewLatest',...)
addListener(eventName: 'webViewLatest', listenerFunc: (status: WebViewVersionStatus) => void) => Promise<PluginListenerHandle>
当州政府决定 latest。 。 。 .
| 参数 | 类型 |
|---|---|
eventName | 'webViewLatest' |
listenerFunc | (status: WebViewVersionStatus) => void |
回返情况: Promise<PluginListenerHandle>
添加倾听器 ('webView Outdated',...)
addListener(eventName: 'webViewOutdated', listenerFunc: (status: WebViewVersionStatus) => void) => Promise<PluginListenerHandle>
当州政府决定 outdated。 。 。 .
| 参数 | 类型 |
|---|---|
eventName | 'webViewOutdated' |
listenerFunc | (status: WebViewVersionStatus) => void |
回返情况: Promise<PluginListenerHandle>
接口
WebViewVersion 状态
当前检测到的 WebView 状态的快照 .
| Prop | 类型 | 说明 |
|---|---|---|
platform | WebViewPlatform | 生成状态的原生平台. |
state | WebViewVersionState | 已解析版本状态 . |
isLatest | boolean | 方便布尔等值于 state === 'latest'。 。 。 . |
checkedAt | string | ISO-8601 检查的印章. |
reason | string | 人可读解所报状态. |
currentVersion | string | 当前WebView(或iOS系统WebKit)版本字符串. |
currentMajorVersion | number | 当前检测到的主要版本( 如果可解析) . |
latestVersion | string | 已解析用于比较的最新版本 . |
latestMajorVersion | number | 已解析出最新主要版本( 若可解析) . |
currentVersionSharePercent | number | 已安装的 WebView 主版本的设备共享百分比 。 仅在有版本共享数据集并包括当前主要版本时才会出现. |
minimumDeviceSharePercent | number | 兼容阈值模式使用的配置阈值 。 仅在 minimumDeviceSharePercent 要求进行这一检查. |
versionShareSource | string | 用于版本共享数据的出处. 数值: - versionShareByMajor (内置数据集) - versionShareApiUrl (远程数据集) - generatedVersionShareByMajor (构建时生成的内置数据集) |
deviceShareError | string | 兼容阈值模式的诊断信息 。 现时 minimumDeviceSharePercent 但无法对阈值检查进行全面评估. |
providerPackage | string | 活动WebView提供者的Android包名. |
updateUrl | string | 过期时应当打开更新的 URL . |
source | string | 检查执行的内部源标识符. |
检查Web View 选项
运行 WebView 版本检查的选项 .
| Prop | 类型 | 说明 | 默认 |
|---|---|---|---|
showPromptOnOutdated | boolean | 强制显示已检测到已过期的 WebView 本地提示 . | false |
source | string | 状态有效载荷中包含的可选标记,以便识别检查来源. | "manual" |
监测 国家成果
产生监测控制的有效载荷.
| Prop | 类型 | 说明 |
|---|---|---|
monitoring | boolean | 监测是否正在进行中 . |
checkOnResume | boolean | 监视时是否运行对应用程序恢复的检查 . |
autoPromptOnOutdated | boolean | 是否过时的检查自动触发本地提示 . |
开始监视选项
启动监视器模式的选项 .
| Prop | 类型 | 说明 | 默认 |
|---|---|---|---|
checkOnStart | boolean | 监控开始后立即检查. | true |
checkOnResume | boolean | 是否在启用监视时进行前景检查 . | true |
最后状态
最后已知的检查快照 .
| Prop | 类型 | 说明 |
|---|---|---|
status | WebViewVersionStatus | null | 在第一次检查完成前不要做. |
显示最新结果
结果有效载荷 showUpdatePrompt()。 。 。 .
| Prop | 类型 | 说明 |
|---|---|---|
shown | boolean | 是否实际显示本地提示 . |
openedUpdatePage | boolean | 更新页面是否从即时动作打开 . |
显示最新选项
显示本地更新提示的选项 .
| Prop | 类型 | 说明 |
|---|---|---|
title | string | 提示标题 . |
message | string | 即时消息. |
updateButtonText | string | 更新 CTA 标签 . |
cancelButtonText | string | 取消CTA标签 . |
updateUrl | string | 如果选中更新动作, 可打开可选 URL . |
打开更新页面
结果有效载荷 openUpdatePage()。 。 。 .
| Prop | 类型 | 说明 |
|---|---|---|
opened | boolean | 是否打开更新 URL 成功 . |
url | string | 尝试的 URL . |
打开更新页面选项
直接打开更新页面的选项 .
| Prop | 类型 | 说明 |
|---|---|---|
updateUrl | string | 可选 URL 覆盖 . |
插件听筒
| Prop | 类型 |
|---|---|
remove | () => Promise<void> |
类型异名
网络视频Platform
'android' | 'ios' | 'web'
WebViewVersion 状态
'latest' | 'outdated' | 'unknown'