无标题文章

手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页面进行进一步数据处理,并响应给用户。
图3-1 方案一时序图

方案二

  • 服务部署:点击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页面。
图3-2 方案二时序图

方案三

  • 服务部署:不额外部署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向用户响应页面信息。
图3-3 方案三时序图

三种方案的优劣对比

方案 用户请求次数 优势 劣势
方案一 一次 页面响应速度快 需要独立部署node服务;
方案二 两次 功能内聚;服务解耦; 易扩容 需要独立部署node服务,同时需要部署转发代理;用户需要请求两次
方案三 一次 开发成本低;维护成本高 无需其他服务;js加载增加了响应时间

代码目录结构

图5-1展示了以node.js实现中间页面渲染的代码结构图。
node.js业务根目录为/data/release/node_projects

图5-1 node.js业务代码结构图

监控方案

以node.js实现中间页面渲染的情况,需要点击cgi方调用node.js服务时做监控处理,具体监控方法请authur评估。 由于是单机部署,所以这里不考虑L5映射。

你可能感兴趣的:(无标题文章)