XuqmGroup-AndroidSDK/sdk-push/src/main/java/com/xuqm/sdk/push/PushSDK.kt

58 行
1.8 KiB
Kotlin

2026-04-21 22:07:29 +08:00
package com.xuqm.sdk.push
import android.content.Context
import com.xuqm.sdk.XuqmSDK
import com.xuqm.sdk.core.ServiceEndpointRegistry
2026-04-21 22:07:29 +08:00
import com.xuqm.sdk.network.ApiClient
import com.xuqm.sdk.push.api.PushApi
import com.xuqm.sdk.utils.DeviceUtils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.util.concurrent.atomic.AtomicReference
2026-04-21 22:07:29 +08:00
object PushSDK {
private val api: PushApi get() = ApiClient.create(PushApi::class.java, ServiceEndpointRegistry.pushBaseUrl)
2026-04-21 22:07:29 +08:00
private val scope = CoroutineScope(Dispatchers.IO)
private val registeredUserId = AtomicReference<String?>(null)
2026-04-21 22:07:29 +08:00
fun registerDevice(context: Context, userId: String) {
2026-04-21 22:07:29 +08:00
XuqmSDK.requireInit()
val vendor = DeviceUtils.getVendor()
val deviceId = DeviceUtils.getDeviceId(context)
2026-04-21 22:07:29 +08:00
scope.launch {
runCatching {
api.registerDevice(
appId = XuqmSDK.appId,
userId = userId,
vendor = vendor,
token = deviceId,
)
registeredUserId.set(userId)
2026-04-21 22:07:29 +08:00
}
}
}
fun unregisterDevice(userId: String) {
2026-04-21 22:07:29 +08:00
XuqmSDK.requireInit()
scope.launch {
runCatching {
api.unregisterDevice(XuqmSDK.appId, userId)
registeredUserId.compareAndSet(userId, null)
}
2026-04-21 22:07:29 +08:00
}
}
fun onSdkLogin(session: com.xuqm.sdk.XuqmLoginSession) {
val context = runCatching { XuqmSDK.appContext }.getOrNull() ?: return
if (registeredUserId.get() == session.userId) return
registerDevice(context, session.userId)
}
fun onSdkLogout() {
val userId = registeredUserId.getAndSet(null) ?: return
unregisterDevice(userId)
}
2026-04-21 22:07:29 +08:00
}