obsidian/笔记文件/2.笔记/解构amp项目 临时记录.md
2025-05-09 10:43:12 +08:00

3.4 KiB
Raw Permalink Blame History

#灵感

amp 安卓 项目源码解析:

https://github.com/amplitude/Amplitude-Android.git

amp 开始和结束事件相关,官方文档参考链接:

https://amplitude.com/docs/data/sources/instrument-track-sessions

amp缓存上报逻辑解构

https://inspire.sg.larksuite.com/docx/WRGfdHZA1oWm9BxDMAGlkTncgCf

发送事件接口

!Pasted image 20250122170732.png

然后,最终会调用这个接口

!Pasted image 20250122170843.png

这个接口最终指向的是保存Event事件的相关接口跟当前的数据中台机制是一致的在发送之前

!Pasted image 20250122170953.png

其中saveEvent中会包含数据库相关添加

!Pasted image 20250122171140.png

sqlLite保存相关

!Pasted image 20250122175313.png

开始和结束事件名

!Pasted image 20250122175939.png

这是开始一个,新开始事件的接口

!Pasted image 20250122182017.png

外部,再做了一层封装

!Pasted image 20250122182257.png

这里的设置,是跟开始和结束事件,时间区间挂钩

!Pasted image 20250123113236.png

可以看到安卓版本大于ICE_CREAM_SANDWICH的时候就已经是注册和设置为true了

!Pasted image 20250123113648.png

这是一个很旧的安卓版本对应Unity的API Level是 14

!Pasted image 20250123113805.png

而当前Unity工程打包最低版本是API Level 22

!Pasted image 20250123113924.png

!Pasted image 20250123114011.png

所以这个布尔默认判断为true即可然后基于这个布尔的是可以用来设置最小时间间隔三元运算符

!Pasted image 20250123114247.png

true和false分别对应时间间隔是5分钟和30分钟因为上面可知默认是设为true 所以这里的开始和结束时间间隔是5分钟即可

!Pasted image 20250123114415.png

这里的5分钟和官方文档的设定也是一致的

!Pasted image 20250123162644.png

这是开启一个新Session事件的逻辑接口可以看到在开始一个新事件前会发送一个结束事件 开始和结束会话事件id是以时间戳作为id的 在开始新事件之前,会发送一个结束事件;

!Pasted image 20250123142918.png

上述接口,还有一个刷新时间戳的相关接口,其中有包含,设置时间戳相关的接口

!Pasted image 20250123160138.png

可以看到也是调用了数据库相关去设置sqlLite中对应的时间戳key的value数据

!Pasted image 20250123160518.png

这个数据是sqlLite设定的最大数据容量目前是1000

!Pasted image 20250123160945.png

如果容量超过这个范围,就要开始移除数据了

!Pasted image 20250123161619.png

单次移除的数据条数 数量,是这样的计算逻辑:

!Pasted image 20250123161657.png

其中,后面的数字常量是这个

!Pasted image 20250123161723.png

其中,一个新的开始事件,是有俩地方,去调用

!Pasted image 20250123162033.png

可以看到在发送ampEvent事件的时候就会触发判断是否需要开启一个新的开始事件配合时间戳间隔等信息 如果条件不满足,就刷新最新时间戳

!Pasted image 20250123162128.png

还有一种情况,是从后台,切换到前台的时候,也会触发判断,是否满足条件,开启新的会话

!Pasted image 20250123162351.png