Unity3d:GCloud SDK接入记录,APK更新,资源更新,区服导航,网络连接

启动更新

版本线

在这里插入图片描述

app版本1,只会更新app版本1下的资源版本线
程序更新只走程序版本线,例如 2.0.0.0 的程序版本检查更新时,服务器将返回 3.0.0.0 的可选更新
资源更新只走所在程序版本下的资源线,例如 2.1.0.0 的资源版本检查更新时,服务器将返回 2.3.0.0 的强制更新,而不会返回 3.X 的版本,尽管 3.X 的版本比 2.1.0.0 高

强制更新

如果app版本号未找到或者app当前版本为普通不可用,走强制更新

可选更新

举例:用户自定义json定义可支持版本,例如手机上app版本是4.7.0.282,访问到服务器上最新版本是8.0.0.0,在optionalUpdateVersions包含4.7.0.282执行可选
在这里插入图片描述

审核版本

审核版本用于新版本提交渠道商(如 Apple App Store)审核时使用,其意义有:
审核版本对外网用户不可见,即外网低版本不会升级到高版本的审核版本
渠道商体验时不会被回退到外网最高版本
注意事项:

  1. 给AppStore是审核版本,启动更新时不会在正常外网正在运营版本找版本线
  2. 过了审核,在GCloud后台中,可以选择把审核版本变为正式版本,后续更新审核版本走运营版本线

灰度版本

灰度版本即在版本发布时,先选取小规模用户测试新版本,验证后再全量发布。
采用区服策略:用区服id来判断用户是否是灰度用户,客户端上报用户选择的区服id,配置的区服id就是灰度条件,在这个集合内就是灰度用户。
在经历登录前更新后,玩家选择灰度服上线,再进行一次更新检查,请求信息时带上区服id,用户openID,得到灰度版本线信息,再选择更新

客户端更新流程

在这里插入图片描述

启动升级:游戏启动第一个场景,登录之前,主要的升级阶段。
灰度升级:登录(选区)之后,辅助升级阶段,经过此升级,指定灰度用户可以使用特定的游戏版本

启动更新逻辑

  1. 首包拷贝:streamingAssetsPath目录移动到persistentDataPath,要移动的文件根据ABFileRelativePaths确定。
    Q:什么时候触发首包拷贝
    A:
1.VersionCode.bytes文件,在每次自动转表的时候自增1(构建版本强制要求使用自动转表工具)
2.首包拷贝的含义解释:安装包第一次安装时,资源都在应用空间,需要将资源拷贝到用户空间
3. 这里主要拷贝的是打好的AssetBundle。VersionCode在新安装的版本中间是一个不重复的数值(如1340,说明构建了1340次)
4.在第一次安装时,CurrentVersion的文件是不存在的,而LatestVersion是以Resources.Load的方式读的Assets/Resource下的文件
5.所以CurrentVersion和LatestVersion不一致而导致首包拷贝,拷贝结束后保存了一份CurrentVersion与LatestVersion一致
  1. 进行登录前app更新,为普通更新GCloudUpdateVersion。更新时要带上当前app版本号,为IIPSUpdateConfig.GetVersionString()(),编辑器下写死一个app版本测试,移动端从apk或者ipa里配置读版本号,这样每次更新了app,确保版本号变动了

  2. GCloudUpdateVersion中OnNoticeNewVersionInfo得到版本信息。强制或者可选,可选更新规则
    按顺序依次判定
    当前比服务器低,强制更新为true
    optionalUpdateVersions,可选更新列表包含当前app版本,为可选更新
    无论配置了什么类型的更新,存在于ignoreUpdateVersions中的版本忽略更新

  3. 如果ios端跳转app链接,如果apk端下载完整或者增量apk包,下载完后拉起安装InstallApk

  4. GCloudUpdateVersion流程结束,进入资源更新流程GCloudUpdateResource。按照app更新后的app版本号,(如果未选择更新,是之前老app版本号;更新后是新的版本号),再加上资源版号IIPSUpdateConfig.StrResVersion(这个文件首次安装没有,会随着第一次更新下载后,更新文件,默认第一次请求会以"0.0.1.0"请求)

  5. GCloudUpdateResource中OnNoticeNewVersionInfo,如果GCloud后台用户描述字符串包含OptionalUpdate,为可选更新。选择更新后,下载zip,然后会解压,GCloud内部实现

  6. GCloudUpdateResource流程结束,进入到用户选服登录

  7. 如果不是灰度服,直接进入游戏。如果是灰度服

进行GCloudCheckVersion,灰度检查后如果选择更新,拉回到GCloudUpdateVersion,再带上区服id,用户openID进行灰度更新

区服导航

● 区服导航:区服导航,树状结构
● 区服状态:区服的运行状态(维护、良好、拥挤、爆满等)
● 区服标签:区服的一些标签(新、热、荐等)
区服状态上报:据服务器运行时在线人数和最大支持在线数动态调整区服状态。
规则定义
角色信息上报(Acc服务):要显示为玩家最近登录的区服和角色信息
在这里插入图片描述

在这里插入图片描述

流程

GCloudTdirSelector

  1. 初始化配置,分为debug,preview,release3种服,每种服还分平台SvrRegion,初始化时还要带上用户OpenID,为了拉取到每个服上,角色信息
    public enum SvrRegion
    {
        ANDROID_WX = 1,
        IOS_WX,
        ANDROID_QQ,
        IOS_QQ,
        IOS_GUEST,
        TEST,
    }
  1. 拉取树RequestTdirAsync,得到每个叶子节点信息,即服务器信息

网络连接

  1. 初始化
ConnectorInitInfo connectInfo = new ConnectorInitInfo();
            connectInfo.MaxBufferSize = 102400;//(GCloudSDK2.0.7 or higher, it is recommended to use MaxSendMessageSize and MaxRecvMessageSize respectively)
            connectInfo.MaxSendMessageSize = 102400;
            connectInfo.MaxRecvMessageSize = 102400;
            connectInfo.EncMethod = EncryptMethod.Aes;
            connectInfo.KeyMakingMethod = KeyMaking.Server;
            //connectInfo.DH = "RawDH";
            connectInfo.Timeout = 10;
            connectInfo.ClearBufferWhenReconnect = false;
            _connector.Initialize(connectInfo);

Q:MaxBufferSize为什么设置这么大
A:如果网络接收是放在游戏主线程中;在登录进入场景时,由于此时帧率降低(Update的执行频率下降),且登录收发网络信息较多(造成网络缓冲区一直满阻塞,无法继续写入)
2. 事件监听

_connector.ConnectEvent += apolloConnectCallback;
               _connector.RelayConnectEvent += apolloReconnectCallback;
               _connector.DisconnectEvent += apolloDisconnectCallback;
               _connector.StateChangedEvent += OnStateChanged;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四夕立羽

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值