二维码深入人心,很多App都在官网挂出了可以扫描下载apk的二维码,笔者所在公司的产品也不例外。一般二维码编码的URL不会直接放apk而是放中间地址,通过这个中间地址再跳转到apk所在URL,原因大概是有几个:
1. 让网址尽可能短:信息越少,二维码的尺寸就可以做得越小,嵌入的LOGO可以更大,识别率也会越高。
2. 让iPhone和Android通过同一个二维码下载:在这个中间地址根据User Agent提取操作系统,然后根据操作系统来决定跳转到iTunes Store链接、apk下载地址还是产品介绍页面。
3. 便于数据统计:在这个中间页可加入一些下载量统计功能,虽然也可以通过Webserver的Access Log实现,但中间页的方式显然更简单。
现在,又多了第4个原因:支持微信扫描。
笔者在查看访问日志时发现二维码地址被微信扫描时,一般同一个客户端会重复好几次,最后竟然都是用别的浏览器下载的,自己用微信扫了扫才发现扫出来一片空白。
读者朋友可以拿起Android版微信5.0“扫一扫”百度应用商店里的二维码,不出意外的话也是一片空白的。原来微信“扫一扫”中对apk链接加入了白名单机制,只有腾讯自己域名下的apk才可以通过扫一扫下载。
那么如何突破这个限制,让微信安卓版能扫描下载你的apk?
识别安卓版微信“扫一扫”
首先,我们要识别出微信安卓版的UA,才能对症下药。这里笔者从访问日志中摘取了一段以供参考:
对比普通安卓浏览器的UA
可见,为了兼容性,微信安卓版扫一扫内置浏览器(其实就是Webview)的UA是严格遵守UA规范的,在最后标明了浏览器名字"MicroMessenger"以及版本号,因此最简单但不能保证100%正确的办法是匹配MicroMessenger这个字符串,当然还得匹配Android这个字符串。严格的做法是按规范解析UA,根据提取的信息判断操作系统和浏览器名称是否相符。
对症下药
在确定当前用户正通过安卓版微信“扫一扫”下载应用后,下一步就是对症下药。比较稳妥的办法是发布应用到腾讯旗下的应用商店,比如应用宝,然后去解析应用宝上二维码的地址,当用户通过安卓版微信访问中间页面时,跳转到这个地址即可正常下载。
另辟蹊径
如果你的App没有在腾讯旗下的应用商店上架,是不是就没有办法了?你可以用安卓版微信扫一扫我们公司的产品公邮试试,我们的安卓客户端是没在应用宝上架的。
是不是可以正常下载?
其实很简单,随便在应用宝里面找一款应用,例如QQ浏览器,你会发现其下载地址是
如果你还没看出猫腻,你可以试试把你的http://example.com/download/test.apk 改成 http://example.com/down.myapp.com/test.apk,不出意外的话可以下载了。
没错,微信没有严格的匹配域名,而是用了字符串任意匹配的方式,只要url中包含腾讯的域名,都可以顺利下载。
这么设计是微信开发者偷懒吗?显然不是,微信的开发人员不会连正则表达式都不会写或懒得写,只是腾讯旗下的产品实在是太多了,而且很多下载服务器都是没有域名的,为了避免误伤,只好做这种掩耳盗铃的屏蔽了。从这一点也可以看出,如果只是出于安全性考虑,破解其屏蔽是易如反掌的。
微信虽然坐拥几亿用户,滥用市场支配地位去打压竞争对手产品,这样的行径毫无道德底线。
相关推荐
解决微信扫描二维码下载APK问题
ZBar实现微信条形码二维码扫描界面,自定义扫码界面,覆盖视图拿到项目中就可以使用,微信扫一扫界面
微信扫码下载app页面,可以选择下载android ios ,自动判断浏览器下载,浏览器下载,浏览器扫码下载,兼容所有浏览器。
手机扫码同一张二维码,自动识别手机系统,安卓自动下载App,ios会自动跳转应用市场。
这是我之前做过的二维码项目的源码,将Zxing包进行了精简,扫描速度很快,可以直接加入项目中,里面有我详细的注释,加载到工程中只需要更改一下Android的版本就可以运行了
模拟实现微信扫描二维码登录PC网站 Login to a PC website by scan a qr code with an APP like wechat on your smartphone 技术关键字(Keywords):Android APP QRcode nodejs comet 使用方法(Usage): 在你的安卓...
Android微信浏览器扫描二维码下载apk时出现白屏问题,先访问html,在html中判断是否为微信浏览器,是微信浏览器提示用户打开手机浏览器访问
本工程是使用QT12.3 开发的。可以实现类似微信二维码扫描的功能,可以调用系统相机与相册。使用QZXing解析二维码。同时介绍QML与QWidegt的通信
微信、头条内扫描二维码或者点击链接地址,识别当前系统(Android或IOS),Android跳转至系统默认浏览器进行Apk下载,IOS跳转至App Store进行应用下载 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用...
二维码扫描Demo 使用了库进行扫描,但是提供的效果并不好,需要和QQ、微信一样,有扫描动画,所以又找到了,其中提供的ViewfinderView有动画雏形,进行了一些修改之后,大致满足了需求。 其中因为文字居中的问题,...
ViliDownloadProcess 微信,头条内扫描二维码或点击链接地址,识别最新系统(Android或IOS),Android替换至系统替代浏览器进行Apk下载,IOS转换至App Store进行应用下载
目前的APP基本都支持二维码扫描下载,二维码下载也成为了大家用起来很顺手的一种方式。由于微信的用户基本占据了国内市场的90%,说到扫一扫用户第一个想到的就是打开微信扫一下,通过微信分享APP,再从分享的链接...
微信扫描底部二维码,回复apk可下载Demo Apk尝鲜 Gradle添加依赖 自身根据需求任选以下1至3个依赖,随意组合搭配 dependencies { //穿山甲( 头条 ) implementation ' ...
扫描二维码: apk比较旧 这是一个模仿微信拍照的Android开源控件 点击拍照 10s的视频大概1.9M左右 长按录视频(视频长度可设置) 长按录视频的时候,手指上滑可以放大视频 录制完视频可以浏览并且重复播放 前后...
点击下载 Apk 或扫描下方二维码安装体验 Gradle依赖 dependencies { compile 'cn.bingoogolapple:bga-badgeview:latestVersion@aar' } 目前支持的徽章类 类名 应用场景 BGABadgeRadioButton 微博首页底部...
目前实现的功能:二维码扫描,支付宝微信支付,商家后台,热更新等(一个完整的购物APP均已实现) 特别感谢以下开源项目:,,,,,,,, #快速体验 安装包位于:shopwt\release\shopwt-release.apk #快速开始 1.修改:...