From fd37f57fbf7f329485306ab6fbe2780779055a2d Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 18 Jun 2026 22:00:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(sdk-core):=20deviceId=20=E4=BC=98=E5=85=88?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20ANDROID=5FID=EF=BC=8C=E5=8D=B8=E8=BD=BD?= =?UTF-8?q?=E9=87=8D=E8=A3=85=E5=90=8E=E4=BB=8D=E5=8F=AF=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优先读取 Settings.Secure.ANDROID_ID(绑定设备,非应用) - 过滤已知无效值(9774d56d682e549c 等) - ANDROID_ID 前缀 aid_ 区分来源 - 回退到随机 UUID(恢复出厂设置等场景) --- .../src/main/java/com/xuqm/sdk/XuqmSDK.kt | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt index cb8ba0c..bd86475 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/XuqmSDK.kt @@ -337,9 +337,25 @@ object XuqmSDK { val key = "device_id" val stored = prefs.getString(key, null) if (!stored.isNullOrBlank()) return stored - val generated = java.util.UUID.randomUUID().toString() - prefs.edit().putString(key, generated).apply() - return generated + + // 优先使用 ANDROID_ID(卸载重装后不变,绑定设备而非应用) + val androidId = runCatching { + android.provider.Settings.Secure.getString( + context.contentResolver, + android.provider.Settings.Secure.ANDROID_ID, + ) + }.getOrNull() + + // 已知的无效值:某些设备返回固定值或 null + val badValues = setOf("", "9774d56d682e549c", "null", "unknown") + val deviceId = if (!androidId.isNullOrBlank() && androidId.lowercase() !in badValues) { + "aid_$androidId" + } else { + java.util.UUID.randomUUID().toString() + } + + prefs.edit().putString(key, deviceId).apply() + return deviceId } private fun platformInitException(platformUrl: String, appKey: String, cause: Throwable): Throwable {