首页 > 其他分享 >.net core(web api) 后台 +uniapp移动端自动更新

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

时间:2023-12-01 11:23:03浏览次数:29  
标签:core set uniapp 版本号 get edition 自动更新 data public

移动端采用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

 

启动真机运行

 

标签:core,set,uniapp,版本号,get,edition,自动更新,data,public
From: https://www.cnblogs.com/axyls/p/17869312.html

相关文章

  • 从零开始的 dbt 入门教程 (dbt-core 基础篇)
    最近一直在处理数据分析和数据建模的事情,所以接触了dbt等数据分析的工具,国内目前对于dbt比较详细的资料不多,所以打算写四道五篇dbt相关的文章,本文属于dbt系列的第一篇,本篇主要阐述dbt一些基本概念,教会你如何配置dbt连接远端数据库,并运行你的第一个数据模型,那么本文开......
  • uniapp关于uni.getUserProfile的使用
    点击查看代码 <button@click="getMy"data-eventsync="true">获取信息</button> letgetMy=()=>{ if(uni.getUserProfile){ console.log('可以用'); uni.getUserProfile({ lang:'zh_CN', desc:'......
  • 通过.NET Core+Vue3 实现SignalR即时通讯功能
    .NETCore和Vue3结合使用SignalR可以实现强大的实时通讯功能,允许实时双向通信。在这个示例中,我们将详细说明如何创建一个简单的聊天应用程序,演示如何使用.NETCoreSignalR后端和Vue3前端来实现实时通讯功能。步骤1:准备工作确保你已经安装了以下工具和环境:.NETCore......
  • Vue 项目配置自动更新,自动刷新页面
    今天用户反馈使用页面的时候,有时候点击没反应,排查下来,是因为发布版本的时候,用户那边没有加载最新的文导致的,然后根据思路,做了这个自动更新的功能效果预览http://demo.webwlx.cn/#/update实现思路1.把当前版本的编译时间,通过环境变量的方式保存起来打开vite.config.jsim......
  • uniapp使用微信jssdk自定义分享
    前言提示:本文记录的是使用uniapp开发的H5+APP项目,H5端使用微信自定义分享功能,文中有关APP的兼容,如果不需要兼容APP的可以忽略一、引入首先安装jweixin-module包npminstalljweixin-module--save二、封装工具方法为了方便使用,新建一个wechat.js文件://#ifdefH5impo......
  • .net core 6 DEBUG环境下不注入的服务
    .netcore6中,如果有些服务不想在调试时启动,比如nacos及一些监听器,如果每次注释,难免会出错误。所以在Program.cs文件中写明,DEBUG环境下是不启动的:#ifDEBUG#else//Nacos服务发现注册builder.Services.AddNacosAspNet(builder.Configuration);//默认找"nacos"节//Nacos读取配......
  • .net core中实现服务自动发现
    .netcore中自带了依赖注入框架,asp.netcore或worker框架下可以直接使用,控制台程序可以通过加入Microsoft.Extensions.DependencyInjection程序包来支持。自带的di框架功能还行,但是一个不方便的地方是没有提供服务自动发现、注册的接口,稍微大的程序都是需要通过反射自己写一个发......
  • .Net Core 单元测试获取配置文件节点值
     单元测试类:ServiceProvider_serviceProvider;IConfiguration_config;[SetUp]publicvoidSetup(){_config=newConfigurationBuilder().Add(newJsonConfigurationSource{Path="appsettings.jso......
  • uniapp开发App从开发到上架全过程
    ​当我们的APP开发完毕,最终交付的时候,必然要经历的一个环节,就是APP上架,国内APP上架一般为IOS端appstore上架,安卓端应用商店比较多,最常见的应用商店有华为应用商店、小米应用商店、OPPO应用商店、VIVO应用商店、应用宝应用商店等。在开始上架前,需要准备好相应的材料,安卓端需要准......
  • vue Vite3出现错误runtime-core.esm-bundler.js:6835 Uncaught TypeError: normalize
    原因是在引入Element-Plus的顺序在vue之前导致,重新调整下他们的顺序后,问题解决。importAppfrom'./App.vue'import{setupI18n}from'/@/i18n'import{setupRouter}from'/@/router'import{setupStore}from'/@/store'importbusfrom'/@......