6d3510ec1c32c26c4d48dcaa75ea2147.jpg

一、简介:

在APP开发中,应用上线后公司肯定后期会对应用进行维护对一些Bug修复,这种情况就需要版本迭代了。检测到服务器版本比本地手机版本高的时候,手机会询问用户是否要下载最新的app,然后下载apk下来,然后进行安装。
备注:
也可以用第三方服务,比如腾讯的Bugly、Bmob云服务等,也挺方便的,不过apk要上传到第三方的平台上,如果公司要求在自己平台上,就只能自己写了。


二、实现步骤

每次启动应用我们就获取放在服务器上的版本信息,我们获取到版本号与当前应用的版本好进行对比,这样我们就可以知道应用是否更新了,版本信息一般包含如下内容:

  1. {
  2. "versionCode": "2", //版本号
  3. "versionName": "2.0", //版本名称
  4. //服务器上最新版本的app的下载地址
  5. "apkUrl": "http://oh0vbg8a6.bkt.clouddn.com/app-debug.apk",
  6. "updateTitle": "更新提示" ,
  7. "changeLog":"1.修复xxx Bug;2.更新了某某UI界面."
  8. }

具体实现如下:

数据模型搭建

  1. class Version(models.Model):
  2. versionCode = models.FloatField(verbose_name="版本号", default=0.0)
  3. versionName = models.CharField(verbose_name="版本名称", default="版本名称", max_length=100)
  4. apkUrl = models.CharField(verbose_name='下载地址', default="下载地址", max_length=200)
  5. updateTitle = models.CharField(verbose_name="更新提示", default="更新提示", max_length=100)
  6. changeLog = models.TextField(verbose_name="更新内容", default="更新内容", max_length=300)
  7. class Meta:
  8. ordering = ["-versionCode"]
  9. verbose_name = "版本管理"
  10. db_table = "VersionTable"

并进行数据迁移

  1. python manage.py makemigrations
  2. python manage.py migrate

添加序列化类

在serializers.py中添加序列化类VersionSerializer

  1. # -*- coding:utf-8 -*-
  2. from rest_framework import serializers
  3. from usermodels.models import Version
  4. class VersionSerializer(serializers.ModelSerializer):
  5. class Meta:
  6. model = Version
  7. fields = ['versionCode', 'versionName', 'apkUrl', 'updateTitle', 'changeLog']

在路由层添加相关路由

  1. urlpatterns = [
  2. ''''''
  3. path("GetVersionCode", views.GetVersionCode),
  4. ......
  5. ]

在试图层添加相关代码

  1. from django.http import JsonResponse
  2. from rest_framework.decorators import api_view
  3. from django.views.decorators.csrf import csrf_exempt
  4. from usermodels.models import Version
  5. from usermodels.serializers import VersionSerializer
  6. from rest_framework import status
  7. @csrf_exempt
  8. @api_view(['GET'])
  9. def GetVersionCode(request):
  10. """
  11. 得到最新的版本,前端可以用于判断是否是最新版本(及和用户的版本号进行比较,如果不形同,则进行更新)
  12. """
  13. try:
  14. Versions = Version.objects.get(id=Version.objects.all().order_by('-id').first().id)
  15. except Version.DoesNotExist:
  16. return JsonResponse({}, safe=False, status=status.HTTP_404_NOT_FOUND)
  17. return JsonResponse(VersionSerializer(Versions, many=False).data, safe=False, status=status.HTTP_200_OK)

接口返回举例

  1. {
  2. "versionCode": 1,
  3. "versionName": "1.3",
  4. "apkUrl": "https://www.jianshu.com/p/59ecd2c110ad",
  5. "updateTitle": "更新信息",
  6. "changeLog": "更新内容"
  7. }