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() 获取最新tokenloginAPI: 登录事件监听器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()bind(),绑定SDK登录事件回调,这个回调在调用loginOut后会被取消bindForever(),用于用户状态管理、数据同步等LoginEvent.LoginError事件LoginException类型和错误码进行相应处理getTokenOverTimeMs()检查token有效期(仅暗账号和游客态登录)unbind()解除监听