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>
这个提交包含在:
父节点
53e3cc2d6a
当前提交
db8a2a6820
@ -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] 安装,
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户