啟動更新
版本線
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)稽核時使用,其意義有:
稽核版本對外網使用者不可見,即外網低版本不會更新到高版本的稽核版本
管道商體驗時不會被回退到外網最高版本
注意事項:
- 給AppStore是稽核版本,啟動更新時不會在正常外網正在營運版本找版本線
- 過了稽核,在GCloud背景中,可以選擇把稽核版本變為正式版本,後續更新稽核版本走營運版本線
灰階版本
灰階版本即在版本釋出時,先選取小規模使用者測試新版本,驗證後再全量釋出。
采用區服政策:用區服id來判斷使用者是否是灰階使用者,用戶端上報使用者選擇的區服id,配置的區服id就是灰階條件,在這個集合内就是灰階使用者。
在經曆登入前更新後,玩家選擇灰階服上線,再進行一次更新檢查,請求資訊時帶上區服id,使用者openID,得到灰階版本線資訊,再選擇更新
用戶端更新流程
啟動更新:遊戲啟動第一個場景,登入之前,主要的更新階段。
灰階更新:登入(選區)之後,輔助更新階段,經過此更新,指定灰階使用者可以使用特定的遊戲版本
啟動更新邏輯
-
首包拷貝: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一緻
- 進行登入前app更新,為普通更新GCloudUpdateVersion。更新時要帶上目前app版本号,為IIPSUpdateConfig.GetVersionString()(),編輯器下寫死一個app版本測試,移動端從apk或者ipa裡配置讀版本号,這樣每次更新了app,確定版本号變動了
-
GCloudUpdateVersion中OnNoticeNewVersionInfo得到版本資訊。強制或者可選,可選更新規則
按順序依次判定
目前比伺服器低,強制更新為true
optionalUpdateVersions,可選更新清單包含目前app版本,為可選更新
無論配置了什麼類型的更新,存在于ignoreUpdateVersions中的版本忽略更新
- 如果ios端跳轉app連結,如果apk端下載下傳完整或者增量apk包,下載下傳完後拉起安裝InstallApk
- GCloudUpdateVersion流程結束,進入資源更新流程GCloudUpdateResource。按照app更新後的app版本号,(如果未選擇更新,是之前老app版本号;更新後是新的版本号),再加上資源版号IIPSUpdateConfig.StrResVersion(這個檔案首次安裝沒有,會随着第一次更新下載下傳後,更新檔案,預設第一次請求會以"0.0.1.0"請求)
- GCloudUpdateResource中OnNoticeNewVersionInfo,如果GCloud背景使用者描述字元串包含OptionalUpdate,為可選更新。選擇更新後,下載下傳zip,然後會解壓,GCloud内部實作
- GCloudUpdateResource流程結束,進入到使用者選服登入
- 如果不是灰階服,直接進入遊戲。如果是灰階服
進行GCloudCheckVersion,灰階檢查後如果選擇更新,拉回到GCloudUpdateVersion,再帶上區服id,使用者openID進行灰階更新
區服導航
● 區服導航:區服導航,樹狀結構
● 區服狀态:區服的運作狀态(維護、良好、擁擠、爆滿等)
● 區服标簽:區服的一些标簽(新、熱、薦等)
區服狀态上報:據伺服器運作時線上人數和最大支援線上數動态調整區服狀态。
規則定義
角色資訊上報(Acc服務):要顯示為玩家最近登入的區服和角色資訊
流程
- 初始化配置,分為debug,preview,release3種服,每種服還分平台SvrRegion,初始化時還要帶上使用者OpenID,為了拉取到每個服上,角色資訊
public enum SvrRegion
{
ANDROID_WX = 1,
IOS_WX,
ANDROID_QQ,
IOS_QQ,
IOS_GUEST,
TEST,
}
- 拉取樹RequestTdirAsync,得到每個葉子節點資訊,即伺服器資訊
網絡連接配接
- 初始化
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);
_connector.ConnectEvent += apolloConnectCallback;
_connector.RelayConnectEvent += apolloReconnectCallback;
_connector.DisconnectEvent += apolloDisconnectCallback;
_connector.StateChangedEvent += OnStateChanged;