一句话结论:App 有没有上架 App Store(苹果官方应用商店),和埋点能不能正常上报,基本是两件互不相干的事。绝大多数统计 SDK(Software Development Kit,软件开发工具包)只认三样东西——能不能联网、有没有持久化存储、上报域名通不通。它并不关心你这个包是商店下载的还是签名分发的。
埋点这条链路到底走了哪几步
先在脑子里把链路铺开。用户在 App 里点了某个按钮,埋点代码把这件事记成一条事件,先写进本地缓存;攒够一定条数或者达到一定时间间隔,再一次性发到统计后台;后台收下来,按用户、按版本、按渠道汇总,第二天你在看板上看到的就是这些数字。
这条链路上有三个必要环节:采集、缓存、上报。任何一个环节断掉,数据都会出问题,但断法和表现完全不同。
- 采集断了:事件根本没记下来,表现为某些页面的数据全是零,其他页面正常。
- 缓存断了:切后台或者杀进程之后事件丢失,表现为数据整体偏少,尤其启动后短时间内的数据对不上。
- 上报断了:数据攒在本地发不出去,表现为后台完全没数,或者延迟很久才到。
签名这一层会不会动到埋点
签名做的事,是给已经编译好的 IPA(iOS 安装包)重新盖一层可信凭证,让它能被系统允许安装和运行。它改的是签名相关的那几个目录和文件,以及 entitlements(权限声明)里声明的能力。业务逻辑代码、统计 SDK 的代码、SDK 自带的资源文件,都不在这层改动的范围里。
所以正常情况下,埋点代码原封不动留着,SDK 也照常工作。真正会出问题的,是下面这三种情况:
- 原来依赖 App Store 渠道信息做归因的 SDK,拿不到商店来源字段,会缺一部分渠道维度数据。这是签名分发天然带来的,不是故障。
- 包里做了渠道号注入、把渠道标识写进 Info.plist(应用配置清单)的做法,重签之后如果没有重新注入,渠道数据会全部归到一起,分不出来。
- SDK 用了 Keychain(钥匙串)或者 Application Support 目录存设备标识,重装之后标识会变,老用户可能被算成新用户。
为什么有些数字看着就是不对
最常见的一类是”重装即新用户”。签名分发的 App 一旦卸载重装,沙盒(Sandbox,应用独立存储空间)被清空,SDK 本地生成的匿名标识重置,后台就把同一台设备算成了两个新增用户。这个偏差在用户量小的阶段不明显,量一大,日活和留存的曲线就会明显失真。
第二类是时间窗口错位。有些统计后台默认按 UTC(协调世界时)或者太平洋时间切日,而你的运营活动是按北京时间算的。日活对不上,先查时区再查别的。
第三类是采样。部分 SDK 为了省流量会做采样上报,小数据量下波动很大,别拿一天的数字下结论。
上线前自己验这三件事
第一,装好之后打开飞行模式再关掉,随手点几个关键页面,隔两分钟去看后台有没有新事件进来。这一步验的是采集和上报。
第二,杀掉进程重新打开,看”启动次数”和”崩溃”两个指标有没有跟着动。这一步验的是缓存是否落地。
第三,找两台设备各装一遍,确认后端能区分出两个独立用户,而不是合并成一个。这一步验的是设备标识逻辑。
三件都过了,数据基本可以信;任何一件卡住,先找 SDK 的接入文档对一遍初始化时机,多半是初始化写在了某个不会执行的分支里。
小结
签名分发不会让埋点失效,但会改变一部分上下文:渠道来源字段缺失、设备标识在重装后重置、渠道号需要重新注入。把这些前提先摆清楚,数据就能用;摆不清楚,再准的 SDK 也只会给你一堆看着合理、实际跑偏的数字。
我是本期作者小思,想解决苹果企业签名、超级签名、TF签名问题?可以在微信公众号对话框找到我哦~(QQ:822404920 微信:A-mk5888)