private void NotifyUpdateEnd() { EventHelper.DoEvent(EventHelper.EVENT_UPDATE_END, this); }
// 出现大版本更新,点击跳转到更新页面 private void OnStoreUpdateCallback() { EventHelper.DoEvent(EventHelper.URL_STORE_UPDATE, this); }
private IEnumerator HotUpdate() { // 0.读取更新配置信息 yield return(StartCoroutine(LoadUpdateConfig(GameConfig.PERSISTENT_URL + "media/update.json"))); if (_updateConfig == null) { yield return(StartCoroutine(LoadUpdateConfig(GameConfig.DATA_URL + "media/update.json"))); if (_updateConfig == null) { // 读取失败直接关闭游戏 Debug.LogError("Invalid update config. Application halt!"); Application.Quit(); yield break; } } SetProgressInfo(0, GetText(MESSAGE_CHECKING)); // 1.加载本地文件索引 yield return(StartCoroutine(AssetIndexData.Instance().Load(this))); GameConfig.LANG = _updateConfig.lang; GameConfig.VERSION = AssetIndexData.Instance().GetVersionString(); UpdateLogo(); // 是否跳过更新 if (_skipUpdate) { _updateStatus = STATUS_COMPLETE; yield break; } // 2.读取最新更新配置文件 yield return(StartCoroutine(DownloadUpdateSetting())); if (_updateSetting == null) { // 是否跳过更新 if (_skipUpdate) { _updateStatus = STATUS_COMPLETE; yield break; } ShowNoticeDialog(GetText(MESSAGE_NETWORK_ERROR), BUTTON_RETRY, this.OnRetryCallback); yield break; } int verNow = AssetIndexData.Instance().GetVersion(); int vStatus = _updateSetting.GetStatus(verNow, GameConfig.PLATFORM); GameConfig.BETA = (vStatus == VersionStatus.STATUS_BETA); GameConfig.REVIEW = (vStatus == VersionStatus.STATUS_REVIEW || vStatus == VersionStatus.STATUS_GOV); GameConfig.SERVER_LIST_URL = _updateSetting.svrUrl + "?s=" + vStatus.ToString() + "&p=" + GameConfig.PLATFORM; GameConfig.GIFT_CODE_URL = _updateSetting.giftUrl; GameConfig.GAME_EVENT_URL = _updateSetting.eventUrl; // 通知游戏启动 EventHelper.DoEvent(EventHelper.EVENT_STARTUP, this); Debug.Log("HotUpdate: " + GameConfig.LANG + " " + GameConfig.VERSION + " " + GameConfig.PLATFORM + " BETA=" + GameConfig.BETA + " REVIEW=" + GameConfig.REVIEW); // 是否跳过更新 if (_skipUpdate) { _updateStatus = STATUS_COMPLETE; NotifyUpdateEnd(); yield break; } // 3.检查最新版本号 int verLatest = _updateSetting.GetLastVersion(verNow, GameConfig.PLATFORM); if (verLatest == 0) { // 找不到可更新的版本,跳过更新 _updateStatus = STATUS_COMPLETE; NotifyUpdateEnd(); yield break; } _latestVersion = VersionHelper.CodeToString(verLatest); // 4.下载最新的文件索引 yield return(StartCoroutine(DownloadLatestIndex())); if (_latest == null) { ShowNoticeDialog(GetText(MESSAGE_NETWORK_ERROR), BUTTON_RETRY, this.OnRetryCallback); yield break; } // 5.比较文件数据生成下载列表 if (!CheckDiff()) { // 出现大版本更新,提示重新安装最新版 ShowNoticeDialog(GetText(MESSAGE_NOT_COMPATIBLE), BUTTON_UPDATE, this.OnStoreUpdateCallback, false); yield break; } // 无需更新, 直接写入最新版本号 if (_updateList == null || _updateList.Count == 0) { AssetIndexData.Instance().GetIndex().SetVersion(_latest.GetVersion()); AssetIndexData.Instance().Save(); GameConfig.VERSION = AssetIndexData.Instance().GetVersionString(); SetProgressInfo(0, GetText(MESSAGE_COMPLETE)); // 不设置到100%,不想让玩家看到进度条在加载时又回到0闪烁 _updateStatus = STATUS_COMPLETE; NotifyUpdateEnd(); yield break; } // 如果是Wifi环境,无需弹窗确认,直接开始下载 if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork) { _confirmDownload = false; } // 如果更新文件小于5M,无需弹窗确认,直接开始下载 if (_updateSize <= 1024 * 1024 * 5) { _confirmDownload = false; } // 6.弹出更新确认框, 下载所有更新文件 if (_confirmDownload) { ShowNoticeDialog(GetText(MESSAGE_NEW_VERSION, FormatSize(_updateSize)), BUTTON_UPDATE, this.OnDownloadCallback); } else { OnDownloadCallback(); } }