Android 渠道参数方案对比
Android 团队通常需要知道用户是从哪个渠道、活动或合作方安装的。选择哪种方案,取决于应用的分发方式,以及是否能保持一个已签名 APK。
方案一:Google Play Install Referrer
本节链接如果应用通过 Google Play 分发,Google Play Install Referrer 是标准方案。Play 保存 referrer 值,应用安装后读取。
适用场景:
- 应用只发布在 Google Play;
- 安装来自 Play;
- 不需要自建 APK 下载页。
它不覆盖 Google Play 之外的直接 APK 分发、企业应用商店或合作方下载页。
方案二:每个渠道单独打包
本节链接为每个渠道构建一个 APK,把渠道值写死在包里。逻辑直接,但构建、签名、测试和发布工作量会成倍增加。
这种方式也容易导致用户拿到的 APK 和测试过的产物不一致。如果只有少量长期固定的渠道,仍然可以考虑。
方案三:下载时注入渠道值
本节链接使用 APK Ref Injector 时,只需要保留一个已签名母包。下载链接携带渠道值:
https://download.example.com/d/com-example-app/base.apk?referer=partner-a服务在下载响应中附加该值。Android 应用启动后通过 AAR SDK 读取。原始 APK 签名保持不变。
适用场景:
- 自建下载页或合作方下载页;
- 企业和区域分发;
- 活动变化比发版周期更快;
- 不希望重签名。
在 Android 中读取
本节链接把 AAR 集成到应用后调用:
val result = RefererReader.read(context)when (result) { is RefererResult.Found -> { val channel = result.referer // 进行安装归因 } RefererResult.NotFound -> { // 没有附加渠道值 } is RefererResult.Error -> { // 处理或记录错误码 }}如果放在启动流程中,建议在后台线程读取。它读取当前安装的 APK,不需要存储权限。
如何选择
本节链接| 分发方式 | 推荐方案 |
|---|---|
| 仅在 Google Play | Google Play Install Referrer |
| 少量固定企业渠道 | 逐渠道打包 |
| 自建或合作方下载 | 下载时注入 |
| Play 与直接分发混合 | Play referrer + AAR 读取 |