Seetong · Report
🎯 Seetong 问题雷达 17:00 第238期
时间窗口:2026-10-17 09:00:00 ~ 17:00:00(Asia/Shanghai)
TL;DR 核心要点
- 🔴 iOS 老版本微信登录在授权回调未返回 code 时仍继续提交请求,服务端以 30100222 拒绝;窗口内 1 条明确反馈,近 8 天同一错误共 38 次并覆盖 8 个 iOS 构建、至少 12 个省级地区,严重度 80 / 100,置信度中。反馈 257800 的完整 Logan 已直证 SendAuthReq 成功拉起微信、回跳后授权码为空、客户端仍请求 /seetong-member-auth/oauth/token,服务端返回“第三方授权码不能为空”。新建任务 T-20261017-170452-1877。
- 🟠 HarmonyOS 1.1.2.3 出现 2 名独立用户无法对讲或语音通话,严重度 65 / 100,置信度中。两条反馈均无 Logan,神策也只有对讲点击次数而没有启动结果;代码侧确认首次授权麦克风后不会自动续执行本次对讲,且音频采集器初始化与启动之间存在空对象/异步失败吞掉路径。新建任务 T-20261017-170555-e261。
- 257800:iOS 8.1.3.5、iPhone 18.7.10、河南南阳,10:03 提交“登录失败(30100222)。上传错误日志以便更快发现并修复问题。”反馈平台版本与神策 $app_version=8.1.305 对应。
最近一个月 Top 问题
按严重度与复发期数排序,已把跨期同类反馈归集;负责人由问题代码锚点对应的 Git 提交历史(blame / 近期主要提交者)反查;数据窗口:最近 30 天(截至 2026-10-17)。
| # | 问题(严重度降序) | 严重度 | 平台 | 版本 | 负责人 | 问题原因 |
|---|---|---|---|---|---|---|
| 1 | Android 8.4.1.6 及 HarmonyOS 1.1.1.11 单设备随机离线、P2P 恢复失败 15 期 · 139 条反馈 | 100 | Android · HarmonyOS | 1.1.1.11 / 8.4.1.6 / 1.1.1 | 陈宝旺、冉博麟、唐胜、许源 | 257582、257639 已确认是服务端心跳长期停更并伴随 P2P 离线,App 只是按离线状态展示;问题更可能在设备端、设备网关/P2P 服务或固件恢复机制,而不是 Android 播放器单点故障。 |
| 2 | Android 与 iOS 8.4.1.6 报警功能突然失效与通知不达 1 期 · 3 条反馈 | 90 | Android · iOS | 8.4.1.6 | 陈宝旺、许源 | 现有客户端样本表明 Android 通知权限与 token 注册均成功,故障更接近“服务端未生成报警或推送任务未送达”,但神策缺少报警生成与推送到达事件,iOS 样本又混合了通知权限关闭,当前不能完成单点定因。 |
| 3 | 升级后回放体验整体退化 4 期 · 18 条反馈 | 85 | Android · iOS | 8.4.1.6 / 8.3.14.2 | 唐胜、许源、欧阳荣、谭伟 | 8.4.1.6 对回放链路做了多处改动(时间条 UI、通道切换进度对齐、报警-录像联动),导致回放体验多点退化;Logan 显示取流层无崩溃,问题在"UI/状态对齐 + 报警录像关联"而非连接失败。 |
| 4 | 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,回放过程中发生系统级息屏。 |
| 5 | iOS 老版本微信登录空授权码触发 30100222 1 期 · 1 条反馈 | 80 | iOS | 8.1.3.5 / 8.1.305 / 8.1.503 | 位冬 | 微信授权回跳在当前旧版 iOS 上返回了空 code,客户端没有把它视为失败边界,仍向服务端提交空授权码,最终稳定触发 30100222。 |
| 6 | 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) 固化到下一次。 |
| 7 | iOS 8.4.1.6 冷启动点击离线报警推送后未进入回放 1 期 · 2 条反馈 | 70 | iOS | 8.4.1.6 / 8.4.106 | 欧阳荣、谭伟、陈宝旺 | 当前冷启动没有留下通知响应回调或 KMP 回放路由证据,用户实际停留在普通启动链路;最可能的缺口是冷启动通知回调 / 参数分支未被当前处理逻辑承接或没有兜底,但尚不能确认是 APNs payload 缺 content、回调未到、视图条件拦截还是路由失败。 |
| 8 | Android 8.4.1.7 KMP 回放页关闭窗口无效 1 期 · 1 条反馈 | 70 | Android | 8.4.1.6 / 8.4.1.7 | 唐胜、陈宝旺 | 当前只能确认 KMP 回放页成功创建并出流、用户随后进入其他页面,无法确认关闭请求是否到达 closePage;最可疑点是关闭桥接缺少结果反馈,以及返回键存在双重消费路径,但尚未形成直证。 |
| 9 | 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 已生效 → 用户看到「提示失败、实际成功」。 |
| 10 | 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 空转,且无首帧超时兜底,用户侧表现为「一直加载」。 |
🔴 问题 1:iOS 老版本微信登录空授权码触发 30100222 | 负责人:位冬
现象与覆盖范围
- 257800:iOS 8.1.3.5、iPhone 18.7.10、河南南阳,10:03 提交“登录失败(30100222)。上传错误日志以便更快发现并修复问题。”反馈平台版本与神策
$app_version=8.1.305对应。 - 窗口内只有这 1 条明确登录反馈,但神策显示同类失败并非只发生在单一用户:10 月 17 日 iOS 微信登录共出现 4 次 30100222,涉及 3 名用户和 8.1.503、8.1.305、8.2.102 三个构建;地区为广东、河南、山东。
- 10 月 10 日至 17 日累计 38 次 30100222、33 个用户日,单日 3~9 次,覆盖 8 个 iOS 构建和至少 12 个省级地区,说明这是持续存在的老版本兼容问题,而不是 8.1.3.5 的单点偶发。
- 严重度评分:80 / 100(反馈量 10 / 共性 30 / 业务关键度 40)。登录是进入设备、回放和消息能力的唯一入口,失败会阻断整个 App 主流程。
神策证据
- iOS 8.1.305 的微信登录 10 月 10 日至 17 日逐日事件量为 30、26、29、27、24、29、25、24;其中 30100222 分别为 0、0、2、1、1、1、1、1 次,涉及用户均为 1 名/日。10 月 12 日至 17 日合计 7 次失败 / 158 次微信登录事件,失败占比约 4.43%。
- 10 月 17 日全 iOS 微信登录的 30100222 为 4 次 / 3 名用户:8.1.503 为 2 次 / 1 人,8.1.305 为 1 次 / 1 人,8.2.102 为 1 次 / 1 人。
- 最新 iOS 8.4.106 当日微信登录事件 10,297 次,30100222 为 0;当前证据指向旧版本授权回跳兼容性,不支持“全 iOS 微信登录均不可用”的结论。
Logan 关键日志
- 反馈 257800 的附件共 2 个日志、94,250 行;关键链路位于
Log0.txt:34484-34515。 Log0.txt:34484-34488:08:19:39 发起SendAuthReq,launch app with universal link, ret:1,微信 SDK 1.9.2 已成功拉起。Log0.txt:34496-34497:08:19:43 微信回跳,记录wxlog:clear property list与wxlog:command:2030。Log0.txt:34507-34511:请求体明确包含third_party=wechat、third_party_code="";服务端返回code=30100222, msg=第三方授权码不能为空。Log0.txt:34512-34515:客户端随后记录“第三方登录接口执行失败”和“登录失败(30100222)”,未在本地拦截空授权码。- 该日志同时证明通知权限、网络和微信拉起不是本次失败原因;唯一直接断点是授权回调结果没有可用的 code。
代码定位
STLoginViewController.m:1125-1130:managerDidRecvAuthResponse只判断errCode == WXSuccess,随即调用loginRequestWithAuthCode:response.code type:kSTThirdLoginWechat,没有校验response.code非空。STLoginViewController.m:1438-1462:微信登录使用固定state = @"xxx",scope 同时申请消息、用户信息、好友和联系人权限;固定 state 无法可靠关联本次请求和回跳。STLoginViewController.m:777-811:loginRequestWithAuthCode:将授权码通过kEmptyStr(authCode)放入third_party_code,空值仍会进入服务端请求。STLoginViewController.m:854-912:请求失败后直接走通用错误提示和埋点,没有识别 30100222,也没有自动重新拉起授权或引导用户重试。WXApiManager.mm:24-36:管理器只按响应类型转发,不校验响应内容;AppDelegate.m:375-405与430-443分别接 URL Scheme 和 Universal Link,但当前日志只有 SDK 的通用command:2030,没有回调字段级诊断。
根因结论
- 置信度:🟡 中。
- 一句话根因:微信授权回跳在当前旧版 iOS 上返回了空 code,客户端没有把它视为失败边界,仍向服务端提交空授权码,最终稳定触发 30100222。
- 关键证据链:反馈错误码与 Logan 服务端响应完全一致;Logan 直证请求参数为空;神策证明多个旧构建和多个地区近期持续出现同一错误,最新 8.4.106 当日未出现。
- 证据边界:日志无法区分空 code 来自微信侧异常、用户取消后的错误映射还是旧 SDK 回跳兼容问题;这不影响“客户端应在发请求前拦截空 code”的结论,但不能把所有 30100222 都解释为同一上游原因。
修复建议
- 分配给:位冬(iOS 微信授权与登录回调),欧阳荣复核登录主流程。
- 在
managerDidRecvAuthResponse:增加硬门禁:校验errCode、errStr、code非空和 state 匹配,任一不满足都停止请求并展示可重试提示。 - 为每次授权生成一次性随机 state 并保存,回跳后消费并校验,避免串回调;移动端登录 scope 收敛到实际需要的
snsapi_userinfo,减少无效权限和微信侧异常分支。 - 对 30100222 增加客户端专用兜底,不展示原始错误码;保留“重新授权”和“手机号/密码登录”两个明确出口。
- 回归覆盖用户取消、微信未安装、热启动回跳、冷启动 Universal Link、回调成功但 code 为空、正常 code 登录六种场景,至少覆盖 iOS 18.x + 8.1.x 旧包和当前 8.4.x 包。
- 任务账本:
T-20261017-170452-1877,状态P1 / captured。
🟠 问题 2:HarmonyOS 1.1.2.3 对讲启动无反馈 | 负责人:陈宝旺
现象与覆盖范围
- 257817:HarmonyOS 1.1.2.3、HUAWEI PLR-AL50、安徽六安,11:33 提交“为什么不能语音通话”。
- 257883:HarmonyOS 1.1.2.3、HUAWEI GRL-AL10、河北张家口,16:45 提交“不能对话”。
- 两条来自 2 名独立用户、2 个机型、2 个省级地区;另有同一青海账号在 16:08、16:20 先后提交“收不到”“收到了”,证据指向状态已恢复,未并入本问题。
- 严重度评分:65 / 100(反馈量 10 / 共性 30 / 业务关键度 25)。对讲属于远程查看核心交互,但不影响设备在线和视频主链路。
神策证据
- 反馈版本 1.1.2.3 在神策当前 HarmonyOS 运行版本口径中映射为
$app_version=8.4.1.6。 - 10 月 17 日 HarmonyOS 共有 469,264 个
PreviewSessionSummary会话,其中 12,526 个会话发生对讲点击,累计 103,810 次;10 月 10 日至 17 日有点击会话占比稳定在 2.67%~3.11%,没有平台级入口消失或使用量骤降。 PreviewSessionSummary.talk_click_count只统计点击,不记录startTalk成功/失败、错误码、录音器状态和首段音频上传结果;因此神策不能验证这两名用户具体卡在权限、SDK 启动还是音频采集。
Logan 与代码证据
- 257817、257883 均未提供 Logan,无法获得
TPS_MSG_RSP_TALK.frag、设备能力或麦克风授权结果。 ViewPage.ets:878-927:首次长按对讲时若没有麦克风权限,reqMicrophonePer的回调只执行AudioCapturered.init,随后直接return,不会自动继续本次startTalk。用户授权后必须松手再长按第二次,首次操作表现为“没有反应”。ViewPage.ets:913-923:startTalk成功后先设置isTalking=true,再调用AudioCapturered.start();该异常被空的catch吞掉,界面仍可能显示“对讲中”,但设备收不到音频。AudioCapturerUtils.ets:71-86:start()检查的是包装单例audioCapturer,随后却访问可能尚未创建完成的原生对象audioCapturered;ViewPage.aboutToAppear的异步初始化和首次长按存在竞态。AudioCapturered.init在audio.createAudioCapturer失败时只写 console 后返回,没有把失败传回页面或原生对讲状态机,无法触发回滚与用户提示。
根因结论与建议
- 置信度:🟡 中。代码存在可直接导致“首次无反应”和“假对讲中”的路径,但缺少两条反馈的 Logan,不能确认二者命中同一分支。
- 一句话根因:HarmonyOS 对讲将权限请求、音频采集器异步初始化和底层
startTalk拆成未串联的状态链,失败既不恢复用户意图也不回滚界面状态。 - 分配给:冉博麟(HarmonyOS 对讲与音频采集),陈宝旺协助复核跨端对讲桥接。
- 将流程改为单一
startTalk状态机:权限通过后自动继续原请求;等待AudioCaptureredready 后再启动底层对讲;采集失败必须立即stopTalk、恢复监听并提示用户。 - 增加
devId、权限结果、capturer 状态、startTalk错误码、首段音频长度、停止原因和耗时的结构化埋点,替代只有点击次数的汇总口径。 - 用 HarmonyOS 1.1.2.3 两台真机覆盖首次授权、已授权、拒绝后去设置授权、设备不支持对讲、设备忙、网络断开六种场景;验收要求每次操作都有成功/失败反馈,无“对讲中”假态。
- 任务账本:
T-20261017-170555-e261,状态P1 / captured。
本期全量扫描与排除
下表覆盖窗口内全部 93 条反馈。网络模板反馈按同一错误口径合并,非网络反馈保留全部反馈 ID。
| 关键词簇 | 反馈数 | 分类 | 处置 |
|---|---|---|---|
-102 多语言网络提示 | 68 | 🟣 普遍网络 | 已排除;无具体业务链路 |
-101 多语言网络提示 | 3 | 🟣 普遍网络 | 已排除;257858 为英文 DNS/网络环境提示 |
| 断线、连不上(257860) | 1 | 🟣 普遍网络 | 已排除;未指向具体功能链路 |
| iOS 微信登录 30100222(257800) | 1 | 🔴 进雷达 | 详见问题 1 |
| HarmonyOS 语音通话/对讲(257817、257883) | 2 | 🟠 进雷达 | 详见问题 2 |
| 实时预览、回放或报警录像不可用(257831、257851、257854、257872) | 4 | 🟡 已有观察线 | 与第 236、237 期远程查看/回放问题重复,沿用相关任务,不重复展开 |
| 录像存储异常或空间已满(257795、257878) | 2 | 🟡 单点或用户配置 | 257795 需核查 SD 卡状态;257878 为硬盘空间耗尽 |
| 账号、计费、服务开通(257805、257806、257828、257835、257846) | 5 | 🟡 业务待核查 | 分别涉及欠费缴费、换号后数据消失、回访功能、云端流量与三元组激活 |
| 黑白图像设置(257833、257834) | 2 | 🟡 单用户配置 | 同一设备与账号在 45 秒内重复提交,优先核查夜视/图像模式 |
| 云台无法转动(257837) | 1 | 🟡 单点待核查 | 需设备能力、权限与通道信息 |
| 截图、无效文本、收不到/收到了(257794、257849、257868、257876) | 4 | 🟢 咨询/无效/已恢复 | 不进雷达;青海账号已从“收不到”转为“收到了” |
心愿单、数据源状态与待补证
心愿单亮点
- 5363:希望增加“投屏到电视”,有明确的大屏查看需求,建议产品侧评估协议兼容和版权边界。
- 5356:建议增加“监控分享”,适合纳入分享权限与安全审计方案统一评估。
- 5354:提出老人/儿童一键呼叫手机,具备家庭安防场景价值,但需要设备、通知和紧急联系人联动能力。
- 5360:希望提升在线稳定性并解决报警录像不可查看,与本期已有远程查看和报警链路任务相关,优先转问题跟踪而非新功能。
数据源状态
- 反馈平台:✅ 正常,窗口内 93 条,
complete=true;17:00:00 之后新增的 1 条未纳入本期。 - 心愿单:✅ 正常,13 条,
complete=true。 - 神策登录:✅ 可用,已核对 iOS 微信登录、30100222 的版本、地区与 8 天趋势。
- 神策对讲:⚠️ 部分可用,
PreviewSessionSummary只有点击次数,没有启动结果和音频上传结果。 - Logan:✅ 问题 1 有效;❌ 问题 2 两条均未提供,需补采。
- 代码定位:✅ 正常,iOS 微信登录与 HarmonyOS 对讲链路均已定位到具体文件和方法。
- 友盟:⏭️ 未调用,本期无崩溃、ANR、闪退类反馈。
- TAPD:⏭️ 未调用,本期为功能性根因分析,按 skill 规则不引入历史 Bug 干扰。
待补证
- 回查微信侧回调日志,确认 257800 的空 code 是用户取消、SDK token 设置失败还是 cold-start Universal Link 丢参。
- 回访 257817、257883 并补采 HarmonyOS 日志,确认首次授权、采集器初始化竞态与底层对讲错误码中的实际分支。
- 统计 iOS 8.1.x/8.2.x 微信登录近 30 天失败用户留存与升级意愿,判断是否需要旧版本强制升级提示。
- 为 HarmonyOS 对讲补启动、首段音频、停止三个结果事件,才能计算成功率而不是只统计点击量。
下一期 = 第239期 = 2026-10-18-H09(明天早上 9:00;窗口 2026-10-17 17:00 ~ 2026-10-18 09:00)