From db8a2a682010a21e85daba93aa342f66e842fbc2 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 11 Jun 2026 15:11:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(sdk-core):=20=E6=96=B0=E5=A2=9E=20XuqmSDK.?= =?UTF-8?q?setUserInfo=EF=BC=8C=E6=9B=BF=E6=8D=A2=20UpdateSDK.setUserId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 XuqmUserInfo 数据类和 XuqmSDK.setUserInfo(userId) 统一接口 - 供 update 灰度发布、push 精准推送等服务共用,调用一次即可 - UpdateSDK 移除 setUserId,resolveUserId 改为优先读取 XuqmSDK.userInfo,其次 currentLoginSession - 说明:IM socket 连接需独立调用 XuqmSDK.login,setUserInfo 不影响 IM 鉴权 Co-Authored-By: Claude Sonnet 4.6 --- .../src/main/java/com/xuqm/sdk/XuqmSDK.kt | 19 +++++++++++++++ .../main/java/com/xuqm/sdk/XuqmUserInfo.kt | 5 ++++ .../java/com/xuqm/sdk/update/UpdateSDK.kt | 24 +++---------------- 3 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 sdk-core/src/main/java/com/xuqm/sdk/XuqmUserInfo.kt diff --git a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt index ede2714..f111d1f 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt @@ -28,6 +28,9 @@ object XuqmSDK { @Volatile private var loginSession: XuqmLoginSession? = null + @Volatile + private var userInfoValue: XuqmUserInfo? = null + private val initLock = Any() private val pendingInitCallbacks = mutableListOf<() -> Unit>() @@ -154,6 +157,22 @@ object XuqmSDK { val currentLoginSession: XuqmLoginSession? get() = loginSession + /** + * 当前通过 [setUserInfo] 设置的用户信息。 + * 优先级高于 [currentLoginSession],适用于不使用 XuqmSDK 登录体系的集成场景。 + */ + val userInfo: XuqmUserInfo? get() = userInfoValue + + /** + * 设置用户信息,供 update / push / license 等服务使用(灰度发布、精准推送等)。 + * IM 服务需要独立调用 [login] 完成鉴权,[setUserInfo] 对 IM socket 连接无效。 + * + * @param userId 用户标识,传 null 则清除 + */ + fun setUserInfo(userId: String?) { + userInfoValue = userId?.takeIf { it.isNotBlank() }?.let { XuqmUserInfo(it) } + } + suspend fun login( userId: String, userSig: String, diff --git a/sdk-core/src/main/java/com/xuqm/sdk/XuqmUserInfo.kt b/sdk-core/src/main/java/com/xuqm/sdk/XuqmUserInfo.kt new file mode 100644 index 0000000..3d6bf20 --- /dev/null +++ b/sdk-core/src/main/java/com/xuqm/sdk/XuqmUserInfo.kt @@ -0,0 +1,5 @@ +package com.xuqm.sdk + +data class XuqmUserInfo( + val userId: String, +) 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 d0310dd..ff20f60 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 @@ -20,30 +20,12 @@ object UpdateSDK { private val api: UpdateApi get() = ApiClient.create(UpdateApi::class.java, ServiceEndpointRegistry.updateBaseUrl) - /** - * 外部设置的 userId,优先于 [XuqmSDK.currentLoginSession] 中的 userId。 - * 适用于 App 有自己的登录体系,不走 XuqmSDK.login,但仍需灰度发布按用户筛选的场景。 - */ - private var externalUserId: String? = null - - /** - * 设置 userId,用于检查更新时的灰度发布筛选。 - * - * 设置后,[checkAppUpdate] 会优先使用此 userId,而不是从 [XuqmSDK.currentLoginSession] 获取。 - * 适用于 App 有自己的用户体系,不通过 [XuqmSDK.login] 登录的场景。 - * - * @param userId 用户标识,传 null 则清除,恢复使用 XuqmSDK 登录会话中的 userId - */ - fun setUserId(userId: String?) { - externalUserId = userId?.takeIf { it.isNotBlank() } - } - /** * 获取当前生效的 userId。 - * 优先级:[externalUserId] > [XuqmSDK.currentLoginSession]?.userId + * 优先级:[XuqmSDK.userInfo]?.userId > [XuqmSDK.currentLoginSession]?.userId */ private fun resolveUserId(): String? { - return externalUserId ?: XuqmSDK.currentLoginSession?.userId + return XuqmSDK.userInfo?.userId ?: XuqmSDK.currentLoginSession?.userId } private fun normalizeDownloadUrl(rawUrl: String?): String? { @@ -154,7 +136,7 @@ object UpdateSDK { * - `false`(默认,静默检查):用户已忽略的版本不再弹窗,适合启动时后台检查。 * - `true`(主动检查):忽略记录不生效,始终弹出更新对话框;无更新时由调用方显示提示。 * - * userId 优先使用 [setUserId] 设置的值,其次从 [XuqmSDK.currentLoginSession] 获取。 + * userId 优先使用 [XuqmSDK.setUserInfo] 设置的值,其次从 [XuqmSDK.currentLoginSession] 获取。 * 灰度发布需要 userId 来判断用户是否命中灰度范围。 * * 返回的 [UpdateInfo.alreadyDownloaded] 为 true 时,可直接调用 [installDownloadedApk] 安装,