feat(sdk-core): 新增 XuqmSDK.setUserInfo,替换 UpdateSDK.setUserId

- 新增 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 <noreply@anthropic.com>
这个提交包含在:
XuqmGroup 2026-06-11 15:11:53 +08:00
父节点 53e3cc2d6a
当前提交 db8a2a6820
共有 3 个文件被更改,包括 27 次插入21 次删除

查看文件

@ -28,6 +28,9 @@ object XuqmSDK {
@Volatile @Volatile
private var loginSession: XuqmLoginSession? = null private var loginSession: XuqmLoginSession? = null
@Volatile
private var userInfoValue: XuqmUserInfo? = null
private val initLock = Any() private val initLock = Any()
private val pendingInitCallbacks = mutableListOf<() -> Unit>() private val pendingInitCallbacks = mutableListOf<() -> Unit>()
@ -154,6 +157,22 @@ object XuqmSDK {
val currentLoginSession: XuqmLoginSession? val currentLoginSession: XuqmLoginSession?
get() = loginSession 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( suspend fun login(
userId: String, userId: String,
userSig: String, userSig: String,

查看文件

@ -0,0 +1,5 @@
package com.xuqm.sdk
data class XuqmUserInfo(
val userId: String,
)

查看文件

@ -20,30 +20,12 @@ object UpdateSDK {
private val api: UpdateApi get() = ApiClient.create(UpdateApi::class.java, ServiceEndpointRegistry.updateBaseUrl) 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 * 获取当前生效的 userId
* 优先级[externalUserId] > [XuqmSDK.currentLoginSession]?.userId * 优先级[XuqmSDK.userInfo]?.userId > [XuqmSDK.currentLoginSession]?.userId
*/ */
private fun resolveUserId(): String? { private fun resolveUserId(): String? {
return externalUserId ?: XuqmSDK.currentLoginSession?.userId return XuqmSDK.userInfo?.userId ?: XuqmSDK.currentLoginSession?.userId
} }
private fun normalizeDownloadUrl(rawUrl: String?): String? { private fun normalizeDownloadUrl(rawUrl: String?): String? {
@ -154,7 +136,7 @@ object UpdateSDK {
* - `false`默认静默检查用户已忽略的版本不再弹窗适合启动时后台检查 * - `false`默认静默检查用户已忽略的版本不再弹窗适合启动时后台检查
* - `true`主动检查忽略记录不生效始终弹出更新对话框无更新时由调用方显示提示 * - `true`主动检查忽略记录不生效始终弹出更新对话框无更新时由调用方显示提示
* *
* userId 优先使用 [setUserId] 设置的值其次从 [XuqmSDK.currentLoginSession] 获取 * userId 优先使用 [XuqmSDK.setUserInfo] 设置的值其次从 [XuqmSDK.currentLoginSession] 获取
* 灰度发布需要 userId 来判断用户是否命中灰度范围 * 灰度发布需要 userId 来判断用户是否命中灰度范围
* *
* 返回的 [UpdateInfo.alreadyDownloaded] true 可直接调用 [installDownloadedApk] 安装 * 返回的 [UpdateInfo.alreadyDownloaded] true 可直接调用 [installDownloadedApk] 安装