Store自动升级依赖平台机制或应用内更新SDK,非插件直接实现;Android可静默下载但需用户确认安装,iOS只能跳转App Store;热更新仅限JS/Flutter逻辑且受审核限制;灰度升级由服务端策略与插件协同控制。

Store 的自动版本升级通常不是通过插件直接完成的,而是依赖平台机制(如 Android 的 Google Play 或 iOS 的 App Store)或应用内自更新逻辑。所谓“插件实现自动升级”,实际是指在应用内部集成第三方更新 SDK 或自研热更/补丁模块,配合服务端策略,实现 Store 版本发布后的平滑过渡或灰度更新。关键在于:Store 本身不开放自动安装权限,所有“自动升级”都需用户确认或受限于系统限制。
使用更新 SDK 插件(如 UpdatePlugin、AppUpdate、Squirrel)
这类插件封装了检查版本、下载 APK(Android)、提示用户、静默安装(需特殊权限)等能力:
- 接入后,在应用启动或后台定时调用 checkUpdate(),向你自己的版本接口请求最新 versionCode/versionName 和下载地址
- 对比本地版本,若需更新,弹窗提示或静默下载(Android 8.0+ 需申请
REQUEST_INSTALL_PACKAGES权限) - iOS 不允许静默安装,插件只能跳转到 App Store 页面,无法绕过审核流程
- 注意:Google Play 禁止应用诱导用户绕过商店安装,否则可能下架
结合热更新插件做“伪自动升级”(如 Tinker、React Native CodePush、Flutter Hotfix)
适用于 JS/Flutter/Dart 层逻辑变更,不涉及原生 SDK 或权限调整:
- 将 UI、业务逻辑打包为补丁包,由插件在启动时拉取并加载
- 用户无感更新,但 Store 上的版本号(versionCode)不变,仅 patch 版本递增
- 必须提前在 Store 版本中集成热更能力,且首次发布不能依赖热更修复严重缺陷
- 热更内容受平台审核约束(iOS 明确禁止动态执行远程代码,CodePush 需声明用途并避免敏感 API)
服务端控制 + 插件协同实现灰度升级
真正可控的“自动”体现在策略层面,而非完全无人干预:
- 在服务端配置升级开关、目标用户群(按设备 ID、渠道、版本区间)、强制/可选标识
- 插件根据返回策略决定是否提示、是否延后、是否静默下载(Android)
- 例如:v1.2.0 用户中 5% 先推 v1.3.0,崩溃率低于 0.1% 后再全量,插件读取该比例并执行
- 所有行为需记录上报,便于回滚和分析
注意事项与合规边界
绕过 Store 自动升级风险极高,务必守住底线:
-
Android:targetSdkVersion ≥ 30 后,
INSTALL_PACKAGES权限仅系统应用可用;普通应用只能通过Intent.ACTION_VIEW跳转安装页,用户必须手动点击“继续” - iOS:无任何合法方式实现自动安装,TestFlight 有 90 天限制,企业签名分发违反 App Store 审核指南
- 所有更新提示文案需清晰注明“新版本已发布”,不得隐藏 Store 渠道信息或误导用户“当前已是最新版”
- 涉及隐私、权限、安全的更新,必须走 Store 正式审核,不可用热更替代
不复杂但容易忽略的是:自动升级体验好坏,取决于服务端响应速度、CDN 下载稳定性、插件兼容性(尤其 Android 各厂商定制系统),以及是否尊重用户选择权。真正的“自动化”,是把判断和决策交给系统与用户,而不是强行覆盖。

















