一、简介:
在APP开发中,应用上线后公司肯定后期会对应用进行维护对一些Bug修复,这种情况就需要版本迭代了。检测到服务器版本比本地手机版本高的时候,手机会询问用户是否要下载最新的app,然后下载apk下来,然后进行安装。
备注:
也可以用第三方服务,比如腾讯的Bugly、Bmob云服务等,也挺方便的,不过apk要上传到第三方的平台上,如果公司要求在自己平台上,就只能自己写了。
二、实现步骤
每次启动应用我们就获取放在服务器上的版本信息,我们获取到版本号与当前应用的版本好进行对比,这样我们就可以知道应用是否更新了,版本信息一般包含如下内容:
{"versionCode": "2", //版本号"versionName": "2.0", //版本名称//服务器上最新版本的app的下载地址"apkUrl": "http://oh0vbg8a6.bkt.clouddn.com/app-debug.apk","updateTitle": "更新提示" ,"changeLog":"1.修复xxx Bug;2.更新了某某UI界面."}
具体实现如下:
数据模型搭建
class Version(models.Model):versionCode = models.FloatField(verbose_name="版本号", default=0.0)versionName = models.CharField(verbose_name="版本名称", default="版本名称", max_length=100)apkUrl = models.CharField(verbose_name='下载地址', default="下载地址", max_length=200)updateTitle = models.CharField(verbose_name="更新提示", default="更新提示", max_length=100)changeLog = models.TextField(verbose_name="更新内容", default="更新内容", max_length=300)class Meta:ordering = ["-versionCode"]verbose_name = "版本管理"db_table = "VersionTable"
并进行数据迁移
python manage.py makemigrationspython manage.py migrate
添加序列化类
在serializers.py中添加序列化类VersionSerializer
# -*- coding:utf-8 -*-from rest_framework import serializersfrom usermodels.models import Versionclass VersionSerializer(serializers.ModelSerializer):class Meta:model = Versionfields = ['versionCode', 'versionName', 'apkUrl', 'updateTitle', 'changeLog']
在路由层添加相关路由
urlpatterns = [''''''path("GetVersionCode", views.GetVersionCode),......]
在试图层添加相关代码
from django.http import JsonResponsefrom rest_framework.decorators import api_viewfrom django.views.decorators.csrf import csrf_exemptfrom usermodels.models import Versionfrom usermodels.serializers import VersionSerializerfrom rest_framework import status@csrf_exempt@api_view(['GET'])def GetVersionCode(request):"""得到最新的版本,前端可以用于判断是否是最新版本(及和用户的版本号进行比较,如果不形同,则进行更新)"""try:Versions = Version.objects.get(id=Version.objects.all().order_by('-id').first().id)except Version.DoesNotExist:return JsonResponse({}, safe=False, status=status.HTTP_404_NOT_FOUND)return JsonResponse(VersionSerializer(Versions, many=False).data, safe=False, status=status.HTTP_200_OK)
接口返回举例
{"versionCode": 1,"versionName": "1.3","apkUrl": "https://www.jianshu.com/p/59ecd2c110ad","updateTitle": "更新信息","changeLog": "更新内容"}

