null, 'ios' => null]; foreach ([1 => 'android', 2 => 'ios'] as $platform => $key) { $version = AppVersion::where('platform', $platform) ->where('status', 1) ->where('package_type', '<>', 1) // 排除 wgt 热更包,只取整包 ->order(['version_code' => 'desc', 'id' => 'desc']) ->append(['platform_text', 'package_type_text']) ->find(); if ($version) { $result[$key] = [ 'version_name' => $version['version_name'], 'version_code' => $version['version_code'], 'package_type' => $version['package_type'], 'package_type_text' => $version['package_type_text'], 'download_url' => $version['download_url'], 'title' => $version['title'], 'update_content' => $version['update_content'], 'create_time' => $version['create_time'], ]; } } return $this->data($result); } /** * @notes 检查 APP 是否有新版本 * 请求示例:GET /appVersion/check?platform=1&version_code=1012&package_type=1 * - platform: 1=Android 2=iOS(必填) * - version_code: 当前 APP 版本数字(必填) * - package_type: 1=wgt热更 2=apk整包 3=ipa(可选,传则只比对该包类型) */ public function check(): Json { $platform = (int) $this->request->get('platform/d', 0); $versionCode = (int) $this->request->get('version_code/d', 0); $packageType = (int) $this->request->get('package_type/d', 0); if (!in_array($platform, [1, 2])) { return $this->fail('参数错误:platform'); } if ($versionCode <= 0) { return $this->fail('参数错误:version_code'); } $query = AppVersion::where('platform', $platform) ->where('status', 1) ->where('version_code', '>', $versionCode); if ($packageType > 0) { $query->where('package_type', $packageType); } // wgt 热更需校验原生最低版本(min_version_code <= 当前version_code) // 同时找出符合条件的最新版本 $latest = $query->order(['version_code' => 'desc', 'id' => 'desc']) ->append(['platform_text', 'package_type_text', 'update_type_text']) ->find(); if (empty($latest)) { return $this->data([ 'has_update' => false, ]); } // wgt 包:当前 APP 原生版本必须 >= min_version_code if ($latest['package_type'] == 1 && $latest['min_version_code'] > 0 && $versionCode < $latest['min_version_code']) { // 当前原生版本太低无法 wgt 热更,返回无更新(让用户走整包升级路径) return $this->data([ 'has_update' => false, ]); } return $this->data([ 'has_update' => true, 'id' => $latest['id'], 'version_name' => $latest['version_name'], 'version_code' => $latest['version_code'], 'min_version_code' => $latest['min_version_code'], 'platform' => $latest['platform'], 'platform_text' => $latest['platform_text'], 'package_type' => $latest['package_type'], 'package_type_text' => $latest['package_type_text'], 'update_type' => $latest['update_type'], 'update_type_text' => $latest['update_type_text'], 'download_url' => $latest['download_url'], 'title' => $latest['title'], 'update_content' => $latest['update_content'], ]); } }