恹心
恹心
  • 发布:2015-03-30 11:47
  • 更新:2015-04-01 16:59
  • 阅读:2853

APP升级的问题 4条流程 2个疑问

分类:HTML5+
function checkUpdate() {  
    // 判断升级检测是否过期  
    var lastcheck = plus.storage.getItem( keyUpdate );  
    if ( lastcheck ) {  
        var dc = parseInt( lastcheck );  
        var dn = (new Date()).getTime();  
        if ( dn-dc < checkInterval ) {  // 未超过上次升级检测间隔,不需要进行升级检查  
            return;  
        }  
        // 取消已过期,删除取消标记  
        plus.storage.removeItem( keyUpdate );  
    }  
    // 读取本地升级文件  
    dir.getFile( localFile, {create:false}, function(fentry){  
        fentry.file( function(file){  
            var reader = new plus.io.FileReader();  
            reader.onloadend = function ( e ) {  
                fentry.remove();  
                var data = null;  
                try{  
                    data=JSON.parse(e.target.result);  
                }catch(e){  
                    console.log( "读取本地升级文件,数据格式错误!" );  
                    return;  
                }  
                checkUpdateData( data );  
            }  
            reader.readAsText(file);  
        }, function(e){  
            console.log( "读取本地升级文件,获取文件对象失败:"+e.message );  
            fentry.remove();  
        } );  
    }, function(e){  
        // 失败表示文件不存在,从服务器获取升级数据  
        getUpdateData();  
    });  
}

代码是官方update.js里的。用来判断本地版本和服务器版本号的。
我遇到的情况是这样的:

  1. 打开APP后会认为本地没有升级文件(这是对的)
  2. 因为没有升级文件(.json)所以会执行 getUpdateData(); 操作,执行后文件下载到本地,但没有进行把新下载好的文件里的版本号和现在版本号对比,所以不会提示版本需要更新。(在 getUpdateData(); 的最后调用 checkUpdate(); 可以解决)
  3. 再次打开APP后会认为本地有升级文件(.json),所以不会从服务器下载所以会正常提示版本需要更新。
  4. 第三次打开APP后会因找不到升级文件(.json)进行(2)的操作,就是会再次下载文件到本地,但不会进行版本判断。

不理解为什么要这样呀。。

  1. 为什么要判断本地有没有升级文件。
  2. 为什么在“下载服务器上文件”后没有进行版本号判断。
2015-03-30 11:47 负责人:无 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

这只是一种简单的升级检测原型,设计思想是只在进入应用时进行升级判断(而不是在应用运行的过程中,避免用户操作到某个关键流程时提示升级而打断用户的操作)。
当然这种判断逻辑不一定适合于各种应用场景,实际可以根据应用需求进行调整,如在下载完json时进行判断等。

如果要做强制升级则非常简单,判断需要升级后直接弹出确认框并跳转下载地址(或者直接下载安装包提进行安装)

  • 恹心 (作者)

    喔 谢了

    2015-04-07 11:46

恹心

恹心 (作者)

对了。还有强制更新咋弄

该问题目前已经被锁定, 无法添加新回复