以前的框架概述咱們大概描述了登陸模塊的職責,今天咱們在深刻討論一遍 ,今天主要學習下應用的更新:擴展包下載,熱更html
概述連接:http://www.javashuo.com/article/p-nggymcxb-bw.htmlandroid
1.創建網絡鏈接,若是沒有網絡彈出提示框,不然跳轉到步驟2ios
unity判斷網絡鏈接:Application.internetReachability,返回值定義:
NetworkReachability.NotReachable:網絡不可用
NetworkReachability.ReachableViaCarrierDataNetwork:運營商數據網絡可用、
NetworkReachability.ReachableViaLocalAreaNetwork:wifi或有線網絡是可用的
2.擴展包更新。android端須要先檢查擴展包是否須要更新,若是要更新,檢查內存是否足夠,內存不足彈出提示框,不然跳轉步驟3服務器
對android擴展包有興趣的童鞋能夠參考官方文檔:https://developer.android.com/google/play/expansion-files網絡
在下載擴展包前記得判斷下硬盤空間是否足夠框架
android獲取可用磁盤空間以下,也能夠參考博客:https://blog.csdn.net/xiangruyimo122/article/details/73734159,裏面說的更詳細ide
static long GetSpace(File path) {
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getAvailableBlocks();
return totalBlocks * blockSize;
}
ios端獲取可用磁盤空間能夠參考博客:https://blog.csdn.net/xiangruyimo122/article/details/73734159學習
3.解壓擴展包。若是要解壓,檢查內存是否足夠,內存不足彈出提示框,不然跳轉4google
咱們當前的項目壓縮策略採用的是:擴展包使用lzma壓縮,ab包使用lz4壓縮,爲了減小熱更包下載體積,熱更包會把全部的ab包在打包一層lzma壓縮,lz4的ab包unity能夠直接讀取,因此這邊的解壓指的是解壓lzma的包spa
lzma壓縮、解壓縮能夠下載liblzma的庫,也可使用7zip插件進行解壓縮
7zip解壓縮能夠參考雨鬆大神的:https://www.xuanyusong.com/archives/3095
4.熱更。
(1)獲取服務端版本號文件,若是須要強更,跳轉到應用商店,若是須要更新,跳轉下一步,不然跳轉步驟5
跳轉應用商店直接用Application.OpenURL接口打開商店連接就行了
(2)獲取服務端md5文件,對比本地md5,獲取須要更新的ab包列表
md5文件:文件的MD5值是獨一無二的,只有文件發生改變了MD5值纔會改變,當熱更的時候咱們須要知道那些AssetBundle發生了改變,就須要用到這個md5文件,下面是md5的生成:
static string CalcMd5StringFromHash(byte[] bytes)
{
string ret = "";
foreach (byte b in bytes) {
ret += Convert.ToString (b, 16);
}
return ret;
}
public static string GetFileMd5 (string path)
{
if (!File.Exists (path)) {
return "";
}
FileStream stream = File.OpenRead (path);
MD5 md5 = new MD5CryptoServiceProvider ();
byte[] result = md5.ComputeHash (stream);
stream.Close ();
return CalcMd5StringFromHash (result);
}
(3)下載並解壓須要更新的ab包,這邊須要檢查內存是否足夠,內存不足彈出提示框
unity AssetBundle有三種壓縮模式,第一種是不壓縮,這種壓縮方式包體最大,但下載完成後的加載速度也是最快的,第二種是lzma壓縮,也是默認的壓縮格式,這種壓縮格式壓縮率最高,包體最小,可是加載速度最慢,由於要加載整包,第三種是lz4,包體大小和加載速度都還能夠(推薦方式),後面資源管理會詳細解說AssetBundle的打包方式,也能夠自行參考unity API:https://docs.unity3d.com/530/Documentation/Manual/AssetBundleCompression.html
ab包的下載能夠unity的UnityWebRequest接口類,能夠參考https://www.jianshu.com/p/dbd0c1e53600
m_request = UnityWebRequest.Get(m_strUrl);
if (!string.IsNullOrEmpty (m_strPath)) {
// 是寫到文件的狀況開啓斷點續傳
m_downloadHandler = new DownloaderHandler(m_strPath, OnProgress, OnCompleted);
m_request.chunkedTransfer = true;
m_request.disposeDownloadHandlerOnDispose = true;
m_request.SetRequestHeader("Range", "bytes=" + m_downloadHandler.DownedLength + "-");
m_request.downloadHandler = m_downloadHandler;
}
m_request.Send();
5.更新結束。登陸sdk如騰訊帳號,獲取帳號狀態,如封號,彈出提示,不然跳轉步驟6
這塊會在後面SDKModule模塊詳細解說
6.登陸游戲服務器(簡稱遊服),獲取遊戲狀態,如在維護狀態,彈出提示,不然跳轉步驟7
這塊會在網絡模塊解說
7.新手引導(順序跟步驟8能夠對換。看狀況)
8.預加載資源(可無,看狀況),預加載結束跳轉步驟9
9.請求服務端初始化數據(如main場景要顯示內容須要的數據、小紅點等),初始數據都接收完畢跳轉步驟10
10.切換到mian場景,打開主界面
詳細的流程以下圖: