如果你用手机打开百度搜索Android应用,百度的web结果页面常常第一个就会命中结果,点击“进入下载”详情页后,你会发现页面右上方有一个大大的橙黄色高速下载按钮。这个高速下载按钮其实是骗点击的,不明真相的群众在点击之后会首先下载百度手机助手,然后再通过百度手机助手去下载你真实想下载的应用。
通过这种推广方式,猜测百度手机助手应该能够赢得不少装机量。姑且不论其做法的对错,技术上这种web和本地应用程序的互动是怎样实现的呢?经过简单调研,我们能够发现如下的蛛丝马迹:
1. 百度手机助手安装之后在本地首先起了一个http server,监听在了Android设备的6259端口。
2. 当用户通过web网页点击安装时,网页端会首先发起一个类似这样的ajax请求来询问是否有安装百度手机助手:
http://127.0.0.1:6259/getpackageinfo?callback=jsonp1&packagename=com.baidu.appsearch
3. 如果机器上有安装百度手机助手的话,则会返回形如下面的响应:
jsonp1 && jsonp1({"error":0,"package_infos":[{"version_name":"5.3","package_name":"com.baidu.appsearch","package_state":1,"version_code":16782394}]});
4. 网页端再通过如下请求来启动手机助手,完成用户点击的应用的下载,下载app id猜测可能在referer里:
http://127.0.0.1:6259/sendintent?callback=jsonp2&intent=http://mo.baidu.com/appsearch/highdownload/AppSearch_4995292_60.apk#Intent;action=com.baidu.appsearch.action.HIGHSPEED;launchFlags=0x10000000;component=com.baidu.appsearch/.UrlHandlerActivity;end
5. 如果在第一步时得到socket异常或者非正常返回值,则web端会触发百度手机助手本身的下载
另外,除了百度手机助手之外,百度视频也监听了6259端口。因此很有可能这种下载推广被做成了一个公共的SDK或者组件被嵌套在了百度系的应用中,有心人可以反编译来继续研究。