手Q安卓APP下载链接优化——中间页面实现方案
背景回顾
由于当前的手Q内部流量安卓APP下载路径为应用宝外部下载路径,通过此路径下载存在一定弊端,因此需要将直接在手Qwebview打开应用宝页面修改为从展示广告页跳转到手Q详情页或应用宝内部详情页,此次需求先变更兴趣部落广告位。
背景回顾
1. 广告展示页点击广告,请求c.gdt.qq.com进行点击上报;
2. 点击cgi完成扣费等操作之后回包一个中间页面,其中请求链接包含参数_wv=4,用于追踪用户从详情页回退的动作
3. 中间页面中完成新链接的封装和新页面的跳转
中间页实现方案
方案一
- 服务部署:点击CGI和TSW同机部署,由node.js-实现中间页面的渲染。
- node.js监听地址:0.0.0.0
- node.js监听端口:33333
- 用户点击广告到详情页展示的交互时序图如下图所示:
1.用户在广告展示页点击安卓APP类型广告,向点击CGI发送请求 http://c.gdt.qq.com/gdt_click.fcg;
2.点击cgi接收到用户的请求之后向node.js发送POST请求:http://127.0.0.0:33333/app/link?_wv=4 请求体为json类型数据,数据格式如下:
{
app_id: "111122333", //APP ID
pkg_name: "pkagname", //安装包名称
subordinate_product_id : "", //渠道包ID
trace_id : "0a1270245a60533a187993788201", //广告曝光ID
auto_download : flase //是否自动下载APP
}
3.node.js收到点击cgi的请求(node.js侧限制访问域名只能来自127.0.0.1)之后解析请求体内容,并获取跳转到应用宝详情页或手Q详情页的新链接,使用直出方式完成html页面的渲染,同时在html中实现详情页跳转;
4.node.js完成html页面的渲染之后向点击cgi响应完整的html页面;
5.点击cgi收到node,js的回包之后对html页面进行进一步数据处理,并响应给用户。
方案二
- 服务部署:点击CGI和TSW同机部署,由node.js实现中间页面的渲染。
- node.js监听地址:0.0.0.0
- node.js监听端口:33333
- 用户点击广告到详情页展示的交互时序图如下图所示:
1.用户在广告展示页点击安卓APP类型广告,向点击CGI发送请求 http://c.gdt.qq.com/gdt_click.fcg;
2.点击cgi接收到用户的请求之后向用户做302响应,新的请求链接为http://c.gdt.qq.com/app/link?_wv=4&app_id=111122333&pkg_name=pkgname&subordinate_product_id=&trace_id=0a1270245a60533a187993788201&auto_download=false, 请求参数使用querystring方式进行传递;
3.在用户将请求发送到node.js之前会先通过ngnix路由转发,将url路径为/app/link?_wv=4的请求转发到http://127.0.0.1:33333做处理,即为node.js可以监听到的IP和Port;
4.经过nginx路由转发,node.js收到用户的请求,解析querystring,并获取跳转到应用宝详情页或手Q详情页的新链接,使用直出方式完成html页面的渲染,同时在html中实现详情页跳转;
5.node.js完成html页面的渲染之后用户响应完整的html页面。
方案三
- 服务部署:不额外部署web服务
- 用户点击广告到详情页展示的交互时序图如下图所示:
1.用户在广告展示页点击安卓APP类型广告,向点击CGI发送请求 http://c.gdt.qq.com/gdt_click.fcg;
2.点击cgi接收到用户的请求之后请求链接http://c.gdt.qq.com/applink.html?_wv=4,该请求可以选择POST方式或GET方式,参数传递分别选择json方式传递和querystring方式传递。
3.html页面请求远程服务器上的js文件;
4.js请求成功后调用接口window.getapplink(obj)获取新的下载地址,实现新页面的跳转;
5.html加载完成之后向点击cgi响应页面信息;
6.点击cgi向用户响应页面信息。
三种方案的优劣对比
方案 | 用户请求次数 | 优势 | 劣势 |
---|---|---|---|
方案一 | 一次 | 页面响应速度快 | 需要独立部署node服务; |
方案二 | 两次 | 功能内聚;服务解耦; 易扩容 | 需要独立部署node服务,同时需要部署转发代理;用户需要请求两次 |
方案三 | 一次 | 开发成本低;维护成本高 | 无需其他服务;js加载增加了响应时间 |
代码目录结构
图5-1展示了以node.js实现中间页面渲染的代码结构图。
node.js业务根目录为/data/release/node_projects
监控方案
以node.js实现中间页面渲染的情况,需要点击cgi方调用node.js服务时做监控处理,具体监控方法请authur评估。 由于是单机部署,所以这里不考虑L5映射。