亚马逊AWS官方博客
使用 CloudFront 的边缘计算能力动态打包渠道包
背景
应用推广渠道的日益增多,通过渠道包的方式分发应用程序的安装包文件,用户通过安装不同的渠道包,可以确定每一个推广渠道在转化中的贡献度的过程,用于衡量不同渠道的推广效果,满足多渠道的投放时数据归因的需要。
在传统的渠道包打包过程中,我们需要针对不同的渠道生成对应的渠道包并进行上传分发。使用 Amazon CloudFront 全球边缘节点的计算能力,支持在用户请求时动态为不同渠道生成安装包,大大简化了多渠道打包流程。相比传统的打包方式,它可以显著缩短打包时间,满足大规模多渠道推广的需求,同时利用 CloudFront 加速分发提高下载速度。
方案介绍
桌面端应用动态打包
桌面端通过访问带有相应渠道标识的 URL 进行访问,即可下载到同源文件的带有渠道标识的安装包,具体流程如下:
- 桌面端通过带有渠道标识的 URL 访问 CloudFront。
- CloudFront Functions 在查看器请求中,将 URL 重定向为不带有渠道标识的 URL。
- 使用不带有渠道标识的 URL 对源站发起请求,已经在 CloudFront Edge Cache 中缓存的情况下,直接返回内容。
- 客户端获得带有渠道标识的安装包。
安卓端应用动态打包
安卓端通过带有 key 和 channel 参数的 URL 进行访问,即可下载到拥有渠道签名的 APK 包,具体流程如下:
- CloudFront 将请求转发到 Amazon API Gateway,API Gateway 调用 Lambda 动态打包函数。
- Lambda 先判断在临时存放打包 APK 的 Amazon Simple Storage Service(S3)中是否已经有相应的内容,存在的情况下即返回相应下载链接地址。
- 在相应的 APK 包不存在的情况下,通过在存储原始 APK 包的位置找到动态打包的母包,使用 URL 的渠道参数进行处理,并上传到存放打包 APK 的 S3 中,返回相应的下载链接地址。
- 安卓端获得具有渠道标识的 APK 包。
部署指南
桌面端应用动态打包部署
点击链接 installer-distribution 在 AWS Serverless Application Repository 打开应用页面。输入存放下载包的 S3 存储桶名称,勾选确定该应用将创建相应的资源策略,点击 Deploy 按钮进行安装。
注意:存放下载包的 S3 存储桶必须已经创建。
安装完成后,你可以在 CloudFormation 的控制台页面中,选择对应的堆栈,并选中 Outputs 查看到相应的 CloudFront 域名。
在浏览器中输入 https://<your-cloudfront-domain>/test_channel.exe 进行下载测试。
注意:使用您查看到的 CloudFront 域名代替<your-cloudfront-domain>,在 S3 存储桶中需要存在 test.exe 文件。
(可选)根据需要调整 CloudFront Functions 中的正则表达式。
在 CloudFront 控制台页面中,选择 Functions 并选中 ReURL-Function 函数。修改 Function code 中的代码,针对需要转换访问的 URL 为源站的 URL。
在修改完并测试通过后,在页面的 Publish 选项卡中,点击 Publish function 按钮即可发布。
安卓端应用动态打包部署
点击链接 apk-distribution 在 AWS Serverless Application Repository 打开应用页面。输入存放下载包的 S3 存储桶名称,勾选确定该应用将创建相应的资源策略,点击 Deploy 按钮进行安装。
注意:存放 APK 包的 S3 存储桶必须已经创建。对访问链接进行签名验证的情况下需要填写 APPkey,具体参考项目 GitHub – turmind/apk-distribution。
安装完成后,你可以在 CloudFormation 的控制台页面中,选择对应的堆栈,并选中 Outputs 查看到相应的 CloudFront 域名。
在浏览器中输入 https://<your-cloudfront-domain>?key=test.apk&channel=aws 进行下载测试。
注意:使用您查看到的 CloudFront 域名代替<your-cloudfront-domain>,在 S3 存储桶中需要存在 test.apk 文件。
运行以下命令查看 APK 包中的渠道信息,walle-cli-all.jar 在该链接中进行下载。
清理环境
为避免产生不必要的费用,在 CloudFormation 的 Stacks 中,选择对应的堆栈进行并点击 Delete。
总结
在这篇文章中,您通过在 Serverless Application Repository 中安装应用,实现对桌面端应用及安卓端应用进行动态打包并利用 CloudFront 对内容进行加速分发。这让您在应用推广的时候,能够快速分发到不同渠道中,并为后续数据归因的需要提供基础功能。
深蓝互动在新游戏《重返未来 1999》的推广期间,使用了 installer-distribution 生成随机 URL 指向同一个安装包文件,用于跟踪不同渠道用户的下载和使用行为。通过在 URL 中嵌入唯一 ID,可以将用户与谷歌广告等推广渠道建立关联,从而计算推广转换率和用户行为数据。这种方式避免了为不同渠道打包并分发不同安装包的复杂度,简化了深蓝互动的发布和运营流程。同时利用 CloudFront 加速了安装包下载速度,提升了用户体验。相比自建分发服务,使用无服务器的 installer-distribution 不仅降低了开发和运维成本,还让深蓝互动能更专注于游戏本身的品质提升。
参考资料
walle: https://github.com/Meituan-Dianping/walle