package com.xuqm.sdk.push import android.content.Context import com.xuqm.sdk.XuqmSDK import com.xuqm.sdk.core.ServiceEndpointRegistry 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 object PushSDK { private val api: PushApi get() = ApiClient.create(PushApi::class.java, ServiceEndpointRegistry.pushBaseUrl) private val scope = CoroutineScope(Dispatchers.IO) private val registeredUserId = AtomicReference(null) fun registerDevice(context: Context, userId: String) { XuqmSDK.requireInit() val vendor = DeviceUtils.getVendor() val deviceId = DeviceUtils.getDeviceId(context) scope.launch { runCatching { api.registerDevice( appId = XuqmSDK.appId, userId = userId, vendor = vendor, token = deviceId, ) registeredUserId.set(userId) } } } fun unregisterDevice(userId: String) { XuqmSDK.requireInit() scope.launch { runCatching { api.unregisterDevice(XuqmSDK.appId, userId) registeredUserId.compareAndSet(userId, null) } } } 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) } }