onLaunch 中调用 plus.runtime.getProperty 是唯一可靠入口,必须传 plus.runtime.appid 获取 version 和 versionCode;更新逻辑需后端驱动,versionCode 须转整数比对,Android 11+ 需 REQUEST_INSTALL_PACKAGES 权限,安装失败多因签名、versionCode 或路径权限问题。
plus.runtime.getProperty 是唯一可靠入口App 启动后第一时间读取本地版本信息,是所有更新逻辑的前提。不能依赖页面 mounted 或 onLoad —— 用户可能跳过登录页、从后台唤醒、甚至没进任何 Vue 页面,onLaunch 是 uni-app 中唯一能保证执行的全局生命周期钩子。
plus.runtime.getProperty 必须传 plus.runtime.appid,否则拿不到当前包的 version 和 versionCode
REQUEST_INSTALL_PACKAGES 权限,plus.runtime.install 会静默失败,控制台也不报错uni.request 请求更新接口必须带 versionCode 做精准比对服务端不能只返回“有更新”,而要根据客户端传来的 versionCode 返回可更新的 wgt 地址。很多团队用字符串比版本(如 "1.0.0" > "1.0.10"),结果 1.0.10 被判成更小 —— 这是因为字符串比较按字典序,不是数值序。
versionCode 当整数处理:用 parseInt(widgetInfo.versionCode) 转换后再传给后端update: true、wgtUrl、isForce: boolean,避免前端再解析语义versionCode 改小(比如改 100),看是否真触发下载;别只靠日志判断“进了 success 回调”就认为 OKplus.runtime.install 安装失败的三大隐形原因下载成功但安装失败,90% 不是代码问题,而是环境或配置卡点。控制台不报错、fail 回调里的 e.message 常为空,得靠排除法定位。
versionCode 没变,或变小了,plus.runtime.install 会直接拒绝(iOS 更严格)tempFilePath 必须在应用私有目录(uni.getEnvInfo().plusRuntimePath 下),不能用 uni.downloadFile 默认的公共 Download 目录前端无法自己决定“要不要强制”。所谓“强制更新”,本质是后端返回 isForce: true 且该版本 versionCode 高于当前所有可选版本。前端只做两件事:展示弹窗、调用安装。
plus.runtime.install 成功后调用 plus.runtime.restart(),否则新资源不生效