一、简介:
在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 makemigrations
python manage.py migrate
添加序列化类
在serializers.py中添加序列化类VersionSerializer
# -*- coding:utf-8 -*-
from rest_framework import serializers
from usermodels.models import Version
class VersionSerializer(serializers.ModelSerializer):
class Meta:
model = Version
fields = ['versionCode', 'versionName', 'apkUrl', 'updateTitle', 'changeLog']
在路由层添加相关路由
urlpatterns = [
''''''
path("GetVersionCode", views.GetVersionCode),
......
]
在试图层添加相关代码
from django.http import JsonResponse
from rest_framework.decorators import api_view
from django.views.decorators.csrf import csrf_exempt
from usermodels.models import Version
from usermodels.serializers import VersionSerializer
from 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": "更新内容"
}