// 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; }
}