ThirdPartyLoginService.setLoginTokenImpl(object : IKGetToken {
return if (!notLogin()) {
//未登录时返回false,未登录状态需厂商自己判断
ThirdPartyLoginToken(false, null, null)
} else {
//已登录,由接入方获取当前最新token(注意token有时效性,需要接入方保证token是最新的)
ThirdPartyLoginToken(true,"token", "openid")
}
})
//登录成功时
val loginParams = KtvLoginParams()
loginParams.loginType = LoginType.QRCODE_LOGIN
ThirdPartyLoginService.notifyLoginStateChanged(
LoginEvent.LoginSuccess(loginParams,
LoginToken("refreshToken","openId",0L,"token")))
//退出登录时
ThirdPartyLoginService.notifyLoginStateChanged(LoginEvent.Logout("openid"))
loginAPI
: 登录事件监听器,用于接收登录结果回调anonymouslyLogin()
开始游客登录loginAPI
监听登录结果LoginEvent.LoginSuccess
事件LoginEvent.LoginError
事件SDKLoginError.ANONYMOUS_LOGIN_EXPIRED
: 游客登录过期,需要重新登录SDKLoginError.ANONYMOUS_LOGIN_FAIL
: 游客登录失败,可重试
code
: 暗账号登录码,需要从服务端获取loginAPI
: 登录事件监听器,用于接收登录结果回调KtvLoginService.isLogin()
只能用于判断是否有本地登录token,不能判断token的有效性hiddenAccountLogin()
开始暗账号登录loginAPI
监听登录结果LoginEvent.LoginSuccess
事件LoginEvent.LoginError
事件SDKLoginError.HIDDEN_ACCOUNT_LOGIN_FAIL
: 暗账号登录失败SDKLoginError.REFRESH_TOKEN_NULL
: 刷新token为空,需要重新登录SDKLoginError.REFRESH_TOKEN_EXPIRED
: 刷新token过期,需要重新登录SDKLoginError.REFRESH_TOKEN_ERROR_UNKNOWN
: 刷新token接口失败
getTokenImpl
: token获取接口实现,厂商需要实现此接口
loginEvent
: 登录事件,用于通知SDK登录状态变化IKGetToken
接口,提供token获取逻辑setLoginTokenImpl()
设置token获取实现notifyLoginStateChanged()
通知SDKnotifyLoginStateChanged()
通知SDKonGetToken()
获取最新token
loginAPI
: 登录事件监听器
loginAPI
: 登录事件监听器
loginAPI
: 需要解绑的登录事件监听器
true
: 已登录false
: 未登录
true
: 当前为匿名登录模式false
: 当前为正式登录模式
loginAPI
: 需要取消的登录监听器,传null表示取消当前登录isRelease
: 是否同时解除监听器绑定
listener
: VIP信息请求结果监听器
key
: 上报事件标识reportMap
: 上报数据键值对callback
: 上报结果回调
loginParams
: 登录参数tokenInfo
: 登录成功后的token信息
openId
: 用户唯一标识overTimeMs
: token过期时间戳
exception
: 登录异常信息,包含错误码和详细信息
错误码 | 常量名 | 说明 | 处理建议 |
---|---|---|---|
101 | AUTH_CODE | 授权码错误 | 检查授权码有效性 |
102 | CANCEL | 用户取消登录 | 无需特殊处理 |
103 | UNKNOWN | 未知错误 | 重试或联系技术支持 |
104 | ANONYMOUS_LOGIN_EXPIRED | 匿名登录过期 | 重新进行匿名登录 |
105 | ANONYMOUS_LOGIN_FAIL | 匿名登录失败 | 重试匿名登录 |
106 | REFRESH_TOKEN_NULL | 刷新token为空 | 重新登录 |
107 | REFRESH_TOKEN_EXPIRED | 刷新token过期 | 重新登录 |
108 | REFRESH_TOKEN_ERROR_UNKNOWN | 刷新token未知错误 | 重新登录 |
109 | HIDDEN_ACCOUNT_LOGIN_FAIL | 暗账号登录失败 | 检查登录码或重试 |
110 | GET_TOKEN_NOT_LOGIN | 获取token时未登录 | 先进行登录 |
常量值 | 常量名 | 说明 |
---|---|---|
3003 | CODE_SIGN_CHECK_FAILED | 签名校验失败 |
3005 | CODE_REFRESH_TOKEN_EXPIRED | token过期,需重新授权 |
3017 | CODE_REFRESH_TOKEN_NOT_EXIST | token不存在或已被覆盖 |
KtvLoginService (门面服务)
├── IKLoginAPI (事件监听接口)
├── LoginEvent (事件定义)
├── LoginToken (token数据)
├── LoginException (异常定义)
└── ThirdPartyLoginService (三方登录服务)
├── IKGetToken (token获取接口)
└── ThirdPartyLoginToken (三方token数据)
KtvLoginService.hiddenAccountLogin(code, loginAPI)
LoginEvent.LoginSuccess
事件IKLoginAPI.dispatchLoginEvent()
回调给监听器KtvLoginService.anonymouslyLogin(loginAPI)
LoginEvent.LoginSuccess
或相应事件绑定阶段:
bind() / bindForever() → 添加到监听器列表
事件分发阶段:
登录状态变化 → dispatchLoginEvent() → 遍历所有监听器 → 回调处理
清理阶段:
普通监听器:loginOut() 时自动清除
持久化监听器:需要手动 unbind()