refactor(sdk-update): 重构版本更新检测功能

- 移除 userIdOverride 参数,统一通过 XuqmSDK.login() 会话获取用户ID
- 新增 bypassIgnore 参数控制是否绕过已忽略版本
- 静默检查模式下已忽略版本不再弹窗,主动检查模式始终显示更新对话框
- 更新文档说明破坏性变更和新的使用方式
- 移除 requiresLogin 字段相关实现
这个提交包含在:
XuqmGroup 2026-06-04 13:35:59 +08:00
父节点 ea85dd6587
当前提交 784554ab4c
共有 2 个文件被更改,包括 22 次插入11 次删除

查看文件

@ -1,18 +1,24 @@
# sdk-update 更新日志
## 1.1.0
## 1.0.10
### 新增
- `UpdateInfo.requiresLogin: Boolean`:服务端要求先登录再检测更新时为 `true`,客户端可据此静默等待登录后重检。
- `UpdateSDK.ignoreVersion(context, versionCode)`:将指定版本码标记为已忽略,存储于 `SharedPreferences`非强制更新时,`checkAppUpdate` 检测到被忽略的版本会直接返回 `needsUpdate=false`,不弹窗。
- `UpdateSDK.ignoreVersion(context, versionCode)`:将指定版本码标记为已忽略,存储于 `SharedPreferences`
- `UpdateSDK.clearIgnoredVersions(context)`:清除所有已忽略版本记录。
- `UpdateSDK.checkAppUpdate(context, userIdOverride)` 新增可选参数 `userIdOverride: String?`:优先级高于 `XuqmSDK.currentLoginSession?.userId`,供 H5 login 回调触发补充检测时使用。
### 变更
- `checkAppUpdate(context, bypassIgnore: Boolean = false)`
- `bypassIgnore = false`(默认,静默检查):用户已忽略的版本不再弹窗,适合启动时后台检查。
- `bypassIgnore = true`(主动检查):绕过忽略记录,始终返回真实更新状态;无更新时由调用方显示提示。
- 移除了旧版 `userIdOverride` 参数,userId 统一通过 `XuqmSDK.login()` 建立 session 后自动传递。
### 兼容性
- 完全向后兼容 `1.0.x`,现有调用无需修改。
- `updateInfo.requiresLogin` 默认值为 `false`,服务端未升级时行为不变。
- **破坏性变更**:移除 `userIdOverride` 参数。调用方应先 `XuqmSDK.login(userId, userSig)` 建立 session,再调用 `checkAppUpdate(context)`,SDK 自动从 session 读取 userId。
---

查看文件

@ -50,11 +50,14 @@ object UpdateSDK {
/**
* 检测应用更新
* @param userIdOverride 显式传入用户 ID优先级高于 [XuqmSDK.currentLoginSession]
* 用于登录后补充检测的场景当服务端返回 [UpdateInfo.requiresLogin] H5 侧完成登录并传入 userId
* 再调用此方法重新检测
*
* @param bypassIgnore 是否绕过"忽略版本"过滤
* - `false`默认静默检查用户已忽略的版本不再弹窗适合启动时后台检查
* - `true`主动检查忽略记录不生效始终弹出更新对话框无更新时由调用方显示提示
*
* userId 通过 [XuqmSDK.login] 设置会话后自动传递无需外部覆盖
*/
suspend fun checkAppUpdate(context: Context, userIdOverride: String? = null): UpdateInfo? = withContext(Dispatchers.IO) {
suspend fun checkAppUpdate(context: Context, bypassIgnore: Boolean = false): UpdateInfo? = withContext(Dispatchers.IO) {
awaitInitialization()
val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)
val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
@ -63,12 +66,14 @@ object UpdateSDK {
@Suppress("DEPRECATION")
packageInfo.versionCode
}
val userId = userIdOverride ?: XuqmSDK.currentLoginSession?.userId
val userId = XuqmSDK.currentLoginSession?.userId
runCatching {
api.checkUpdate(XuqmSDK.appKey, "ANDROID", versionCode, userId).data?.let { info ->
val normalized = info.copy(downloadUrl = normalizeDownloadUrl(info.downloadUrl) ?: info.downloadUrl)
// 非强制更新且已被用户忽略时,压制弹窗
if (normalized.needsUpdate && !normalized.forceUpdate && isVersionIgnored(context, normalized.versionCode)) {
// 静默检查时跳过已忽略版本;主动检查bypassIgnore=true始终展示
if (!bypassIgnore && normalized.needsUpdate && !normalized.forceUpdate
&& isVersionIgnored(context, normalized.versionCode)
) {
normalized.copy(needsUpdate = false)
} else {
normalized