diff --git a/docs/sdk-update-CHANGELOG.md b/docs/sdk-update-CHANGELOG.md index ebd96d9..9de0783 100644 --- a/docs/sdk-update-CHANGELOG.md +++ b/docs/sdk-update-CHANGELOG.md @@ -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。 --- diff --git a/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt b/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt index 40236b4..905717e 100644 --- a/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt +++ b/sdk-update/src/main/java/com/xuqm/sdk/update/UpdateSDK.kt @@ -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