Browse Source

上报cmei 码

newdev_shunjiawei
liwei1dao 7 months ago
parent
commit
e8425dc8a7
  1. 11
      lib/data/services/ble_manager.dart
  2. 6
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt
  3. 1
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt
  4. 3
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleMediaService.kt
  5. 17
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/StsAgent.kt

11
lib/data/services/ble_manager.dart

@ -966,6 +966,16 @@ class BleManager extends GetxService {
final stsDeviceNo = _storage.read<String>('device_sts_code') ?? ''; final stsDeviceNo = _storage.read<String>('device_sts_code') ?? '';
final stsDeviceId = _storage.read<String>('sts_device_id') ?? ''; final stsDeviceId = _storage.read<String>('sts_device_id') ?? '';
final stsDeviceSecret = _storage.read<String>('sts_device_secret') ?? ''; final stsDeviceSecret = _storage.read<String>('sts_device_secret') ?? '';
// 从 UserDevice 获取当前连接设备的 CMEI
final mac = currentDeviceAddress?.toUpperCase() ?? '';
String stsCmei = '';
try {
final matchedDevice = userInfo.User.instance.devices.firstWhere(
(d) => d.devicemac.toUpperCase() == mac,
);
stsCmei = matchedDevice.cmei;
} catch (_) {}
Logger.info('lxm--当前设备 CMEI: $stsCmei (MAC=$mac)');
final config = <String, dynamic>{ final config = <String, dynamic>{
// STS 模式路由 // STS 模式路由
@ -976,6 +986,7 @@ class BleManager extends GetxService {
'stsDeviceNo': stsDeviceNo, 'stsDeviceNo': stsDeviceNo,
'stsDeviceId': stsDeviceId, 'stsDeviceId': stsDeviceId,
'stsDeviceSecret': stsDeviceSecret, 'stsDeviceSecret': stsDeviceSecret,
'stsCmei': stsCmei,
// 语音代理配置参数 // 语音代理配置参数
'azureSpeechKey': azureSpeechKey, 'azureSpeechKey': azureSpeechKey,
'azureSpeechRegion': azureSpeechRegion, 'azureSpeechRegion': azureSpeechRegion,

6
local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt

@ -233,6 +233,7 @@ object AgentService : CoroutineScope {
deviceId = config["stsDeviceId"]?.toString() ?: "", deviceId = config["stsDeviceId"]?.toString() ?: "",
deviceSecret = config["stsDeviceSecret"]?.toString() ?: "", deviceSecret = config["stsDeviceSecret"]?.toString() ?: "",
agentId = agentId, agentId = agentId,
cmei = config["stsCmei"]?.toString() ?: "",
) )
stsAgent = StsAgent( stsAgent = StsAgent(
context = context, context = context,
@ -371,6 +372,11 @@ object AgentService : CoroutineScope {
config["mcpServer"]?.toString() ?: "", config["mcpServer"]?.toString() ?: "",
config["musicServiceType"]?.toString() ?: "" config["musicServiceType"]?.toString() ?: ""
) )
// 更新 STS 模式参数(cmei 等可能在首次初始化时尚未获取到)
val newCmei = config["stsCmei"]?.toString() ?: ""
if (newCmei.isNotEmpty()) {
stsAgent?.updateCmei(newCmei)
}
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "应用配置更新失败 config: $config Exception:${e.message}") Log.e(TAG, "应用配置更新失败 config: $config Exception:${e.message}")
} }

1
local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt

@ -91,6 +91,7 @@ class AgentServicePlugin : FlutterPlugin, MethodCallHandler, EventChannel.Stream
config["stsDeviceNo"]?.toString()?.let { intent.putExtra("stsDeviceNo", it) } config["stsDeviceNo"]?.toString()?.let { intent.putExtra("stsDeviceNo", it) }
config["stsDeviceId"]?.toString()?.let { intent.putExtra("stsDeviceId", it) } config["stsDeviceId"]?.toString()?.let { intent.putExtra("stsDeviceId", it) }
config["stsDeviceSecret"]?.toString()?.let { intent.putExtra("stsDeviceSecret", it) } config["stsDeviceSecret"]?.toString()?.let { intent.putExtra("stsDeviceSecret", it) }
config["stsCmei"]?.toString()?.let { intent.putExtra("stsCmei", it) }
config["vipexptime"]?.toString()?.let { config["vipexptime"]?.toString()?.let {
intent.putExtra("vipexptime", it) intent.putExtra("vipexptime", it)
//打印日志 //打印日志

3
local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleMediaService.kt

@ -85,6 +85,7 @@ class BleMediaService : Service(), CoroutineScope {
private const val KEY_STS_DEVICE_NO = "stsDeviceNo" private const val KEY_STS_DEVICE_NO = "stsDeviceNo"
private const val KEY_STS_DEVICE_ID = "stsDeviceId" private const val KEY_STS_DEVICE_ID = "stsDeviceId"
private const val KEY_STS_DEVICE_SECRET = "stsDeviceSecret" private const val KEY_STS_DEVICE_SECRET = "stsDeviceSecret"
private const val KEY_STS_CMEI = "stsCmei"
// 用于跟踪服务是否正在运行 // 用于跟踪服务是否正在运行
private val isRunning = AtomicBoolean(false) private val isRunning = AtomicBoolean(false)
@ -621,6 +622,7 @@ private var companionManager: BleCompanionManager? = null
it.getStringExtra(KEY_STS_DEVICE_NO)?.let { value -> config[KEY_STS_DEVICE_NO] = value } it.getStringExtra(KEY_STS_DEVICE_NO)?.let { value -> config[KEY_STS_DEVICE_NO] = value }
it.getStringExtra(KEY_STS_DEVICE_ID)?.let { value -> config[KEY_STS_DEVICE_ID] = value } it.getStringExtra(KEY_STS_DEVICE_ID)?.let { value -> config[KEY_STS_DEVICE_ID] = value }
it.getStringExtra(KEY_STS_DEVICE_SECRET)?.let { value -> config[KEY_STS_DEVICE_SECRET] = value } it.getStringExtra(KEY_STS_DEVICE_SECRET)?.let { value -> config[KEY_STS_DEVICE_SECRET] = value }
it.getStringExtra(KEY_STS_CMEI)?.let { value -> config[KEY_STS_CMEI] = value }
Log.d(TAG, "liwei-------vipexptime 3-1 ${ config[KEY_VIP_EXPTIME]}") Log.d(TAG, "liwei-------vipexptime 3-1 ${ config[KEY_VIP_EXPTIME]}")
// 提取 supportedLanguages 参数 // 提取 supportedLanguages 参数
it.getStringArrayListExtra(KEY_SUPPORTED_LANGUAGES)?.let { languages -> it.getStringArrayListExtra(KEY_SUPPORTED_LANGUAGES)?.let { languages ->
@ -695,6 +697,7 @@ private var companionManager: BleCompanionManager? = null
config[KEY_STS_DEVICE_NO] = getConfigString(prefs, KEY_STS_DEVICE_NO, "") config[KEY_STS_DEVICE_NO] = getConfigString(prefs, KEY_STS_DEVICE_NO, "")
config[KEY_STS_DEVICE_ID] = getConfigString(prefs, KEY_STS_DEVICE_ID, "") config[KEY_STS_DEVICE_ID] = getConfigString(prefs, KEY_STS_DEVICE_ID, "")
config[KEY_STS_DEVICE_SECRET] = getConfigString(prefs, KEY_STS_DEVICE_SECRET, "") config[KEY_STS_DEVICE_SECRET] = getConfigString(prefs, KEY_STS_DEVICE_SECRET, "")
config[KEY_STS_CMEI] = getConfigString(prefs, KEY_STS_CMEI, "")
Log.d(TAG, "liwei-------vipexptime 3-0 ${ config[KEY_VIP_EXPTIME]}") Log.d(TAG, "liwei-------vipexptime 3-0 ${ config[KEY_VIP_EXPTIME]}")
// 添加 supportedLanguages 参数处理 // 添加 supportedLanguages 参数处理
val supportedLanguagesStr = getConfigString(prefs, KEY_SUPPORTED_LANGUAGES, "") val supportedLanguagesStr = getConfigString(prefs, KEY_SUPPORTED_LANGUAGES, "")

17
local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/StsAgent.kt

@ -40,6 +40,7 @@ data class StsConfig(
var deviceId: String, var deviceId: String,
var deviceSecret: String, var deviceSecret: String,
val agentId: String, val agentId: String,
val cmei: String = "",
) )
/** /**
@ -60,10 +61,18 @@ class StsAgent(
override val coroutineContext = Dispatchers.IO + job override val coroutineContext = Dispatchers.IO + job
init { init {
Log.i(TAG, "[YIDONG] StsAgent初始化: productId=${config.productId} deviceNo=${config.deviceNo} deviceId=${config.deviceId} agentId=${config.agentId} hasSecret=${config.deviceSecret.isNotEmpty()}") Log.i(TAG, "[YIDONG] StsAgent初始化: productId=${config.productId} deviceNo=${config.deviceNo} deviceId=${config.deviceId} agentId=${config.agentId} cmei=${config.cmei} hasSecret=${config.deviceSecret.isNotEmpty()}")
fetchCredentials() fetchCredentials()
} }
/** 动态更新 CMEI(首次初始化时可能尚未获取到) */
fun updateCmei(cmei: String) {
if (cmei.isNotEmpty() && cmei != config.cmei) {
config = config.copy(cmei = cmei)
Log.i(TAG, "[YIDONG] updateCmei: cmei已更新为 $cmei")
}
}
// ── WebSocket ───────────────────────────────────────────────────────────── // ── WebSocket ─────────────────────────────────────────────────────────────
private val okHttpClient: OkHttpClient = buildTrustAllClient() private val okHttpClient: OkHttpClient = buildTrustAllClient()
private var webSocket: WebSocket? = null private var webSocket: WebSocket? = null
@ -190,7 +199,7 @@ class StsAgent(
) )
credentialReady = config.deviceSecret.isNotEmpty() credentialReady = config.deviceSecret.isNotEmpty()
if (credentialReady) { if (credentialReady) {
Log.i(TAG, "[YIDONG] fetchCredentials: 密钥获取成功 deviceId=${config.deviceId} deviceNo=${config.deviceNo}") Log.i(TAG, "[YIDONG] fetchCredentials: 密钥获取成功 deviceId=${config.deviceId} deviceNo=${config.deviceNo} cmei=${config.cmei}")
onCredentialsFetched?.invoke(config.deviceId, config.deviceSecret, config.deviceNo) onCredentialsFetched?.invoke(config.deviceId, config.deviceSecret, config.deviceNo)
reportHeartbeat() // 凭证获取成功后立即上报心跳 reportHeartbeat() // 凭证获取成功后立即上报心跳
} else { } else {
@ -216,7 +225,7 @@ class StsAgent(
Log.w(TAG, "[YIDONG] reportHeartbeat: 凭证未就绪,跳过上报") Log.w(TAG, "[YIDONG] reportHeartbeat: 凭证未就绪,跳过上报")
return return
} }
Log.i(TAG, "[YIDONG] reportHeartbeat: 开始上报 deviceId=${config.deviceId} deviceNo=${config.deviceNo}") Log.i(TAG, "[YIDONG] reportHeartbeat: 开始上报 deviceId=${config.deviceId} deviceNo=${config.deviceNo} cmei=${config.cmei}")
launch { launch {
try { try {
val netType = try { val netType = try {
@ -243,7 +252,7 @@ class StsAgent(
put("sdkVersion", "ai_http_1.0") put("sdkVersion", "ai_http_1.0")
put("firmwareVersion", "1.0.0") put("firmwareVersion", "1.0.0")
put("imei", "") put("imei", "")
put("cmei", config.deviceNo) // 非蜂窝设备使用 SN 作为 cmei put("cmei", config.cmei.ifEmpty { config.deviceNo }) // 优先使用 UserDevice 的 CMEI
put("mac", "") put("mac", "")
}) })
}.toString().toRequestBody("application/json".toMediaType()) }.toString().toRequestBody("application/json".toMediaType())

Loading…
Cancel
Save