.net core(web api) 后台 +uniapp移动端自动更新

发布时间 2023-12-01 11:20:14作者: 啊修

移动端采用uniapp开发

后台采用.net core

先到插件市场找到对应的插件

 

 

然后将插件安装到

 

然后在移动端项目pages.json

    "path": "uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update",
    "style": {
        "app-plus": {
            "animationDuration": 200,
            "animationType": "fade-in",
            "background": "transparent",
            "backgroundColorTop": "transparent",
            "popGesture": "none",
            "scrollIndicator": false,
            "titleNView": false
        },
        "disableScroll": true
    }

然后再到移动端app.vue里面onShow: function()  编写启动app自动更新

 

    onShow: function() 
        {
 //#ifdef APP-PLUS  
 // 获取本地应用资源版本号
         plus.runtime.getProperty(plus.runtime.appid, (inf) => { 
             //获取服务器的版本号
             uni.request({
                 url: 'http://192.168.1.5:44312/api/services/app/XXOO/update', //示例接口
                 data: {
                     edition_type: plus.runtime.appid,
                     version_type: uni.getSystemInfoSync().platform, //android或者ios
                     edition_number: inf.versionCode // 打包时manifest设置的版本号 
                 },
                 success: (res) => { 
                     //res.data.xxx根据后台返回的数据决定(我这里后端返回的是data),所以是res.data.data 
                     //判断后台返回版本号是否大于当前应用版本号 && 是否发行 (上架应用市场时一定不能弹出更新提示)
                     if (Number(res.data.data.edition_number) > Number(inf.versionCode) && res
                         .data.data.edition_issue == 1) {
 
                         //如果是wgt升级,并且是静默更新 (注意!!! 如果是手动检查新版本,就不用判断静默更新,请直接跳转更新页,不然点击检查新版本后会没反应)
                         if (res.data.data.package_type == 1 && res.data.data.edition_silence == 1) {
 
                             //调用静默更新方法 传入下载地址
                             silenceUpdate(res.data.data.edition_url)
 
                         } else {
                             //跳转更新页面 (注意!!!如果pages.json第一页的代码里有一打开就跳转其他页面的操作,下面这行代码最好写在setTimeout里面设置延时3到5秒再执行)
                             uni.navigateTo({
                                 url: '/uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update?obj=' +
                                     JSON.stringify(res.data.data)
                             });
                         }
                     } else {
 
                         // 如果是手动检查新版本 需开启以下注释
                         //  uni.showModal({
                         //     title: '提示',
                         //     content: '已是最新版本',
                         //     showCancel: false
                         // })  
                     }
                 }
 
             })
 
         });
 
         //#endif   
 
        },

移动端代码就写完了,移动端插件更新的接口参数

data:{
    // 版本更新内容 支持<br>自动换行
    describe: '1. 修复已知问题<br>
                2. 优化用户体验', 
    edition_url: '', //apk、wgt包下载地址或者应用市场地址  安卓应用市场 market://details?id=xxxx 苹果store itms-apps://itunes.apple.com/cn/app/xxxxxx
    edition_force: 0, //是否强制更新 0代表否 1代表是
    package_type: 1, //0是整包升级(apk或者appstore或者安卓应用市场) 1是wgt升级
    edition_issue:1, //是否发行  0否 1是 为了控制上架应用市场审核时不能弹出热更新框
    edition_number:100, //版本号 最重要的manifest里的版本号 (检查更新主要以服务器返回的edition_number版本号是否大于当前app的版本号来实现是否更新)
    edition_name:'1.0.0',// 版本名称 manifest里的版本名称
    edition_silence:0, // 是否静默更新 0代表否 1代表是
}

 

然后写.net 后台接口代码

        /// <summary>
        /// 自动更新
        /// </summary>
        [Microsoft.AspNetCore.Mvc.Route("/api/services/app/XXOO/update")]
        [HttpGet]
        [DontWrapResult]
        public dynamic update()
        {
            try
            { 
                string describe = _appConfiguration["App:describe"].ToString();
                string edition_url = _appConfiguration["App:edition_url"].ToString();
                int edition_number = int.Parse(_appConfiguration["App:edition_number"].ToString()); 
                MobileUpdateResultRequestDto mobile = new MobileUpdateResultRequestDto()  ; 
                mobile.code = 1;
                mobile.msg = "请求成功";
                mobile.time = DateTime.Now.ToString("yyyyMMddHHmmss");
                mobile.total = 1;  
                mobile.data = new data () { describe = describe, edition_url = edition_url, edition_number = edition_number } ;
                return new { mobile.code, mobile.msg , mobile.time , mobile.total, mobile.data }; 
            }
            catch (Exception ex)
            {
                Logger.Info(ex.Message);
                return new { code = 0, msg = "发生异常" };
            }
        }
 public class MobileUpdateResultRequestDto
 {

     public int total { get; set; }
     public int code { get; set; }
     public string msg { get; set; }
     public string time { get; set; } 
 public data data { get; set; }


 }
 public class data
 {
     public string describe { get; set; }//: '1. 修复已知问题<br>
                                         //2.优化用户体验', 
     public string edition_url { get; set; }//: '', //apk、wgt包下载地址或者应用市场地址  安卓应用市场 market://details?id=xxxx 苹果store itms-apps://itunes.apple.com/cn/app/xxxxxx
     public int edition_force { get; set; } = 1;//: 0, //是否强制更新 0代表否 1代表是
     public int package_type { get; set; } = 0;//: 1, //0是整包升级(apk或者appstore或者安卓应用市场) 1是wgt升级
     public int edition_issue { get; set; } = 1;//: 1, //是否发行  0否 1是 为了控制上架应用市场审核时不能弹出热更新框
     public int edition_number { get; set; }//: 100, //版本号 最重要的manifest里的版本号 (检查更新主要以服务器返回的edition_number版本号是否大于当前app的版本号来实现是否更新)
     public string edition_name { get; set; } = "1.0.1";//: '1.0.0',// 版本名称 manifest里的版本名称
     public int edition_silence { get; set; } = 0;//: 0, // 是否静默更新 0代表否 1代表是
 }

配置文件信息

 

 更新的接口url请求返回

 然后移动端需要打一个包,版本设置到2,HBuilder X编译器

 打一个包放到iis里面

调试的时候再改成1

 

启动真机运行