开发者通过华为分析服务下载所需的事件数据,这些数据可以导入到开发者自有的分析系统中,用于构建自定义报告或生成受众群体的个性化分析等,从而帮助制定切实有效的营销活动。数据导出支持按照用户属性和导出事件作为过滤条件,同时展示“预计可导出事件数”。开发者选择不同的时间段和过滤条件,预估事件数就会随之改变。
问题描述
一位开发者向我们提出自己在创建数据任务后,发现错误获取了所选日期前一天的数据。例如下图所示,导出的2021年12月18日的数据报表中eventtime包含了12月17日发生的事件:
问题定位
1. 确定数据导出的时间基线规则。
接到问题后,我们首先确定了开发者在创建数据导出任务时,时间基线规则是基于哪个时间判断的。然后通过云测数据导出规则发现,开发者所选的筛选日期是根据分析服务云测服务器的时间判断的,即server time。
2. 分析跨天上报的数据量占比及特点。
以某应用12月9日的数据为例,当天servertime统计总量数据15xxxxx,eventtime数据量占比97.3%;包含前一天数据量占比2.65%。这些数据无明显特点,云测数据传递过程中的eventtime均为透传不会做另外的计算。
3. 排查端测上报并复现。
Event time记录的是事件触发的时间,因此我们怀疑事件在触发后没有及时上报到云测,而是延迟到第二天才上报到server服务器。也就是说,这些事件均缓存到了本地。
经过与开发者的沟通,我们了解到其采用的是默认上报策略,即应用切后台上报策略和阈值上报策略。当开发者没有设置上报策略时,这两种策略就会自动生效。由此,通过复现发现如果应用被杀掉,用户切后台触发事件上报,上报进程还没有走完,进程被杀掉,导致事件上报失败,缓存在本地,等待下次上报。另外还有两点原因,具体见下节根因描述。
原因
- 用户切后台触发事件上报,上报进程还没有走完,进程被杀掉,导致事件上报失败,缓存在本地,等待下次上报;
- 用户切后台上报时,网络状况等原因,没有上报成功;
- 凌晨正在跨天使用App的用户,数据上报缓存到第二天上报。
解决方案
建议开发者通过setReportPolicies接口设置4种上报策略搭配使用,并将定时上报策略设置为60s-1800s(60s最为敏感)。如果设置为60s,这种场景即便进程被杀掉,也能确保进程杀死前60s之外的数据能够上报,避免数据上报时延。
欲了解更多HMS Core分析服务详情,请参阅:
https://developer.huawei.com/...
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。