自家之室友——大学小江

晖已经升起到了空中中,抚摸着正懒洋洋的因在润溪湖畔的宿舍楼。上午九时,楼栋中空空如为。小江缓缓推开被子,在铺上睡眼惺忪的盖了会面,才从上铺爬下去,开始了平等龙之存。

一般景象下,APP中会起恢宏的接口,再增长版本的扭转,接口的晋级,可能会见衍生出不少独稍有距离的接口,这个时接口如果保护的糟糕,后止会乱为同样锅子粥,客户端不同版本采用不同之接口名(xxxv1,xxxv2,xxxv3…..)。
一部分局每次发布完APP,就劫持用户更新。不推荐这样,用户体验最好差。
即使是挟持更新,在苹果对期间,新的APP接口和老的接口也要能而且以。

好持久战

小江是南昌大学广告标准10级的学习者,老家当海南,不过到就所江西首先学就读后,似乎同其他同学没有啊不同。

九点也不到底尽晚,起床是均等庙会持久的战役。有的同学会于早8点交锋到11点,最后没有战胜自己的肚子而被迫起床。

持久战的其它一个见是自从早6点大抵届中午11点基本上还有人不断起床,其中以上午7点差不多与9点差不多就半端上课前面之居多,其他时间有时候会发诈尸般的起床,洗漱声在荒漠的楼栋中飞舞。

小江的大好时连无定点,这只要取决于他什么时候上课。如果是星期,那么所有寝室一般都见面早饭午饭一样片吃了。

校园的朝隔三差五来看这般的景,每个人手里拿在早餐,奔于各级座教学楼,早饭的香便四处弥漫了。

小江曾不吃早餐的,套用他的口头语的句式:“不吃又非见面怀孕!”但自听说生个同学不吃早餐得矣胃癌的事情后,他也初步吃早餐了,但却同时感慨道除了馒头之类的没得选了。

拍卖措施

网瘾套餐

小江以及他的朋友等欣赏彼此称“网瘾少年”,未必真是这样,但却较符合实际——他们时常打网络游戏。

所以你时不时能收看小河流卧在处理器面前,双眼睛紧盯在电脑屏幕,左手操作键盘,右手紧握鼠标。伴随着电脑传的阵阵响声,蓝色的只在外的镜片上闪光,眼睛从未离开屏幕。

偶你见面发觉他身旁放着白之塑料袋,里面放正空的一次性饭盒,往往是网瘾套餐的僵尸。

所谓网瘾套餐,不过大凡饭菜打包而已,既然如此,那为什么而称之为网瘾套餐为?

网瘾套餐,就是足以呢打网络游戏节约时间之打包饭菜。网瘾少年,名不虚传。

自从小学五年级至高校第二年级,小江的网游从未中断过。现在异除了讲解、吃饭、睡觉,其他时间基本上还是打网游了,网络游戏的水平因此外自己的语来说即使是“比较高端了”。

同样、 客户端做配合,接口不用做配合
  1. APP强制更新(不建议)
    接口URL:api.xxx.com/v1.0/xxxx.java
    接口的URL中在版本号,如达到:v1.0。
    以灰度服务器 部署正对中的
    接口版本(如:v1.1)。等对通过后,将始终版的APP设置强制更新,然后将线上服务器重新部署上风行的代码,再失去丢灰度服务器。这样APP接口全部看正式的线上服务器。

  2. 热更新
    紧的多少求可以就此热更新,大之需求建议要用原生的代码,因为若用热更新修改完毕(用JS或Lua),最后还要当原生代码里窜。
    网游用热更新的比较多,因为网游的APP太要命,不可能加个小关卡
    就要求用户更下载,并且游戏更新比柜级APP更累,用热更新可以不停新加关卡、场景、活动推广。

  3. React Native 和Weex
    从不接触了 可以团结了解

广告大师

喜爱嬉水网游的小江连无耽误学习,他协调为说成还不错,人送PS大师的称谓。上学期要交色彩作业,全班30基本上个体每人交8帧作品,但老师近乎无情之严厉是全班仅透过8幅,其中便闹小江的鲜帧。

可是小江自己说上课并无认真,有时上课会思忖人生。

诚如看来,沉迷于网络游戏的学习者广泛学习不好,小江将这原理打破了。或者其他一个说法更是精确,小江并无沉溺于网络游戏!

广告班课不多,但作业可多。上学期他俩便不时熬夜做作业,小江也一大早起来赶作业,这和星期沉睡的微江判若两口。

小江走路时总怪“淡定”,他随身写在很多学生的影子,但他自家,又发温馨的奇。

亚、 服务端做版本兼容
  1. App 请求服务器接口的时节带走接口版本字段
    服务器根据接口版本调用相应的不二法门,每个接口逻辑里 加if
    判断(不引进)
    接口URL:api.xxx.com/api?version=v1&..

if (version == ‘1.5.0’) {
  //do_something
} else if (version ==‘1.4.0') {
  //do_something
}

差版本的逻辑都当一个方式里,在于容易造成代码乱,不便利保护。

  1. 一个本子一个文书
    一定给每个接口版本都是一个单身的花色。放到服务器的独门文件夹里。使用什么版本接口写及客户端配置中或经过一个接口获取就执行。
    例:
    1.0版本:http://x.x.x.x:xx/xxapi/v1.0/xxx
    1.2版本:http://x.x.x.x:xx/xxapi/v1.2/xxx
    文本夹位置:Controller/V1.0/
    —————–/xxxx.php
    文件夹位置:Controller/V1.2/
    —————–/xxxx.php
    优点:版本逻辑分开维护。看url就能理解哪个版本。删除多余版本
    不用修改代码。
    缺点:同个接口不同版本 文件是再次的。并且
    如果起个接口前几乎版本虽来题目,一直留到今天,就待改好几模仿一样的代码。

  2. token代替版本号

