// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目必须遵守相关法律法规和许可证的要求。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! namespace Admin.NET.Core.Service; /// /// APP 版本检查服务 🧩 /// [ApiDescriptionSettings(Order = 505)] public class SysAppVersionService : IDynamicApiController, ITransient { private readonly SysConfigService _sysConfigService; public SysAppVersionService(SysConfigService sysConfigService) { _sysConfigService = sysConfigService; } /// /// 获取 APP 最新版本 🔖 /// /// 平台:android / ios /// 版本信息在【系统管理-参数配置】维护,键名规则:app_{platform}_version_code / app_{platform}_version_name / app_{platform}_apk_url / app_{platform}_force_update / app_{platform}_release_notes。未配置时 VersionCode=0,APP 视为无更新。 [AllowAnonymous] [DisplayName("获取APP最新版本")] public async Task GetLatest([FromQuery] string platform = "android") { platform = string.IsNullOrWhiteSpace(platform) ? "android" : platform.Trim().ToLowerInvariant(); var prefix = $"app_{platform}_"; return new AppVersionOutput { Platform = platform, VersionCode = await _sysConfigService.GetConfigValue(prefix + "version_code"), VersionName = await _sysConfigService.GetConfigValue(prefix + "version_name"), ApkUrl = await _sysConfigService.GetConfigValue(prefix + "apk_url"), ForceUpdate = await _sysConfigService.GetConfigValue(prefix + "force_update"), ReleaseNotes = await _sysConfigService.GetConfigValue(prefix + "release_notes"), }; } } /// /// APP 版本信息输出 /// public class AppVersionOutput { /// /// 平台(android / ios) /// public string Platform { get; set; } /// /// 版本号(递增整数,对应 manifest.json versionCode) /// public int VersionCode { get; set; } /// /// 版本名(对应 manifest.json versionName) /// public string VersionName { get; set; } /// /// 安装包下载地址 /// public string ApkUrl { get; set; } /// /// 是否强制更新 /// public bool ForceUpdate { get; set; } /// /// 更新说明 /// public string ReleaseNotes { get; set; } }