概述
本文主要从以下几点总结下小程序(小游戏)的更新机制:
- 必要字段
- 自动更新逻辑
- 旧版本的清理
- 优化
本文后面阐述统一用“小程序”替代“小程序或小游戏”
必要字段
- 最小可使用的版本
小程序并不一定会去兼容所有的老版本。有些情况下,老版本会直接无法运行,小程序会期望用户必须更新到某个版本。
这里笔者也考虑过使用使用一个字段来表明“是否要强制更新”。但是考虑后发现很有问题,比如有ABC三个版本,B设置“强制更新”,C设置“非强制更新”,这样一旦出现A->C的情况就有问题了。B设置“强制更新”是表明A之前的版本都不兼容了,但是一旦C版本出来后,由于C设置的“非强制更新”,那么A之前的版本又会可以兼容。
- 目前使用的版本
同一时间,可能会存在多个版本。如果用户在正在运行游戏的同时,期望去清理文件,或者下载新版游戏,那么这个参数是必要的。一方面可以保证这个资源的文件不会被清理,另一方面可以保证访问的都是这个版本下的资源,而不会去访问其他版本的资源。
自动更新逻辑
这个做法主要还是为了减少用户的等待时间,提高用户的体验。
主要需要实现以下几点逻辑:
- 在启动时候判断下存在的旧版本是否大于最小支持的版本,如果可用,那么就直接使用旧版本启动。如果不可用或者不存在旧版本,那么就直接下载新版本后再启动。
在确认启动之后,后台去确认下是否是最新版本,如果不是最新版本,那么要后台下载最新版本。
这里要注意:需要记录此时的版本,避免程序进行时去访问多个不同版本的资源。 - 在进入小程序列表或者启动应用的时候,检查一下用户已经使用过的程序,后台将这些程序更新到最新的版本。(由于用户已经使用过,说明很可能会再使用)
旧版本的清理
笔者考虑了三个时机:
- 进入小程序列表或者启动应用的时候,check下已经下载的游戏是否小于游戏最小支持的版本,如果小于,那么就直接清理掉。
- 新版本的游戏下载更新结束之后,判断下是否正在游戏中,如果正在游戏中,说明有可能用户正在玩老版本,因此不能删除。如果不在游戏中,可以直接删除无用的老版本。
- 每局游戏结束后,check下硬盘中的游戏,如果存在多个版本的游戏的话,仅保留最新的那个。(这个对应的场景:玩旧版本游戏时,同时下载新游戏)
优化
启动优化
为了保证资源的准确性,开着这可能每次启动的时候都会去check一下目录,那么最好将启动改成异步触发。
随着用户的使用,目录中的文件会越来越多,那么check的速度就会越来越慢,如果不放到子线程去调用,后面完全可能会造成卡死。
如果启动的时候不去check,这点完全可以不用考虑。但是在android手机上,可能存在“用户主动删除目录文件”等情况。这样的场景下会导致缓存与实际情况不同步,就会有异常。(直接针对这种异常做个处理也是一种解决方式)
流量优化
自动更新的逻辑可以考虑下“wifi与流量”的因素,在用户处于流量的情况下时不要去自动更新。否则长时间自动更新用户可能不玩的游戏,会消耗用户大量的流量,很有可能会让用户删除app。