🎯 Seetong 问题雷达 09:00 第235期
时间窗口:2026-10-15 17:00:00 ~ 2026-10-16 09:00:20(Asia/Shanghai)
TL;DR 核心要点
- 🟠 iOS 8.4.1.6 冷启动点击离线报警推送后未进入回放,用户需关闭 App 再打开才能看到视频(严重度 70 / 100,置信度 中)——反馈 257576 的当前日志在 08:06:07 出现 didFinishLaunchingWithOptions,但直到 08:07:21 提交反馈,均未出现 didReceiveNotificationResponse、openOfflinePushPlaybackPage 或 PlayBackPage;同一 OBS 历史日志在 9 月 26 日可完整复现成功链路。神策 DeviceVideoPlayback 的「离线推送进入回放」场景显示 iOS 8.4.106 在 10-16 09:00 前已有 131 次出图超过 10 秒、62 次超过 60 秒,平均出图 81.5 秒,而 Android 8.4.1.6 同场景平均约 1.0 秒。新增任务 T-20261016-090737-bec4
- 🟠 Android 8.4.1.7 KMP 回放页「关闭窗口」无效,反馈时刻播放页已成功出流,但关闭桥接没有任何结果证据(严重度 70 / 100,置信度 弱)——反馈 257578 的 Logan 显示 PlayBackPage 创建、startReplay 启动、onNvrReplayResp act=0 与首帧监测均成功;随后页面栈继续进入账号管理、系统设置等页面。宿主 closePage 仅执行 activity?.finish(),且返回键存在 dispatchKeyEvent 与 OnBackPressedCallback 两套处理路径,均无调用来源、结果或失败日志,无法区分用户点击未到桥接、桥接 Activity 为空,还是返回键被框架消费。新增任务 T-20261016-090740-b84d
- 现象描述:用户收到 App 离线报警通知,点击通知进入 App 后没有直接打开报警对应视频;退出并重新启动 App 后,视频才能正常看到。反馈原文为「app出现报警点击通知进app打不开需要关闭应用在进才能看到视频」。
最近一个月 Top 问题
按严重度与复发期数排序,已把跨期同类反馈归集;负责人由问题代码锚点对应的 Git 提交历史(blame / 近期主要提交者)反查;数据窗口:最近 30 天(截至 2026-10-16)。
| # | 问题(严重度降序) | 严重度 | 平台 | 版本 | 负责人 | 问题原因 |
|---|---|---|---|---|---|---|
| 1 | 升级后回放体验整体退化 4 期 · 18 条反馈 | 85 | Android · iOS | 8.4.1.6 / 8.3.14.2 | 唐胜、许源、欧阳荣、谭伟 | 8.4.1.6 对回放链路做了多处改动(时间条 UI、通道切换进度对齐、报警-录像联动),导致回放体验多点退化;Logan 显示取流层无崩溃,问题在"UI/状态对齐 + 报警录像关联"而非连接失败。 |
| 2 | KMP 回放页未申请屏幕常亮,回放中手机自动息屏 11 期 · 29 条反馈 | 84 | Android · HarmonyOS | 8.4.1.6 / 8.4.1 / 8.4.2 | 唐胜、陈宝旺、许源、谭伟 | KMP 回放页的屏幕常亮能力已在代码中完整实现(KMP 公共层 → 桥接层 → Android 宿主层齐备),但承载该实现的提交只落在 feature_v8.4.2 一条分支上,feature_v8.4.4、master、hotfix_v1.1.1 全部不含,因此所有已发布版本(Android 8.4.1.6 / HarmonyOS 1.1.1.11)在运行时都走不到 FLAG_KEEP_SCREEN_ON,回放过程中发生系统级息屏。 |
| 3 | HarmonyOS 1.1.1.11 回放 / 监控链路不可用连续第 6 期聚集 14 期 · 130 条反馈 | 72 | HarmonyOS | 1.1.1.11 / 1.1.1 / 1.1.1.6 | 陈宝旺、冉博麟、唐胜、李国涛 | 待定——HarmonyOS 1.1.1.11 的回放 / 监控链路存在跨机型跨地区的选择性失败,但由于 HarmonyOS 端 Logan 上报链路自 2026-09 起持续缺失(连续 6 期 0 条可下载),根因无法从客户端日志侧确认,当前只能确认「影响面真实存在且在扩大机型覆盖面」。 |
| 4 | KMP 卡回放取「当天录像」时走云回放分支,失败后无超时兜底并反复重试 1 期 · 4 条反馈 | 71 | Android | 8.3.11.3 / 8.4.1.6 | 陈宝旺、谭伟 | KMP 回放页在选择 Tab 时只信设备记忆、不信设备能力,把 supportCloud=false 的设备硬切到云回放 Tab 并以「前一天」初始化;云链路从未 prepared(currentVideoUrl 空、cloudPrepared=false),失败事件 result=0 又恰好落入 result<0 的无退避重试分支,同时 SD 异常态在非 WiFi IPC 上被 return NONE 吞掉——三者叠加,用户既看不到当天录像也收不到失败提示,且失败状态被 saveLastPlaybackTab(tabIndex=1) 固化到下一次。 |
| 5 | iOS 8.4.1.6 冷启动点击离线报警推送后未进入回放 1 期 · 2 条反馈 | 70 | iOS | 8.4.1.6 / 8.4.106 | 欧阳荣、谭伟、陈宝旺 | 当前冷启动没有留下通知响应回调或 KMP 回放路由证据,用户实际停留在普通启动链路;最可能的缺口是冷启动通知回调 / 参数分支未被当前处理逻辑承接或没有兜底,但尚不能确认是 APNs payload 缺 content、回调未到、视图条件拦截还是路由失败。 |
| 6 | Android 8.4.1.7 KMP 回放页关闭窗口无效 1 期 · 1 条反馈 | 70 | Android | 8.4.1.6 / 8.4.1.7 | 唐胜、陈宝旺 | 当前只能确认 KMP 回放页成功创建并出流、用户随后进入其他页面,无法确认关闭请求是否到达 closePage;最可疑点是关闭桥接缺少结果反馈,以及返回键存在双重消费路径,但尚未形成直证。 |
| 7 | iOS 灯光配置「提示失败 / 实际成功」——`NetworkIndicatorEnable="-1"` 非法值导致 1521 返回 -1 1 期 · 3 条反馈 | 68 | iOS | 8.4.1.4 / 8.4.1.6 | 欧阳荣、谭伟 | iOS 端把 1301 + 1108 + 1521 三条独立协议的结果汇聚到同一个回调 block(UserClient.mm:1504 / 5091 / 5099),任一条失败即判定整次保存失败;当 1521 携带设备并不支持的 NetworkIndicatorEnable="-1" 字段时返回 Result="-1",UI 因此报「配置失败」,而 1301 / 1108 已生效 → 用户看到「提示失败、实际成功」。 |
| 8 | Android 8.4.1.6 进入监控长期「一直加载」——`add_watch_result=-1` 连续失败 40 次、首帧迟至 105 秒 3 期 · 10 条反馈 | 66 | Android · iOS | 8.4.1.6 | 唐胜、张威、谭伟、欧阳荣 | 进入监控页时 P2P 通道尚未建立,客户端在 105 秒窗口内以约 10 秒为周期反复 addWatch(返回 -1)→ stopWatch 空转,且无首帧超时兜底,用户侧表现为「一直加载」。 |
| 9 | iOS 回放「当前同时播放人数已达上限」误触发——NVR 主设备与通道共享 `cloudId` 导致额度自占 1 期 · 1 条反馈 | 64 | iOS | 8.3.14.3 / 8.4.1.6 | 欧阳荣、谭伟、位冬 | iOS 端 cloudId 被定义为「NVR 主设备与全部通道的公共分组键」(Camera.h:500 / STDeviceListModel.m:657),回放页又固定以 cameraArray.firstObject 作为回放上下文(STPlaybackVC.m:6046-6048),使单用户单设备场景下也可能同时占用「主设备会话」与「通道会话」两份 NVR 并发额度;一旦 NVR 返回 -7 / -14,STPlaybackVC.m:1422 立即把它翻译成「当前同时播放人数已达上限」并强制停止回放、隐藏功能栏,用户表现为「回放看不了」。 |
| 10 | Android 8.4.1.6「不存录像了」——设备侧存储能力位缺失 2 期 · 6 条反馈 | 63 | Android · HarmonyOS · iOS | 8.4.1.6 / 1.1.1.11 | 唐胜、张威 | 待补证——该 HONOR BRC-AN00 用户的设备在能力协商中未声明本地存储能力,客户端据此既不提示也无法确认存储可用,表现为「不存录像」;需设备端确认存储介质状态与固件行为。 |
🔴 问题 1:iOS 8.4.1.6 冷启动点击离线报警推送后未进入回放 | 负责人:欧阳荣、谭伟、陈宝旺
1. 现象与覆盖范围
- 现象描述:用户收到 App 离线报警通知,点击通知进入 App 后没有直接打开报警对应视频;退出并重新启动 App 后,视频才能正常看到。反馈原文为「app出现报警点击通知进app打不开需要关闭应用在进才能看到视频」。
- 涉及反馈:257576(iOS 8.4.1.6 / iPhone 系统 18.6.2 / 河南商丘夏邑 / 08:07:23,Logan 与 OBS 日志均可下载)
- 覆盖维度:1 平台(iOS)× 1 版本(8.4.1.6)× 1 机型 / 系统(iPhone 18.6.2)× 1 地区(河南商丘)= 4 个记录维度
- 严重度评分:70 / 100(反馈量 10 / 共性 30 / 关键度 30)
- 反馈量 10:窗口内直接同类反馈 1 条;另有 257460 位于窗口起点 17:00:02,已在上一期作为同族问题分析,本期按重复案例处理
- 共性 30:单条反馈本身覆盖平台、版本、机型 / 系统、地区 4 个可核验维度;神策证据进一步覆盖 10,450 名 iOS 用户
- 关键度 30:报警消息进入回放属录像回放链路,取 30
- 关联但不重复计入:257460(iOS 8.4.1.6 / iPhone 26.6 / 河南驻马店)「报警视频打开好卡、点不开、划不动」已在上一期问题 1 与任务
T-20261014-090651-44e1中记录;本期仅将它作为「报警入口稳定性」的延续信号,不重复计算反馈量。
2. 神策证据(核心数据源)
- 事件可用性:
DeviceVideoPlayback在 2026-10-15 有 19,804,911 次 / 5,046,024 用户,2026-10-16 截至 09:00 有 4,124,411 次 / 1,874,602 用户;事件链路正常,下面的异常不是无数据造成。 - 场景分布(10-15 全量 / 10-16 截至 09:00):
| 场景 | 10-15 次数 | 10-15 用户 | 10-16 次数 | 10-16 用户 |
|---|---|---|---|---|
| 预览页面进入回放 | 18,310,441 | 4,752,739 | 3,820,437 | 1,761,176 |
| 报警列表进入回放 | 588,439 | 152,929 | 117,694 | 47,956 |
| 离线推送进入回放 | 557,427 | 224,782 | 128,382 | 77,354 |
| 设备列表进入回放 | 348,932 | 150,756 | 72,009 | 43,161 |
- iOS 版本标识:当前 OBS 日志明确打印
app_version=8.4.106,反馈平台展示为8.4.1.6,可确认为同一 iOS 构建的两种版本表示,不是两套版本。 - 关键异常:10-16 截至 09:00,「离线推送进入回放」在 iOS
8.4.106上: - 会话 14,420 次 / 10,450 用户
- 平均首帧 81,496.683 ms
<= 3 秒14,006 次> 10 秒131 次> 60 秒62 次- 当日样本最大
first_frame_time_ms达 168,000,700 ms - 同期对照:Android 8.4.1.6「离线推送进入回放」为 79,171 次 / 52,768 用户,平均首帧 1,009.709 ms,仅 20 次 > 10 秒、0 次 > 60 秒。
- 趋势:iOS
8.4.106的离线推送回放在 10-09 ~ 10-16 每日均出现超过 60 秒的长尾,单日>60 秒为 326 / 321 / 277 / 327 / 273 / 338 / 291 / 62 次,呈持续状态而非当日单点。 - 证据边界:
>60 秒样本占 iOS 离线推送总会话约 0.43%,不等于「所有用户点击通知都打不开」;但这些极端值说明该入口存在会持续卡在首帧等待的长尾。神策没有「通知回调是否送达」「Push 打开是否成功」事件,因此不能直接用该指标证明反馈 257576 的直接根因。
3. Logan 关键日志(核心数据源)
- 当前问题时段(257576,Logan gzip 1,041 行;OBS zip 内 Log1.txt 90,988 行)
08:06:07.764:app_version=8.4.10608:06:07.766:AppDelegate -- configRootVC - didFinishLaunchingWithOptions08:06:07.788:应用已登录,开始设备列表与 WebSocket 初始化08:06:08.057:重新注册 APNs device token08:06:08.176:取得信令 token08:07:21.611:开始上传反馈日志08:07:22.221:打包并提交反馈日志- 关键缺口:该冷启动片段内未出现
didReceiveNotificationResponse、decodedString、收到离线推送消息、[KMPRouter] openOfflinePushPlaybackPage或PlayBackPage。 - 同用户历史成功片段(OBS Log0.txt,9 月 26 日)
> [L29] 离线推送 -- didReceiveNotificationResponse - ... decodedString: {"bizType":"offline_alarm",...}
> [L44] [KMPRouter] openOfflinePushPlaybackPageBySelectingAlarmTab schedule select alarm tab then open playback, delay=0.10
> [L111] [KMPRouter] openPlaybackPage devId=45104370 ... fromOfflinePush=1 fromAlarmReplay=1
> [L918] hrv_callWithMethod:playVideoByTime, params={"time":"20260926144228",...}
> [L951] FC_P2PNvrReplayByTime success! result:0
- 同一用户在 9 月 26 日、9 月 27 日、9 月 30 日多次成功通过通知进入
PlayBackPage,说明代码中的通知 → 报警 Tab → 回放路由历史可用。 - Logan 结论:当前会话能确认 App 被冷启动、APNs token 正常注册,但没有通知响应回调与 KMP 回放路由。最可能的断点是系统通知响应未进入现有
content处理分支,或进入后被shouldHandlePushInViewController条件拦截;现有日志未覆盖这两个判断结果,因此不能只凭“缺少回调”确证根因。
4. 代码定位(详细)
- 涉及模块:iOS 推送入口与 KMP 回放路由
- 关键类与锚点:
- 通知响应入口
AppDelegate.m:503-562:userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:AppDelegate.m:508:仅当content.userInfo包含"content"时进入离线报警 JSON 解码AppDelegate.m:520-551:Base64 还原 →STRemotePushModel→ 按bizType分流;offline_alarm进入ReceivePushMessageAppDelegate.m:554-558:无"content"字段时只按标题和正文调用旧入口,不会携带报警 deviceId / alarmTime
- 推送消费与页面路由
AppDelegate.m:1074-1121:ReceivePushMessage:Title:,解析成功后保存lineoffPushMsg,并调用KMPRouterKMPRouter.m:458-499:openOfflinePushPlaybackPage,依次校验推送模型、设备列表是否就绪、导航控制器是否可用,再调用openAlarmPlaybackPageWithParamsKMPRouter.m:503-535:先切换报警 Tab,0.1 秒后进入回放;以devUid|alarmTime作为请求键防止重复打开- 调用链:
APNs 通知 → didReceiveNotificationResponse → dict["content"] 解码 → ReceivePushMessage → saveLineoffPushMsg → KMPRouter.openOfflinePushPlaybackPageBySelectingAlarmTab → openAlarmPlaybackPageWithParams → PlayBackPage
- 关键分支:
dict["content"]缺失会走标题 / 正文回退,报警定位参数丢失。popModel.devUid为空或alarmTime无法转成毫秒时间戳时,offlinePushPlaybackPageData返回空,路由直接消费消息而不打开回放。- 设备列表未就绪属于暂时失败,保留未读态等待后续重试;设备已就绪但目标设备不在账号则永久失败。
shouldHandlePushInViewController返回NO时,不会调用KMPRouter,但当前日志未打印该分支结果。- 代码缺口:
AppDelegate.m未检索到UIApplicationLaunchOptionsRemoteNotificationKey冷启动兜底处理。当前依赖 iOS 10+ 的userNotificationCenter:didReceiveNotificationResponse:回调;如果该回调缺失,现有代码没有从launchOptions二次提取报警推送的路径。 - 修复方向锚点:
- 在
didFinishLaunchingWithOptions与didReceiveNotificationResponse同时记录通知来源、userInfo key、bizType、deviceId、alarmTime 和路由结果,先补齐可观测性。 - 对冷启动增加
launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]兜底解析,或在通知响应缺失时从待处理推送模型中恢复。 - 为
shouldHandlePushInViewController的拒绝分支补日志和可重试状态,避免通知被静默吞掉。 - 将 KMP 路由失败结果回传到原生入口,便于区分「已请求打开但回放失败」与「从未请求打开」。
5. 根因结论
- 置信度:🟡 中
- 一句话根因:当前冷启动没有留下通知响应回调或 KMP 回放路由证据,用户实际停留在普通启动链路;最可能的缺口是冷启动通知回调 / 参数分支未被当前处理逻辑承接或没有兜底,但尚不能确认是 APNs payload 缺
content、回调未到、视图条件拦截还是路由失败。 - 关键证据链:
- 当前 Logan:
didFinishLaunchingWithOptions出现,didReceiveNotificationResponse/PlayBackPage缺失。 - 同用户历史 OBS:9 月多个日期同一
offline_alarmpayload 可完整走通通知 → KMP 回放。 - 神策:iOS 8.4.106 离线推送回放每日存在超过 60 秒的长尾,且当天 62 次 >60 秒,说明该入口确有不稳定信号。
- 反馈原话与 Logan 观察互相吻合:关闭 App 再进入后能看到视频,指向冷启动入口而不是视频解码或设备离线。
- 明确不成立的推断:不得写成「iOS 8.4.1.6 报警回放整体失效」。10-16 09:00 前 iOS 8.4.106 仍有 14,006 次离线推送回放在 3 秒内出图,且历史日志多次成功。
6. 建议下一步
- 分配给:欧阳荣(
AppDelegate.m:503-562、AppDelegate.m:1074-1121、KMPRouter.m:458-535及 2026-10-09 离线推送修复提交的主要维护者) - 优先处理项:
- 真机复现「杀进程 → 点击 offline_alarm 通知 → 冷启动」,同时抓取
launchOptions、didReceiveNotificationResponse、ReceivePushMessage、openOfflinePushPlaybackPage全链路日志。 - 为缺失通知响应的冷启动增加
launchOptions兜底,并验证 payload 中content/ 旧标题正文两种形态。
- 验证方法:Android 至少 1 台与 iOS 至少 2 台真机,分别在杀进程、后台、前台三态点击人形侦测报警通知;验收标准为无需重启即可进入对应 deviceId 与 alarmTime 的报警回放,且神策新增的通知入口成功 / 失败事件可区分。
🟠 问题 2:Android 8.4.1.7 KMP 回放页关闭窗口无效 | 负责人:唐胜、陈宝旺
1. 现象与覆盖范围
- 现象描述:用户在 Android 8.4.1.7 的 KMP 回放页看到播放界面后,无法关闭回放窗口;反馈原文仅 8 个字「回放关闭不了窗口」,未说明是左上角返回按钮、系统返回键还是页面内弹层。
- 涉及反馈:257578(Android 8.4.1.7 / Redmi M2012K11AC / 广东江门新会 / 08:35:50,Logan 与 OBS logcat 均可下载)
- 覆盖维度:1 平台(Android)× 1 版本(8.4.1.7)× 1 品牌 / 机型(Redmi M2012K11AC)× 1 地区(广东江门)= 4 个记录维度
- 版本状态:8.4.1.7 在本窗口仅 1 条反馈;神策 10-15 ~ 10-16 也仅记录到预览场景 13 次 / 6 用户,尚无足量覆盖,属于新版本早期信号。
- 严重度评分:70 / 100(反馈量 10 / 共性 30 / 关键度 30)
- 反馈量 10:窗口内直接反馈 1 条
- 共性 30:平台、版本、品牌 / 机型、地区 4 个记录维度;但只有单一样本,样本广度不足
- 关键度 30:录像回放类,取 30
2. 神策证据(核心数据源)
- 事件可用性:
DeviceVideoPlayback链路在 Android 8.4.1.6 上数据充分,但 Android 8.4.1.7 当前几乎无覆盖:
| 日期 | 场景 | 次数 | 用户 |
|---|---|---|---|
| 2026-10-15 | 预览页面进入回放 | 11 | 5 |
| 2026-10-16 | 预览页面进入回放 | 2 | 1 |
- 8.4.1.7 未出现「报警列表进入回放 / 离线推送进入回放 / 设备列表进入回放」场景事件。
- 同日 Android 8.4.1.6 回放链路基线正常:预览页面进入回放 2,384,522 次,离线推送进入回放 79,171 次、平均首帧 1,009.709 ms,报警列表进入回放 71,564 次、平均首帧 1,095.496 ms。
- 关键缺口:
DeviceVideoPlayback没有“关闭回放 / 页面退出结果 / closePage 调用结果”字段,无法从服务端回答有多少关闭请求失败。本问题不能以 8.4.1.6 的成功率替代 8.4.1.7 结论。
3. Logan 关键日志(核心数据源)
- 反馈 257578(Android 8.4.1.7 / Redmi M2012K11AC,156,418 bytes / 9,820 行)
- 回放页创建:
> [L2668] 08:33:04.032 KMP_SCAN_TRACE-onCreate page=PlayBackPage data={"devId":"47073890-CH-1",...,"fromPreviewPlayback":true,"canRotate":true}
- 页面初始化与常亮:
> [L2764] PlayBackPage created, portraitWidth: 392.72726, portraitHeight: 825.4545
> [L2792] PlaybackScreenAwake-Screen awake request page=PlayBackPage enabled=true
> [L2847] PlaybackScreenAwake-Screen awake applied=true
- 回放启动与下层应答:
> [L3097] KMPPlayBackVideoView: playVideoByTime devId=47073890-CH-1, time=20261016071843, alarmType=268435455, audioEnable=1
> [L3101] RecordPlayerView-startReplay: devId=47073890-CH-1, date=20261016071843, recordType=268435455
> [L3162] LibImpl-onNvrReplayResp, act=0,have audio=1,video codec=H265
- 后续页面栈:
> [L4515] KMP_SCAN_TRACE-onCreate page=AccountManagePage
> [L4616] KMP_SCAN_TRACE-onCreate page=SystemSetPage
> [L4705] KMP_SCAN_TRACE-onCreate page=ImprovePage
> [L5551] KMP_SCAN_TRACE-onCreate page=MessageCenterPage
- 关键缺口:日志内没有
closePage、finish、onDestroy或可识别的关闭按钮事件;能看到用户后续进入其他 KMP 页面,无法判断回放页是被正常压栈、被关闭失败,还是关闭后 Activity 仍停留在栈底。 - 反馈 257578 的 OBS logcat(2,451 行):
- 文件从
08:33:42.898开始,时间为回放页首次创建后约 38 秒。 - 可看到
WelcomeActivity超时线程、MainActivity2、KuiklyRenderActivity与KEYCODE_BACK事件,但未覆盖首次点击关闭的准确时刻,不能作为直接失败证据。 - 结论:两路日志可证明回放已启动出流,不能证明关闭调用到达原生桥接。
4. 代码定位(详细)
- 涉及模块:Android KMP 宿主容器、原生桥接、KMP 回放页
- 关键类与锚点:
- 关闭页桥接
KMPBridgeModule.kt:856-858:closePage(params)仅执行activity?.finish(),无日志、无 Promise / callback、无isFinishing结果KRRouterAdapter.kt:19-21:框架路由关闭同样只执行(context as? Activity)?.finish()KuiklyRenderActivity.kt:564-572:closePages(pageNames)按页面名查找 Activity 后调用finish()
- 返回键处理
KuiklyRenderActivity.kt:288-295:注册OnBackPressedCallback,若无框架消费则关闭当前 callback 后再次调用 dispatcherKuiklyRenderActivity.kt:410-419:dispatchKeyEvent在ACTION_UP再次调用kuiklyRenderViewDelegator.onBackPressed();未消费时再委托super.dispatchKeyEvent- 风险点:一次系统返回键可能先后经过
dispatchKeyEvent与OnBackPressedCallback两套入口;如果前端某次返回true但没有真正执行关闭,事件会被吞掉,表现为“点了没反应”
- 检测到页面仍在活动
KMP_SCAN_TRACE-onCreate page=PlayBackPagePlaybackScreenAwake applied=trueRecordPlayerView-startReplay与onNvrReplayResp act=0- 调用链(界面关闭按钮,推断):
PlayBackPage 关闭按钮 → KMPBridgeModule.closePage → activity?.finish() → KuiklyRenderActivity.onDestroy
- 调用链(系统返回键):
KeyEvent.ACTION_UP → dispatchKeyEvent → kuiklyRenderViewDelegator.onBackPressed → [消费则返回 true];[未消费则 super → OnBackPressedCallback → onBackPressedDispatcher → finish]
- 关键缺口:
closePage未记录pageName、调用来源、Activity 是否为空、调用前后isFinishing。- 无 KMP 前端页面源码,无法确认关闭按钮是否一定调用了
closePage;当前仓库只看到原生桥接。 - 无关闭失败的统一错误回调,用户点击后前端无法显示失败或回退。
- 修复方向锚点:
- 在
KMPBridgeModule.closePage增加结构化日志与回调,记录pageName、activity null、isFinishingBefore/After。 - 统一返回键处理为单一路径,消除
dispatchKeyEvent与onBackPressedDispatcher的双重消费风险。 - 在前端关闭按钮点击处补埋点,区分「未调用桥接」「桥接收到但未 finish」「Activity 已 finish 但 UI 未消失」。
5. 根因结论
- 置信度:🔴 弱
- 一句话根因:当前只能确认 KMP 回放页成功创建并出流、用户随后进入其他页面,无法确认关闭请求是否到达
closePage;最可疑点是关闭桥接缺少结果反馈,以及返回键存在双重消费路径,但尚未形成直证。 - 关键证据链:
- Logan 证明 257578 在 08:33:04 创建
PlayBackPage。 - 下层
onNvrReplayResp act=0证明播放链路已启动,问题不在首个出流请求。 - 反馈原文只描述关闭窗口失败,与关闭桥接 / 返回键路径直接相关。
- 当前代码中
closePage仅finish且无日志,无法自证调用成功或失败。 - 明确不成立的推断:不得写成「8.4.1.7 回放页完全无法退出」。后续日志显示用户已进入账号管理、系统设置和消息中心等页面,说明页面栈并非绝对卡死;问题可能仅限于某个关闭按钮、弹层或返回键分支。
6. 建议下一步
- 分配给:陈宝旺(KMP 宿主返回键处理与桥接维护者);唐胜配合确认
PlayBackPage关闭按钮前端调用与页面状态 - 优先处理项:
- 在
closePage和返回键两条路径补全链路日志、调用来源、Activity 状态和最终 finish 结果。 - 复核
dispatchKeyEvent与onBackPressedDispatcher的双重处理,确保一次返回只执行一次关闭决策。
- 验证方法:使用 8.4.1.7 真机分别验证播放页左上角关闭、系统返回键、手势返回和页面内弹层关闭;每次记录前端按钮事件、桥接调用、
finish结果与最终可见 Activity。回归卡回放、云回放和报警回放三种入口。
本期扫描全量(全部沉淀到知识库)
Markdown 保留全部反馈;HTML 呈现时渲染器会自动折叠 🟣 普遍性网络问题。以下分组覆盖窗口内 122 条反馈。
| # | 关键词 | 反馈数 | 分类 | 处置 |
|---|---|---|---|---|
| 3 | 离线报警推送 / 报警回放不可见 | 4 | 🟠 进雷达 | 问题 1及同族待补证 |
| 4 | KMP 回放关闭、录像打不开、回放不可见 | 6 | 🟠 进雷达 | 问题 2及同族待补证 |
| 5 | 预览无画面 / 加载 70% / 双画面变单画面 | 4 | 🟡 单点待补证 | 未达到跨样本阈值 |
| 6 | 停电恢复后设备不可用 / 掉线 | 2 | 🟡 单点待补证 | 与已有断电恢复任务关联 |
| 7 | 性能与页面卡顿 | 1 | 🟡 单点待补证 | 日志未覆盖问题时段 |
| 8 | 时间同步、灯光模式、账号注销、AI 转人工 | 4 | 🟤 咨询建议 / 操作 | 已排除 |
| 9 | 无效文本(。 / 无 / ok / 乱码) | 5 | 🟢 无效文本 | 已排除 |
| 10 | 辱骂、重复灌水、与产品无关文本 | 10 | 🟢 无效文本 | 已排除 |
| 11 | 未知或描述不足 | 1 | 🟡 单点待补证 | 待回访 |
已折叠 2 条普遍性网络问题(含-102/-101/-1002与中/英/俄/法/西/葡/土/阿/日多语言网络提示模板,如Проверьте телефонную сеть、Please check your mobile network);全量明细见同名 Markdown 知识库。
本期重点反馈明细(非网络类,按时间倒序)
| ID | 时间 | 平台 | 版本 | 机型 | 地区 | 反馈摘要 | Logan | 处置 |
|---|---|---|---|---|---|---|---|---|
| 257578 | 08:35 | Android | 8.4.1.7 | Redmi M2012K11AC | 广东江门 | 回放关闭不了窗口 | ✓ | 🟠 问题 2 |
| 257577 | 08:11 | Harmony | 1.1.1.11 | HUAWEI SUP-AL90 | 河北廊坊 | 停电以后不能看回放 | ✗ | 🟡 与断电恢复任务关联 |
| 257576 | 08:07 | iOS | 8.4.1.6 | iPhone 18.6.2 | 河南商丘 | 报警通知进入 App 打不开,重启后才能看视频 | ✓ | 🟠 问题 1 |
| 257569 / 257567 / 257566 / 257565 / 257564 / 257563 / 257562 / 257561 / 257560 / 257559 | 07:33-07:49 | Android | 8.3.2.3 | OPPO PFTM10 | 湖北恩施 | 同一用户连续辱骂灌水,无产品信息 | ✗ | 🟢 无效文本 |
| 257558 | 07:16 | iOS | 8.4.1.6 | iPhone 17.6.1 | 未披露 | 页面太卡了 | ✓ | 🟡 待补证 |
| 257557 | 07:16 | Android | 8.4.1.6 | OPPO PLN110 | 广东 | 报警里原来有录像回放,现在只有照片 | ✓ | 🟡 报警回放同族 |
| 257554 | 06:34 | Android | 8.4.1.6 | HONOR BRP-AN00 | 未披露 | 录像根本打不开 | ✓ | 🟡 回放同族 |
| 257553 | 06:16 | Harmony | 1.1.1.11 | HUAWEI CHZ-AL00 | 未披露 | 。 | ✗ | 🟢 无效文本 |
| 257542 | 04:22 | Android | 8.4.1.6 | HONOR KOZ-AL00 | 未披露 | 无 | ✓ | 🟢 无效文本 |
| 257540 | 04:04 | Android | 8.3.0.7 | OPPO PKV110 | 未披露 | 停电后恢复,监控不能用了 | ✗ | 🟡 与断电恢复任务关联 |
| 257530 | 23:49 | Android | 8.3.13.3 | samsung SM-A127F | 未披露 | ok | ✓ | 🟢 无效文本 |
| 257528 | 23:33 | Harmony | 1.1.1.11 | HUAWEI HBP-AL00 | 未披露 | 摄像头直接用不成 | ✗ | 🟡 待补证 |
| 257512 | 21:28 | Harmony | 1.1.1.11 | HUAWEI DEL-AL20 | 未披露 | 监控时间和北京时间不同步 | ✗ | 🟡 待补证 |
| 257511 | 21:23 | Android | 8.4.1.6 | HONOR PGT-AN00 | 未披露 | 转人工不转,一直提示 AI 服务 | ✓ | 🟤 操作 / 客服 |
| 257510 | 21:04 | Android | 8.4.1.6 | OnePlus PJF110 | 未披露 | 不能调灯光模式 | ✓ | 🟡 待补证 |
| 257506 | 20:40 | iOS | 8.4.1.6 | iPhone 26.6.1 | 未披露 | 视频报警没有了吗 | ✓ | 🟡 报警回放同族 |
| 257505 | 20:40 | Android | 8.0.1.4 | samsung SM-F7110 | 未披露 | 光掉线 | ✗ | 🟡 待补证 |
| 257503 | 20:28 | Harmony | 1.1.1.11 | HUAWEI JUY-AL50 | 未披露 | 两个监控有时变成一个画面 | ✗ | 🟡 待补证 |
| 257493 | 20:02 | Android | 8.4.1.6 | Redmi 24094RAD4C | 未披露 | 需要注销原账户 | ✓ | 🟤 账号操作 |
| 257486 | 19:56 | Android | 8.4.1.6 | vivo V2318A | 未披露 | 一十术相 | ✓ | 🟢 无效文本 |
| 257480 | 19:33 | Android | 8.4.1.6 | vivo V2318A | 未披露 | 门问口 | ✓ | 🟢 无效文本 |
| 257477 | 19:21 | Android | 8.4.1.6 | vivo V2057A | 未披露 | 监控总是没有画面,看不到 | ✓ | 🟡 待补证 |
| 257476 | 19:17 | Android | 8.4.1.6 | HONOR BRP-AN00 | 未披露 | 恢复出厂 | ✓ | 🟤 操作 |
| 257475 / 257474 | 19:16 / 19:15 | Android | 8.3.0.5 | Xiaomi 23127PN0CC | 未披露 | 同一用户连续反馈查看不了回放 / 回放视频 | ✗ | 🟡 回放同族 |
| 257472 | 19:15 | Android | 8.4.1.6 | Xiaomi 23127PN0CC | 未披露 | 监控加载到 70% 后不出来 | ✓ | 🟡 待补证 |
| 257469 | 18:51 | Harmony | 1.1.1.11 | HUAWEI CHZ-AL00 | 未披露 | 没有报警消息 | ✗ | 🟡 报警同族 |
| 257460 | 17:00 | iOS | 8.4.1.6 | iPhone 26.6 | 河南驻马店 | 报警视频打开卡、反应慢、点不开 | ✓ | 🟡 上一期同族,重复案例 |
HarmonyOS Logan 覆盖情况(第 14 期连续零覆盖)
| 指标 | 本期 |
|---|---|
| HarmonyOS 非网络反馈 | 6 |
| HarmonyOS Logan 提供数 | 0 |
| 覆盖率 | 0 / 6 |
本窗口 HarmonyOS 的 257577、257528、257512、257503、257469、257553 均无 Logan。断电不能回放、无报警消息、画面异常等问题无法进一步定位。
近期问题延续
| 主题 | 本期证据 | 处置 |
|---|---|---|
| iOS 报警消息列表 / 回放卡顿 | 257460 位于窗口起点,上一期已分析;257576 出现新的冷启动推送入口问题 | 新任务 T-20261016-090737-bec4;旧任务 T-20261014-090651-44e1 继续 |
| Android KMP 回放状态同步 | 257578 为 8.4.1.7 新版本的关闭交互症状,暂不归入上一期的常亮、时间轴、缩放三条直证 | 新任务 T-20261016-090740-b84d |
| HarmonyOS 断电 / 离线恢复 | 257577「停电以后不能看回放」、257540「来电后不能用了」形成跨端供电恢复线索,但均无 Logan | 沿用 T-20261014-090651-0bee,维持 P1 |
| HarmonyOS 预览 / 回放不可用 | 本窗口 257577、257528 延续,无可用日志 | 沿用 T-20260926-170258-2226、T-20260920-090147-8d1e |
| 网络类 -102 / -101 | 本窗口 85 条,仍占 69.7% | 沿用既有网络专项,不计入功能问题 |
任务账本联动
| 任务 ID | 标题 | 状态 | 处置 |
|---|---|---|---|
T-20261016-090737-bec4 | 核查 iOS 8.4.1.6 冷启动点击离线报警推送未进入回放且需重启 | P1 / captured / 欧阳荣 | 本期新建:launchOptions、通知回调、KMP 路由全链路补证,验证无需重启进入报警回放 |
T-20261016-090740-b84d | 核查 Android 8.4.1.7 KMP 回放页关闭窗口无效 | P1 / captured / 陈宝旺 | 本期新建:补 closePage 结果日志,复核返回键双消费,真机回归关闭按钮与系统返回 |
T-20261014-090651-44e1 | 核查 iOS 8.4.1.6 报警消息列表卡顿 | P1 / captured | 延续:257460 为上一期样本;257576 是新的冷启动推送入口问题,不改变原任务 |
T-20261014-090651-0bee | 核查 HarmonyOS 1.1.1.11 设备频繁离线且断电不恢复 | P1 / captured | 本期延续:257577 与 257540 支持跨端供电恢复失败线索,但 Logan 不足 |
T-20260926-170258-2226 | 排查 HarmonyOS 1.1.1.11 实时预览与回放大范围不可用 | P1 / captured | 本期延续:257577、257528,Logan 仍为零覆盖 |
T-20260920-090147-8d1e | 核查 HarmonyOS 1.1.1.8 监控实时画面与回放不可用 | P1 / captured | 本期无版本专属新样本,维持观察 |
T-20260926-170258-576a | 核查 Android 8.4.1.6 KMP 回放页缺少屏幕常亮导致回放熄屏 | P1 / captured | 本窗口无新增常亮类直证,维持观察 |
T-20260922-170415-9496 | 排查 Android 卡回放拖动卡顿与时间跳转异常 | P1 / captured | 本窗口无新增时间轴直证,维持观察 |
数据源状态汇总
| 数据源 | 状态 | 说明 |
|---|---|---|
| 反馈平台 | ✅ 正常 | total=122 / fetched=122 / complete=true / pages=3,真实分页拉全;窗口 2026-10-15 17:00:00 ~ 2026-10-16 09:00:20 |
| 心愿单 | ✅ 恢复 | total=14 / fetched=14 / complete=true,认证恢复正常 |
神策 DeviceVideoPlayback | ✅ 正常 | 10-15 约 1,980 万次,10-16 09:00 前约 412 万次;支持场景、平台、版本、首帧分组 |
神策 CloudPlayback | ✅ 可用 | 10-15 28.0 万次 / 11.8 万用户,10-16 09:00 前 6.3 万次 / 3.6 万用户 |
| 神策通知回调 / 推送打开事件 | ❌ 缺失 | 未找到可直接回答「通知是否送达、是否点击、是否进入回放」的事件;问题 1 依赖 Logan 与 DeviceVideoPlayback 间接证据 |
| 神策回放关闭结果事件 | ❌ 缺失 | DeviceVideoPlayback 无 close / exit 结果字段;问题 2 无法量化 |
| Logan(iOS) | ✅ 有效 | 257576 当前 Logan 覆盖冷启动,OBS zip 含同用户 9 月成功链路;但当前回调缺失只能作为缺口证据 |
| Logan(Android) | ✅ 有效 | 257578 Logan 覆盖回放创建与出流;OBS logcat 未覆盖首次关闭动作 |
| Logan(HarmonyOS) | ❌ 零覆盖 | 6 条非网络反馈 0 份日志,连续第 14 期 |
| 代码定位 | ✅ 正常 | iOS 与 Android 标准仓库可读;KMP 前端页面代码不在当前工作区,关闭按钮调用点待前仓复核 |
| 友盟 | ⏭️ 未调用 | 本期无崩溃 / ANR / 闪退类反馈,按 skill 规则不查友盟 |
| TAPD | ⏭️ 未调用 | 本期为功能链路根因分析,按 skill 规则不以历史 Bug 干扰;已知 iOS 相关单号仅在代码提交中引用 |
心愿单亮点
| 心愿单 ID | 平台 / 版本 | 诉求 | 价值判断 |
|---|---|---|---|
| 5332 | Android 8.4.1.6 | 设置几个预置点轮流监控,每隔 2 分钟切换位置 | ⭐⭐ 可增强无人值守巡检场景,但涉及云台调度与配置保存 |
| 5333 | Android 8.4.1.6 | 人、车、动物等事件录像在时间轴上使用不同颜色 | ⭐⭐⭐ 与现有 AI 事件和时间轴能力契合,便于快速定位录像 |
| 5330 | Android 8.4.1.6 | 增加摄像头查看记录,记录谁看过设备 | ⭐⭐ 有账号安全和共享审计价值 |
| 5331 | Android 8.4.1.6 | 回放下载支持自定义时长,不受会员下载时长限制 | ⭐⭐ 涉及商业化权益与套餐边界,需产品评估 |
| 5336 | Android 8.4.1.6 | App 打开动图可自选关闭 | ⭐ 体验开关,适合作为低优先级个性化设置 |
待补证
- iOS 冷启动通知回调缺口:需要复现「杀进程 → 点击 offline_alarm 通知」,同时记录
launchOptions、userInfokey、didReceiveNotificationResponse、ReceivePushMessage、KMPRouter与PlayBackPage。当前日志只能确认缺失,不能确认缺失发生在系统回调还是dict["content"]分支。 - iOS 通知点击埋点缺失:需要新增通知到达 / 点击 / 路由成功 / 路由失败事件,才能把神策
DeviceVideoPlayback的长尾与具体通知入口对齐。 - iOS 长尾数据校验:
first_frame_time_ms出现 8.65 亿毫秒等极端值,需确认是否存在 App 挂起后恢复时才补报的时间差;否则该字段不能直接对外表述为“用户等待了 10 天”。本期只把它作为长尾信号,不作为用户体验时长。 - Android 8.4.1.7 closePage 调用结果:当前日志没有
closePage、finish或页面销毁记录;需补结构化日志后复现。 - Android 返回键双路径复核:
KuiklyRenderActivity.dispatchKeyEvent与OnBackPressedCallback对同一返回事件存在重复处理可能,需要 owner 确认是否符合 Kuikly 框架预期。 - KMP 前端关闭按钮源码:当前工作区只有 Android 宿主与桥接,
PlayBackPage关闭按钮是否调用closePage需在 KMP 前端仓库核对。 - HarmonyOS Logan 连续 14 期零覆盖:需服务端与客户端共同定位上报链路断点;在补齐前,HarmonyOS 回放、报警、断电恢复问题均只能维持弱置信度。
- 断电恢复跨端线索:257577(HarmonyOS)与 257540(Android)均为供电恢复后设备不可用,需回访确认设备是否重新上线、是否恢复出厂、指示灯与网络状态;不能仅凭反馈文案归因 App。
下一期 = 第236期 = 2026-10-16-H17(今天下午 17:00;窗口 今日 09:00 ~ 17:00)