美文网首页
无标题文章

无标题文章

作者: susieywang | 来源:发表于2016-04-15 13:27 被阅读0次

    手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 方案一时序图图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 方案二时序图图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 方案三时序图图3-3 方案三时序图

    三种方案的优劣对比

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

    代码目录结构

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

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

    监控方案

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

    相关文章

      网友评论

          本文标题:无标题文章

          本文链接:https://www.haomeiwen.com/subject/htdnlttx.html