From 7169e66ee919e76521981532143bf550e37d4c37 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Tue, 23 Jun 2026 14:40:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(bugcollect):=20flush=20=E6=97=B6=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E5=88=9D=E5=A7=8B=E5=8C=96=E5=89=8D=E6=9A=82=E5=AD=98?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=9A=84=20appKey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SDK 通过 ContentProvider 异步初始化(sdkScope.launch),若应用层在 initialized=true 设置前调用 captureError,事件以 appKey="pending" 存入 pendingErrors。后续 flushPendingErrors 将其原样推送给 LogQueue, 服务端找不到对应应用而丢弃,导致上报丢失。 修复:flush 时检测 appKey=="pending" 并替换为真实值(appKey、userId、 release、buildId),确保早期捕获的错误能正常上报。 Co-Authored-By: Claude Sonnet 4.6 --- .../com/xuqm/sdk/bugcollect/BugCollect.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt index 2649f53..fa3cca2 100644 --- a/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt +++ b/sdk-bugcollect/src/main/java/com/xuqm/sdk/bugcollect/BugCollect.kt @@ -205,7 +205,11 @@ object BugCollect { } } - /** 将 SDK 未就绪时暂存的错误事件 flush 到队列。 */ + /** 将 SDK 未就绪时暂存的错误事件 flush 到队列。 + * + * 早于 SDK 初始化完成前调用 captureError 时,事件以 appKey="pending"、userId="unknown" + * 占位存入 pendingErrors。flush 时用真实值替换,避免服务端因找不到应用而丢弃事件。 + */ private fun flushPendingErrors() { val events = synchronized(pendingErrorsLock) { if (pendingErrors.isEmpty()) return @@ -213,7 +217,20 @@ object BugCollect { pendingErrors.clear() list } - events.forEach { queue().push(it) } + val realAppKey = if (XuqmSDK.isInitialized()) XuqmSDK.appKey else return + val realUserId = XuqmSDK.getUserId() ?: XuqmSDK.deviceId + events.forEach { event -> + val fixed = if (event.appKey == "pending") { + event.copy( + appKey = realAppKey, + userId = realUserId, + user = IssueEvent.UserInfo(id = realUserId), + release = appVersion(), + buildId = buildId(), + ) + } else event + queue().push(fixed) + } } /** 上传上次崩溃落盘的文件(远端配置就绪后由 BugCollectInitProvider 自动调用)。 */