Add license check user info

这个提交包含在:
XuqmGroup 2026-05-15 21:29:58 +08:00
父节点 8cf7ebb317
当前提交 2577d6e3e2
共有 3 个文件被更改,包括 34 次插入5 次删除

查看文件

@ -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) ### Get Status (no network)
```kotlin ```kotlin

查看文件

@ -7,6 +7,7 @@ import com.xuqm.sdk.license.internal.LicenseContextHolder
import com.xuqm.sdk.license.internal.LicenseFileReader import com.xuqm.sdk.license.internal.LicenseFileReader
import com.xuqm.sdk.license.internal.LicenseHttpClient import com.xuqm.sdk.license.internal.LicenseHttpClient
import com.xuqm.sdk.license.model.RegisterRequest 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.model.VerifyRequest
import com.xuqm.sdk.license.store.LicenseStore import com.xuqm.sdk.license.store.LicenseStore
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -68,9 +69,10 @@ object LicenseSDK {
} }
@JvmStatic @JvmStatic
fun checkLicense(callback: LicenseCallback) { @JvmOverloads
fun checkLicense(userInfo: LicenseUserInfo? = null, callback: LicenseCallback) {
sdkScope.launch { sdkScope.launch {
val valid = when (checkLicense()) { val valid = when (checkLicense(userInfo)) {
is LicenseResult.Success -> true is LicenseResult.Success -> true
is LicenseResult.Error -> false is LicenseResult.Error -> false
} }
@ -88,7 +90,8 @@ object LicenseSDK {
* *
* @return LicenseResult.Success if license is valid, LicenseResult.Error otherwise * @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() ensureInitialized()
// Check cached status // Check cached status
@ -109,6 +112,7 @@ object LicenseSDK {
companyId = config.appKey, companyId = config.appKey,
deviceId = deviceId, deviceId = deviceId,
token = token, token = token,
userInfo = userInfo,
) )
) )
@ -130,6 +134,7 @@ object LicenseSDK {
deviceModel = DeviceInfoProvider.getDeviceModel(), deviceModel = DeviceInfoProvider.getDeviceModel(),
deviceVendor = DeviceInfoProvider.getDeviceVendor(), deviceVendor = DeviceInfoProvider.getDeviceVendor(),
osVersion = DeviceInfoProvider.getOsVersion(), osVersion = DeviceInfoProvider.getOsVersion(),
userInfo = userInfo,
) )
) )
@ -153,12 +158,12 @@ object LicenseSDK {
/** /**
* Force re-register the device (e.g., after token revocation). * 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() requireInit()
store.token = null store.token = null
store.status = null store.status = null
store.statusTime = 0 store.statusTime = 0
checkLicense() checkLicense(userInfo)
} }
/** /**

查看文件

@ -9,6 +9,7 @@ data class RegisterRequest(
@SerializedName("deviceModel") val deviceModel: String? = null, @SerializedName("deviceModel") val deviceModel: String? = null,
@SerializedName("deviceVendor") val deviceVendor: String? = null, @SerializedName("deviceVendor") val deviceVendor: String? = null,
@SerializedName("osVersion") val osVersion: String? = null, @SerializedName("osVersion") val osVersion: String? = null,
@SerializedName("userInfo") val userInfo: LicenseUserInfo? = null,
) )
data class RegisterResponse( data class RegisterResponse(
@ -21,6 +22,7 @@ data class VerifyRequest(
@SerializedName("companyId") val companyId: String, @SerializedName("companyId") val companyId: String,
@SerializedName("deviceId") val deviceId: String, @SerializedName("deviceId") val deviceId: String,
val token: String, val token: String,
@SerializedName("userInfo") val userInfo: LicenseUserInfo? = null,
) )
data class VerifyResponse( data class VerifyResponse(
@ -34,3 +36,10 @@ data class ApiResponse<T>(
val data: T? = null, val data: T? = null,
val message: String? = 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,
)