Appearance
排查 & 检查清单
接入检查清单
在排查问题前,先逐项确认以下清单:
服务端
- [ ] 定时任务已启动,每 10 分钟调用一次
GET https://api.dc-server.cc/sdk/getAvailableDomainList(测试环境替换为https://dcapi.dc-dev.cc) - [ ] 拉取成功时,将
data字段(密文字符串)存入缓存 - [ ] 拉取失败时,保留上次缓存,不清空
- [ ] 对外接口返回的是缓存中的密文字符串,未做任何解密或修改
- [ ] 无缓存时,接口返回明确的错误状态(如
code: -1),而不是空字符串
客户端(Flutter / Web)
- [ ] App 启动 / 页面加载时调用了业务服务端接口
- [ ] 将返回的
data字段原样传入 SDK,未做任何处理 - [ ] 获取失败时,有本地缓存兜底逻辑
- [ ] 无任何配置时,跳过 SDK 初始化,而不是传入空字符串
SDK 初始化
- [ ]
encryptedConfig参数传入的是完整密文字符串(未截断) - [ ]
appId参数已正确填写 - [ ] 初始化为异步调用,未阻塞主线程
常见问题排查
问题:SDK 初始化失败 / 解密错误
可能原因:
- 密文在传输过程中被修改(服务端解密后重新传,或客户端做了字符串处理)
- 密文被截断(接口响应体过大,被中间件截断)
encryptedConfig传入了空字符串或null
排查步骤:
- 在业务服务端日志中查看缓存的密文字符串,记录其长度
- 在客户端打印收到的
data字段,比对长度是否一致 - 确认传入 SDK 的字符串与收到的字符串完全一致(可打印前 20 个字符比对)
javascript
// Web 排查示例
console.log('[Debug] encryptedData length:', encryptedData.length);
console.log('[Debug] encryptedData prefix:', encryptedData.substring(0, 20));问题:事件没有被上报
可能原因:
- SDK 初始化未完成(密文获取失败,初始化被跳过)
- 事件名不在
eventList白名单中 - 上报域名全部不可达(测速失败)
排查步骤:
- 确认 SDK 初始化是否成功(查看初始化日志)
- 确认事件名拼写是否正确,是否在白名单中(联系配置管理员确认)
- 检查网络环境,确认上报域名是否可访问
问题:业务服务端接口返回 config not available
可能原因:
- 定时任务从未成功执行过(如任务未启动、首次拉取失败)
- Redis 缓存过期(TTL 设置过短)
- 定时任务执行失败但无报警,导致缓存一直未更新
排查步骤:
- 检查定时任务日志,确认是否成功执行
- 手动执行一次拉取脚本,确认接口可访问
- 检查 Redis 中是否存在
sdk:encrypted_config键:
bash
redis-cli get sdk:encrypted_config- 手动调用底层配置接口,确认响应正常:
bash
# 正式环境
curl https://api.dc-server.cc/sdk/getAvailableDomainList
# 测试环境
curl https://dcapi.dc-dev.cc/sdk/getAvailableDomainList问题:Flutter SDK 初始化 API 不确定
当前 Flutter SDK 已切换为 encryptedConfig 方案,请确认使用的是以下真实接口:
dart
await AnalyticsSdk.instance.init(
appId: 'your_app_id',
encryptedConfig: encryptedConfig,
device: DeviceEnum.Android,
deviceId: 'device_123',
deviceBrand: 'Xiaomi',
deviceModel: 'Mi 10',
systemName: 'Android',
systemVersion: '14',
);如启动时拿不到配置,可先传 null,稍后调用:
dart
await AnalyticsSdk.instance.refreshDomainConfig(
encryptedConfig: encryptedConfig,
);不要再使用旧的 SdkInitConfig.configure(baseDomain: ...) 写法。
问题:Web 页面本地存储读不到缓存
排查步骤:
- 确认写入时使用的 key 与读取时一致(如
sdk_encrypted_config) - 确认页面运行在同一个域名下(
localStorage受同源策略限制) - 检查浏览器是否开启了隐私模式(无痕模式下
localStorage可能受限)