uni-app 更新wgt包小程序后 应用中的小程序不会更新

发布于 1周前 作者 itying888 来自 Uni-App

uni-app 更新wgt包小程序后 应用中的小程序不会更新

操作步骤:

  • 一直存在

预期结果:

  • 修改版本重新打包wgt导入项目应该显示新版本的小程序

实际结果:

  • 修改版本重新打包wgt导入项目依旧显示之前版本的小程序,必须卸载重装才会显示新版,appstore更新应用也会有这种问题

bug描述:

  • 我的多个iPhone手机都是,提高版本号后打包wgt包,clean build然后重新运行xcode项目小程序还是之前版本的,必须要卸载重装才行,即便是线上发布新版本,安装新版本后小程序也依旧是之前版本的小程序,必须卸载重装
信息类别 详细信息
产品分类 uni小程序SDK
手机系统 iOS
手机系统版本号 iOS 15
手机厂商 苹果
手机机型 iphone7
页面类型 vue
SDK版本号 3.94

2 回复

wgt 资源需要调用 install 释放资源才会生效,不是说放到工程里面就行,集成文档最后面关于资源升级的章节仔细看一下


在使用 uni-app 开发并更新 wgt 包(即小程序资源包)后,如果发现应用中的小程序没有自动更新,可能是以下几个原因导致的。以下是一些常见的排查和解决方法:


1. 检查 wgt 包是否正确生成并上传

  • 确保 wgt 包是通过 HBuilderX 正确生成的。
  • 检查 wgt 包是否上传到服务器,并且访问路径正确。
  • 确保 wgt 包的版本号(version)比当前版本更高。

2. 检查更新逻辑是否正确

  • 在应用中,需要通过 plus.runtime.getProperty 获取当前版本,并与服务器上的最新版本进行比较。
  • 如果发现新版本,调用 plus.runtime.install 方法下载并安装 wgt 包。
  • 示例代码:
    plus.runtime.getProperty(plus.runtime.appid, function (info) {
        let currentVersion = info.version;
        let latestVersion = '1.0.1'; // 从服务器获取最新版本号
        if (latestVersion > currentVersion) {
            plus.runtime.install('https://example.com/path/to/your.wgt', {
                force: true // 强制更新
            }, function () {
                console.log('安装成功');
                plus.runtime.restart(); // 重启应用
            }, function (e) {
                console.error('安装失败:', e);
            });
        }
    });

3. 检查是否强制刷新缓存

  • plus.runtime.install 方法中,可以设置 force: true 强制更新,即使版本号相同也会重新安装。
  • 如果未设置 force: true,可能会导致相同版本号的 wgt 包不会被重新安装。

4. 检查是否重启应用

  • 安装 wgt 包后,需要调用 plus.runtime.restart() 重启应用,否则新资源不会生效。
  • 确保重启逻辑正确执行。

5. 检查服务器缓存问题

  • 如果 wgt 包是通过 CDN 或服务器分发的,确保服务器没有缓存旧版本的 wgt 包。
  • 可以尝试在 wgt 包的 URL 中添加时间戳或随机参数,避免缓存问题。例如:
    plus.runtime.install('https://example.com/path/to/your.wgt?t=' + Date.now(), ...);

6. 检查平台兼容性

  • 确保目标平台(如 iOS、Android)支持 wgt 包更新。
  • 某些平台或环境下,wgt 包更新可能会有特殊限制或需要额外配置。

7. 调试与日志

  • 在更新过程中,使用 console.logplus.nativeUI.toast 输出关键步骤的信息。
  • 检查是否有错误日志,并根据日志定位问题。

8. 检查 uni-app 版本

  • 确保使用的 HBuilderXuni-app 是最新版本,避免因版本问题导致的 bug。

9. 小程序平台限制

  • 如果是小程序平台(如微信小程序),wgt 包更新机制可能不适用。小程序平台的更新通常是通过发布新版本并等待用户主动更新。
  • 如果需要强制更新,可以使用小程序平台的 UpdateManager API 实现。

示例完整代码

以下是一个完整的 wgt 包更新示例:

function checkUpdate() {
    plus.runtime.getProperty(plus.runtime.appid, function (info) {
        let currentVersion = info.version;
        let latestVersion = '1.0.1'; // 从服务器获取最新版本号
        if (latestVersion > currentVersion) {
            plus.nativeUI.showWaiting('正在更新...');
            plus.runtime.install('https://example.com/path/to/your.wgt?t=' + Date.now(), {
                force: true
            }, function () {
                plus.nativeUI.closeWaiting();
                plus.nativeUI.alert('更新成功,即将重启应用', function () {
                    plus.runtime.restart();
                });
            }, function (e) {
                plus.nativeUI.closeWaiting();
                plus.nativeUI.alert('更新失败:' + e.message);
            });
        }
    });
}

// 在应用启动时调用
checkUpdate();
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!