diff --git a/sdk-license/README.md b/sdk-license/README.md index 661e7d5..f02c89b 100644 --- a/sdk-license/README.md +++ b/sdk-license/README.md @@ -46,6 +46,21 @@ LicenseSDK.checkLicense { isValid -> } ``` +Optional user metadata can be uploaded during the same check. All fields are optional. + +```kotlin +LicenseSDK.checkLicense( + userInfo = LicenseUserInfo( + userId = "u_10001", + name = "张三", + email = "zhangsan@example.com", + phone = "13800000000", + ), +) { isValid -> + // allow or block app usage +} +``` + ### Get Status (no network) ```kotlin diff --git a/sdk-license/src/main/java/com/xuqm/sdk/license/LicenseSDK.kt b/sdk-license/src/main/java/com/xuqm/sdk/license/LicenseSDK.kt index d886827..a373dce 100644 --- a/sdk-license/src/main/java/com/xuqm/sdk/license/LicenseSDK.kt +++ b/sdk-license/src/main/java/com/xuqm/sdk/license/LicenseSDK.kt @@ -7,6 +7,7 @@ import com.xuqm.sdk.license.internal.LicenseContextHolder import com.xuqm.sdk.license.internal.LicenseFileReader import com.xuqm.sdk.license.internal.LicenseHttpClient import com.xuqm.sdk.license.model.RegisterRequest +import com.xuqm.sdk.license.model.LicenseUserInfo import com.xuqm.sdk.license.model.VerifyRequest import com.xuqm.sdk.license.store.LicenseStore import kotlinx.coroutines.CoroutineScope @@ -68,9 +69,10 @@ object LicenseSDK { } @JvmStatic - fun checkLicense(callback: LicenseCallback) { + @JvmOverloads + fun checkLicense(userInfo: LicenseUserInfo? = null, callback: LicenseCallback) { sdkScope.launch { - val valid = when (checkLicense()) { + val valid = when (checkLicense(userInfo)) { is LicenseResult.Success -> true is LicenseResult.Error -> false } @@ -88,7 +90,8 @@ object LicenseSDK { * * @return LicenseResult.Success if license is valid, LicenseResult.Error otherwise */ - suspend fun checkLicense(): LicenseResult = withContext(Dispatchers.IO) { + @JvmStatic + suspend fun checkLicense(userInfo: LicenseUserInfo? = null): LicenseResult = withContext(Dispatchers.IO) { ensureInitialized() // Check cached status @@ -109,6 +112,7 @@ object LicenseSDK { companyId = config.appKey, deviceId = deviceId, token = token, + userInfo = userInfo, ) ) @@ -130,6 +134,7 @@ object LicenseSDK { deviceModel = DeviceInfoProvider.getDeviceModel(), deviceVendor = DeviceInfoProvider.getDeviceVendor(), osVersion = DeviceInfoProvider.getOsVersion(), + userInfo = userInfo, ) ) @@ -153,12 +158,12 @@ object LicenseSDK { /** * Force re-register the device (e.g., after token revocation). */ - suspend fun reRegister(): LicenseResult = withContext(Dispatchers.IO) { + suspend fun reRegister(userInfo: LicenseUserInfo? = null): LicenseResult = withContext(Dispatchers.IO) { requireInit() store.token = null store.status = null store.statusTime = 0 - checkLicense() + checkLicense(userInfo) } /** diff --git a/sdk-license/src/main/java/com/xuqm/sdk/license/model/LicenseModels.kt b/sdk-license/src/main/java/com/xuqm/sdk/license/model/LicenseModels.kt index 2c034bd..2066e17 100644 --- a/sdk-license/src/main/java/com/xuqm/sdk/license/model/LicenseModels.kt +++ b/sdk-license/src/main/java/com/xuqm/sdk/license/model/LicenseModels.kt @@ -9,6 +9,7 @@ data class RegisterRequest( @SerializedName("deviceModel") val deviceModel: String? = null, @SerializedName("deviceVendor") val deviceVendor: String? = null, @SerializedName("osVersion") val osVersion: String? = null, + @SerializedName("userInfo") val userInfo: LicenseUserInfo? = null, ) data class RegisterResponse( @@ -21,6 +22,7 @@ data class VerifyRequest( @SerializedName("companyId") val companyId: String, @SerializedName("deviceId") val deviceId: String, val token: String, + @SerializedName("userInfo") val userInfo: LicenseUserInfo? = null, ) data class VerifyResponse( @@ -34,3 +36,10 @@ data class ApiResponse( val data: T? = null, val message: String? = null, ) + +data class LicenseUserInfo( + @SerializedName("userId") val userId: String? = null, + @SerializedName("name") val name: String? = null, + @SerializedName("email") val email: String? = null, + @SerializedName("phone") val phone: String? = null, +)