几个要点:  
a.
客户端发送请求时token是固定不变的,使用token间接的标记请求的接口版本。  
b.
server保存了token和对应接口的版本号,请求来了之后会先根据这个寻找对应的接口版本。  
c.
每个目录对应一个版本,根据请求的接口读取对应目录下的接口配置文件,找到最终要执行的具体接口。  
例如:[http://xxxx.xxxx.com/module/controller/list?token=6918b5e0567c7d47314c10ed413e3f95](https://link.jianshu.com?t=http://xxxx.xxxx.com/module/controller/list?token=6918b5e0567c7d47314c10ed413e3f95)
这个请求最终会打到listv2这个接口。  
d.
这样就可以在服务端灵活的配置接口了,客户端只要每次请求的时候带上默认的token参数,就可以得到自己想要的了,完全不需要关心版本的问题。
  1. 接轨的艺术
    ControllerV1
    ControllerV2 extends ControllerV1
    采取继承的方式,既可利用之前的接口代码,又好运用override的法子修改部分接口的兑现。
    短:如果达到个本子(也就是父类)修改了代码,就会潜移默化后面的具备版本。

  2. 差版本采用不同之域名/不同服务器
    不等版本不同分支,部署在不同的服务器上。如果某个版本用非顶了,直接结果服务就好了。
    像我本之API要起1.x腾至非兼容的2.0版了,那即便给当下的公布分支打独Tag。等啊天1.x版之API需要fix
    bug,就会很粗略地打夫Tag切一个1.x的道岔出fix
    bug后开展测试发布,而且这分不会见联合及另外分支,所以不见面影响其它版本。
    亮点:部署的长河未会见潜移默化其他版本api的施用,并且可以减轻单台服务器的顶。
    症结:如果2.0乎来同一bug的语,也使于2.0分叉出上转一周。如果版本众多来说,工作量特别。所以啊,一般不见面以宣布片单以上之本子。另外,如果要配合了多的本,服务器也要足够多才行。同时,因为一直版本的人数因此之少,也便是有的服务器访问量很少,有的服务器访问量很多。不克确实的负荷均衡,浪费了服务器资源。

末段做生版本采用监督。当观察到持有用户都动初本子的客户端的时候,并维持一段时间的时节。放弃对老版本的掩护,继而下丢老版本的资源。


本更新

开启APP->请求初始化接口->检测是否需要创新? 否->首页Or
是->更新

当初始化接口的下,需要客户端发送几乎个数据:

app_id            客户端id,比如: 1,安卓手机 2,iphone手机

version_id        大版本号id

version_mini      小版本号id

did               用户客户端信息(客户端工程师会获取这个数据)

encrypt_did       did加密后的字符串(did 加上 APP设备数据表中的key,然后md5)

数据库方面:需要少摆表。一摆是记录升级版本信息的表,记录在设备的id,版本号信息,下载地址等。另外一摆设表是记录的配备的信息,比如安卓手机的信,版本信息表中生一个外键app_id,关联的即使是设备信息表的主键。

  //设备信息表,记录了各种客户端的信息
    CREATE TABLE IF NOT EXISTS `app_table` (
      `app_id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `name` varchar(10) NOT NULL COMMENT '设备名称',
      `is_encryption` tinyint(1) NOT NULL COMMENT '是否加密',
      `key` varchar(10) NOT NULL COMMENT '加密key',
      `image_size` text NOT NULL COMMENT '按照json来存储',
      `create_time` int(11) NOT NULL COMMENT '添加时间',
      `update_time` int(11) NOT NULL COMMENT '修改时间',
      `status` tinyint(1) NOT NULL COMMENT '状态 1正常0删除',
      PRIMARY KEY (`app_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='app设备表' AUTO_INCREMENT=2 ;

    //版本升级信息表,存放了各种版本的信息
    CREATE TABLE IF NOT EXISTS `version_upgrade` (
      `id` smallint(4) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `app_id` smallint(4) NOT NULL COMMENT '客户端设备id',
      `version_id` smallint(4) NOT NULL COMMENT '大版本号id',
      `version_mini` mediumint(8) NOT NULL COMMENT '小版本号',
      `version_code` varchar(10) NOT NULL COMMENT '版本标识1.2',
      `type` tinyint(4) NOT NULL COMMENT '是否升级1是0否',
      `apk_url` varchar(255) NOT NULL COMMENT '下载链接地址',
      `upgrade_point` varchar(255) NOT NULL COMMENT '升级提示',
      `status` tinyint(4) NOT NULL,
      `create_time` int(11) NOT NULL COMMENT '添加时间',
      `update_time` int(11) NOT NULL COMMENT '修改时间',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='软件升级信息表' AUTO_INCREMENT=2 ;

经过app的版本信息与服务器信息比,看是不是要进行版本升级

参考文章
http://www.cnblogs.com/dahe007/p/6255401.html

https://my.oschina.net/woshixiaomayi/blog/519783

发表评论

电子邮件地址不会被公开。 必填项已用*标注