refactor(sdk-update): 重构版本更新检测功能
- 移除 userIdOverride 参数,统一通过 XuqmSDK.login() 会话获取用户ID - 新增 bypassIgnore 参数控制是否绕过已忽略版本 - 静默检查模式下已忽略版本不再弹窗,主动检查模式始终显示更新对话框 - 更新文档说明破坏性变更和新的使用方式 - 移除 requiresLogin 字段相关实现
这个提交包含在:
父节点
ea85dd6587
当前提交
784554ab4c
@ -1,18 +1,24 @@
|
|||||||
# sdk-update 更新日志
|
# sdk-update 更新日志
|
||||||
|
|
||||||
## 1.1.0
|
## 1.0.10
|
||||||
|
|
||||||
### 新增
|
### 新增
|
||||||
|
|
||||||
- `UpdateInfo.requiresLogin: Boolean`:服务端要求先登录再检测更新时为 `true`,客户端可据此静默等待登录后重检。
|
- `UpdateInfo.requiresLogin: Boolean`:服务端要求先登录再检测更新时为 `true`,客户端可据此静默等待登录后重检。
|
||||||
- `UpdateSDK.ignoreVersion(context, versionCode)`:将指定版本码标记为已忽略,存储于 `SharedPreferences`。非强制更新时,`checkAppUpdate` 检测到被忽略的版本会直接返回 `needsUpdate=false`,不弹窗。
|
- `UpdateSDK.ignoreVersion(context, versionCode)`:将指定版本码标记为已忽略,存储于 `SharedPreferences`。
|
||||||
- `UpdateSDK.clearIgnoredVersions(context)`:清除所有已忽略版本记录。
|
- `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`,服务端未升级时行为不变。
|
- `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()
|
awaitInitialization()
|
||||||
val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)
|
val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)
|
||||||
val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
@ -63,12 +66,14 @@ object UpdateSDK {
|
|||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
packageInfo.versionCode
|
packageInfo.versionCode
|
||||||
}
|
}
|
||||||
val userId = userIdOverride ?: XuqmSDK.currentLoginSession?.userId
|
val userId = XuqmSDK.currentLoginSession?.userId
|
||||||
runCatching {
|
runCatching {
|
||||||
api.checkUpdate(XuqmSDK.appKey, "ANDROID", versionCode, userId).data?.let { info ->
|
api.checkUpdate(XuqmSDK.appKey, "ANDROID", versionCode, userId).data?.let { info ->
|
||||||
val normalized = info.copy(downloadUrl = normalizeDownloadUrl(info.downloadUrl) ?: info.downloadUrl)
|
val normalized = info.copy(downloadUrl = normalizeDownloadUrl(info.downloadUrl) ?: info.downloadUrl)
|
||||||
// 非强制更新且已被用户忽略时,压制弹窗
|
// 静默检查时跳过已忽略版本;主动检查(bypassIgnore=true)始终展示
|
||||||
if (normalized.needsUpdate && !normalized.forceUpdate && isVersionIgnored(context, normalized.versionCode)) {
|
if (!bypassIgnore && normalized.needsUpdate && !normalized.forceUpdate
|
||||||
|
&& isVersionIgnored(context, normalized.versionCode)
|
||||||
|
) {
|
||||||
normalized.copy(needsUpdate = false)
|
normalized.copy(needsUpdate = false)
|
||||||
} else {
|
} else {
|
||||||
normalized
|
normalized
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户