• vue项目,PDA嵌入安卓,实现app热更新


    1、服务器发送通知的方式
    当有新版本时,由服务器向所有用户发送通知,提醒用户进行更新。
    好处:用户下载应用之后,即使一次也没使用过,也可以接收到通知,然后进行版本更新。
    坏处:
    1)可能用户已经更新了新版本,可还是收到了有新版本的提示。
    2)如果用户关闭了接收push通知,那么即使服务器push了一个新版本提示,用户也收不到。
    2.本地通知的方式。
    在pda登陆页面或者是设置一个定时器,间隔时间去查询用户当前版本,监测到版本不一致时提醒用户更新
    方法:服务器提供一个访问现有版本的接口, 本地代码可以每隔一段时间,去访问服务器获取当前应用的版本,如果有更新,则弹出对话框提醒用户进行更新
    坏处:可能不能及时更新版本。
    3.服务器提供一个接口,访问接口(在使用应用中间(比如进入某个模块,这个模块调用此接口))进行提醒更新, 从接口获取的最新版本号与上次存储在本地的当前版本进行比较,不一致则提醒用户更新
    好处:及时。用户可以很及时的更新新版本。
    坏处:是用户在使用app期间收到提示

    方法4没有进行实践操作,暂且仅当记录
    4、另外,友盟有自动提醒的功能,利用友盟推送可以实现版本更新

    目前PDA的版本更新用的是类似方法3
    大致实现思路:
    步骤一:获取当前安卓上所安装的软件版本号
    步骤二:调用接口获取当前最新版本号
    步骤三:当前版本号是否与最新版版本号一致,不一致进行版本下载安装更新

    1. data () {
    2. return {
    3. currentVersion: '', // 安卓上当前软的版本号
    4. lateVer: '', // 最新版本号
    5. wgtUrl: '', // 下载地址
    6. percentageNum: 0, //下载进度条
    7. show: false, // 下载时可根据需求添加进度条样式 控制进度条显隐
    8. }
    9. },
    10. mounted () {
    11. setTimeout(() => { // 根据代码实际情况确认是否添加延迟
    12. // 获取设备唯一标识码 浏览器运行时注释掉plus部分【浏览器中无plus会报错阻滞代码向下执行】
    13. // 这里可以调用5+ API了,为了更好的兼容性,应该使用以下代码进行判断
    14. if (window.plus) {
    15. // 在这里调用5+ API
    16. this.plusready()
    17. } else { // 兼容老版本的plusready事件
    18. document.addEventListener('plusready', this.plusready(), false)
    19. }
    20. })
    21. },
    22. methods: {
    23. plusready () {
    24. // 获取软件版本号
    25. plus.runtime.getProperty(plus.runtime.appid, (inf) => {
    26. console.info('当前版本号:' + inf.version)
    27. // 获取当前版本号逻辑操作
    28. })
    29. },
    30. // 当前安装软件的版本与最新版本不同时确定下载
    31. // 在App中检测版本更新首先判断版本号是否是最新的,不是最新则执行版本更新功能。
    32. // 实现方式主要通过plus.downloader.createDownload下载apk包,
    33. // 下载完成后通过plus.runtime.install来进行安装,在下载时给下载任务设置一个监听根据状态实时更新下载进度
    34. downLoad () {
    35. // plus.nativeUI.showWaiting("新版本更新中,请耐心等待~");
    36. let dtask = plus.downloader.createDownload('http://实际下载地址', {}, (d, status) => {
    37. if (status == 200) {
    38. console.log('下载更新成功:' + d.filename)
    39. // 安装wgt资源包
    40. this.installWgt(d.filename)
    41. } else {
    42. console.log('下载更新失败!')
    43. plus.nativeUI.toast('下载更新失败!')
    44. }
    45. plus.nativeUI.closeWaiting()
    46. })
    47. dtask.start()
    48. // 下载时实时显示下载进度
    49. let prg = 0
    50. dtask.addEventListener('statechanged', (task, status) => {
    51. // 给下载任务设置一个监听 并根据状态 做操作
    52. switch (task.state) {
    53. case 1:
    54. // '正在下载';
    55. break
    56. case 2:
    57. // '已连接到服务器';
    58. break
    59. case 3:
    60. prg = parseInt(
    61. (parseFloat(task.downloadedSize) /
    62. parseFloat(task.totalSize)) *
    63. 100
    64. )
    65. this.percentageNum = prg // 赋值给进度条组件
    66. break
    67. case 4:
    68. this.show = false // 进度隐藏
    69. break
    70. }
    71. })
    72. },
    73. // installWgt()这个方法在一切准备就绪后安装App
    74. installWgt (path) {
    75. // 安装更新
    76. plus.nativeUI.showWaiting('Install updates')
    77. plus.runtime.install(path, {}, () => {
    78. plus.nativeUI.closeWaiting()
    79. console.log('安装更新成功!')
    80. plus.nativeUI.alert('安装更新成功!', () => {
    81. plus.runtime.restart() // 安装成功后重启应用
    82. })
    83. }, (e) => {
    84. plus.nativeUI.closeWaiting()
    85. console.log('安装更新失败![' + e.code + ']:' + e.message)
    86. plus.nativeUI.toast('安装更新失败!')
    87. })
    88. },
    89. }

     

  • 相关阅读:
    差点自闭,京东面试官夺命连环问操作系统,幸好最后拿到了offer
    无线蓝牙耳机哪款性价比高?蓝牙耳机性价比排行
    Android Studio运行kotlin项目,一直Read timed out
    python编程题——如何求一组数的全排列
    PyQt5 QWebEngineView网页交互
    Unity3D Application模拟进入前后台及暂停
    WebSocket
    【JAVA】基础语法
    【金融投资】一文带你了解 加息、降息与利率
    Spring之事务开发
  • 原文地址:https://blog.csdn.net/Sunny_lxm/article/details/125409593