U8SDK——渠道SDK的动态升级(版本区分)

作者: 分类: U8SDK 发布时间: 2015-06-18 09:56 61条评论

最近有童鞋和我谈到了渠道SDK的版本更新问题,也就是在实际SDK接入工程中,可能会遇到以下两种情况:

1、SDK打包可否交给运营来做,现在的模式下,交给运营来做,很不方便。因为某个渠道SDK有问题,几乎涉及到代码的修改,而修改了代码,就要重新打生成jar包,然后更新打包工具,这样研发和运营在协调上,很耗时间。

2、多个游戏使用u8sdk时,有一个版本区分的问题。比如公司当前有两款游戏,A已经上线,并且接入了UC的3.5版本;现在B游戏也要开始接UC的渠道,
但是目前UC的渠道SDK最新版本是4.0,而且关键是SDK的登录认证和支付回调发生了变化,和之前的3.5版本不兼容。但是A游戏,暂时还不能升级SDK,必须等到下次游戏更新的时候才能同时升级UC的SDK那么这个时候,
U8Server这边就要区分UC SDK的版本,针对3.5版本和4.0版本各有一个登录认证,和支付回调的版本这个时候,u8server怎么来区分当前游戏要采用3.5还是4.0的版本针对第一个问题,
需要将渠道SDK的接入开发工作和运营打包工具能更好的解开耦合,更多地是需要一个更好的流程。

那么,这里,我们可以对各个渠道SDK进行版本控制,并且实现动态更新机制。

1)所有接好的渠道SDK,按照某种格式存放在服务器上,同时有一个版本控制文件,里面罗列服务器上当前所有的渠道SDK名称和当前最新的版本

2)打包工具运行的时候,先去服务器上获取版本控制文件,和本地上一次获取到的版本控制文件比对,从而获得新增的渠道和需要更新的渠道

3)然后可以手动或者自动 选择更新哪些渠道SDKPS:对于U8SDK,目前增值服务中,提供不同的版本,而且每个购买者,选择的渠道SDK可能各不相同。购买者选购的渠道SDK,我们这边升级的时候为了使得他们那边的选购的那些渠道SDK可以自动更新,而没有选购的渠道SDK则不会更新到,我们可以采用用户管理和上面提到的版本控制来一起完成。服务器上需要记录A童鞋的帐号和选购的渠道SDK。然后A童鞋在运行打包工具的时候,传用户名和密码等信息到服务器,服务器查找A童鞋选购的渠道SDK,然后生成一份版本控制文件,下发给A童鞋的打包工具。(仅仅设想,还没实现)

针对第二个问题,也就是u8server上可能同一个渠道SDK,存在多个版本,而客户端在登录认证的时候,u8server需要知道当前使用哪个版本。因为u8server是统一的用户登录中心和支付中心,多个游戏使用同一个u8server。

所以,我们需要一个各个渠道SDK和u8server之间的一个版本约定下面,先在u8sdk的打包工具中,增加两个地方的版本号,分别为了后面实现上面说的两个问题打一个基础。在每个渠道SDK的配置目录下,之前我们是有一个sdk_config.xml(有的童鞋那里可能叫config.xml),现在,在这个文件中,我们增加一个版本号这个版本号主要用于渠道SDK的版本检查,来做渠道SDK的动态更新机制。
 

 

PS:versionCode用来和资源服务器上检查版本更新使用的,每次版本更新,自然增长即可。versionName仅仅标注当前对应的渠道SDK版本。显示使用然后,我们需要修改下打包脚本,增加对version的解析:config_utils.py的loadChannelUserConfig方法,需要在paramNodes = configNode.find(“params”)之前增加
 

 

这样,后面做打包工具中渠道SDK的更新,我们就利用这里sdkVersionCode来实现。这里先解析到channel对象中,后面真正实现的时候,我们可以根据远程获取到的版本控制文件,然后从各个SDK的配置目录中解析version来,判断是否需要更新。然后,在游戏支持的渠道配置文件(config.xml)中的channels/channel节点中也增加一个版本号:
 

 

PS:versionCode在登录认证的时候,传到u8server,u8server根据versionCode去选择当前使用渠道SDK对应哪个版本的登录认证方式。versionName仅仅是给人看的,不做其他用途。同样地,我们需要修改下打包脚本,增加对version的解析:
 

 

然后,我们需要将sdkLogicVersionCode写入到assets目录下的developer_config.properties中,所以,在config_utils.py中的writeDeveloperProperties方法中,在proStr = proStr + “U8_Channel=” + channel[‘id’] + “\n”之前,加上
 

 

上面这个是python3.4下的。如果你当前使用的是python2.7。那么需要将上面的代码换为:
 

 

最后,我们需要在U8SDK抽象层中来读取U8_SDK_VERSION_CODE。所以在U8SDK单例类中,我们增加一个方法:

 

这样,我们就能在抽象层中,获取到当前渠道SDK的版本号了,然后在渠道SDK登录成功,接着向U8Server进行登录认证的时候,可以把这个versionCode传过去,u8server根据该versionCode区分当前使用的渠道SDK版本。如果你的u8sdk里有com.u8.sdk.verify.U8Verify这个类,那么在这里加一个参数即可:
 

 

PS:sdkVersionCode不参与md5签名。OK,到这里,我们的基础工作就算完成了。后面我们会详细讲解如何来实现渠道SDK的动态更新

本文出自 U8SDK技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uustory.com/?p=1817

评论功能已经关闭,请加入U8SDK技术群进行讨论和咨询:207609068
Ɣ回顶部
U8SDK技术群 x
技术同学请加入
点击加入