让微信二维码扫描你的APK

2019-03-02 01:00|来源: 网路

       二维码深入人心,很多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,才能对症下药。这里笔者从访问日志中摘取了一段以供参考:

Mozilla/5.0 (Linux; U; Android 4.0.4; zh-cn; GT-I9100G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.0.1.352

        对比普通安卓浏览器的UA

Mozilla/5.0 (Linux; Android 4.1.1; MI 2 Build/JRO03L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.58 Mobile Safari/537.36

      可见,为了兼容性,微信安卓版扫一扫内置浏览器(其实就是Webview)的UA是严格遵守UA规范的,在最后标明了浏览器名字"MicroMessenger"以及版本号,因此最简单但不能保证100%正确的办法是匹配MicroMessenger这个字符串,当然还得匹配Android这个字符串。严格的做法是按规范解析UA,根据提取的信息判断操作系统和浏览器名称是否相符。

 

对症下药

      在确定当前用户正通过安卓版微信“扫一扫”下载应用后,下一步就是对症下药。比较稳妥的办法是发布应用到腾讯旗下的应用商店,比如应用宝,然后去解析应用宝上二维码的地址,当用户通过安卓版微信访问中间页面时,跳转到这个地址即可正常下载。

 

另辟蹊径

       如果你的App没有在腾讯旗下的应用商店上架,是不是就没有办法了?你可以用安卓版微信扫一扫我们公司的产品公邮试试,我们的安卓客户端是没在应用宝上架的。

       是不是可以正常下载?

       其实很简单,随便在应用宝里面找一款应用,例如QQ浏览器,你会发现其下载地址是

http://202.112.136.110/files/101800000087A9AC/119.190.4.66/down.myapp.com/android/49367/17002426/com.tencent.mtt_500650.apk

     如果你还没看出猫腻,你可以试试把你的http://example.com/download/test.apk 改成 http://example.com/down.myapp.com/test.apk,不出意外的话可以下载了。

     没错,微信没有严格的匹配域名,而是用了字符串任意匹配的方式,只要url中包含腾讯的域名,都可以顺利下载。

      这么设计是微信开发者偷懒吗?显然不是,微信的开发人员不会连正则表达式都不会写或懒得写,只是腾讯旗下的产品实在是太多了,而且很多下载服务器都是没有域名的,为了避免误伤,只好做这种掩耳盗铃的屏蔽了。从这一点也可以看出,如果只是出于安全性考虑,破解其屏蔽是易如反掌的。

 

       微信虽然坐拥几亿用户,滥用市场支配地位去打压竞争对手产品,这样的行径毫无道德底线。


转自:http://www.cnblogs.com/liyunfan/p/3491560

相关问答

更多
  • 不清楚,但是我看融贝支付 的安卓app就可以实现你说的这些功能
  • 第一种扫一扫添加好友方式: 1.登陆微信,点击朋友们,进入“朋友们”界面 2.点击“添加朋友”,然后手机界面会出现一个“扫一扫” 3.点击“扫一扫”,在手机上面就会出现一个扫描取景框。 4.将自己的摄像头对准需要好友的二维码,让好友二维码出现在手机的取景框当中 5.扫描成功后,会在手机上面出现该账号信息,然后点击“关注”即可快速添加好友。 第二中扫一扫添加好友方式: 1.登陆手机微信,回到微信消息界面。然后点击右上角的“魔术棒” 2.点击魔术棒后,在弹出的菜单选项中选择"扫一扫".即可快速进入二维码扫一扫快 ...
  • 至于微信怎么扫描二维码 :其实是很简单的。 微信--朋友们--添加朋友--扫一扫 其实就这么简单了、不是很难。
  • 使用OAuth2.0引导用户跳转到redirect_uri的地址,跳转的时候会带上一个参数code,拿这个code调用 接口/wiki/index.php?title=%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF
  • java可使用zxing生成二维码并为其添加信息。 以下是详细步骤: 1、创建MatrixToImageWriter类 import com.google.zxing.common.BitMatrix; import javax.imageio.ImageIO; import java.io.File; import java.io.OutputStream; import java.io.IOException; import java.awt.image.BufferedImage; public fi ...
  • 这个是不是ticket不对造成的~ 目前js也可以生成二维码了,我用过,挺好用的! git地址:github.com/jeromeetienne/jquery-qrcode
  • 是看不出来什么的,可以说几乎是一摸一样。不说这个,就是拿两个一般的二维码你大眼一扫也看不出来区别对不对?有病毒的二维码和正常的相比区别在哪儿你知道吗?之所以扫码会染毒,是因为扫描的这个二维码被有心人给恶意篡改植入了病毒,看起来没有区别,但是你扫描的过程实际上是病毒下载的过程,结果就是二维码没有扫描到,却安装了一堆病毒。 想安全扫描二维码也很简单的,别看我刚才说了一堆,其实你扫码前打开一个能够检测二维码安全性的软件就全部搞定。比如我吧,我用的腾讯手机管家5.0,每次扫码前我先打开它,它会自动检测我扫描的二维码 ...
  • 错误信息翻译过来,是“该token下生成的二维码数量已经超出范围了。” 但实际上,有可能该token已经失效了。(吐槽一下微信API接口写得稀烂…)
  • 按照微信API的开发者文档,扫描带参数的二维码后,服务端回收到两种类型的事件消息。不管是未关注还是已关注,在EventKey里面都带有二维码的场景参数。请自行度娘“微信 开发者文档”。
  • 绝大部分情况下不需要调用微信开放平台的接口,只用到了微信公众账号的开发者模式就完成了; 如果想进一步改善用户体验,需要使用服务号调用微信 网页授权获取用户基本信息 接口。 基本认证流程: 用户设备(手机、Pad、笔电)连接到Wi-Fi热点 提供热点的终端节点(路由器/AP)上的WiFiDog拦截用户网络,将用户HTTP请求转向到云端AC服务器 (可跳过)云端AC服务器返回网页提醒用户进行认证 (可跳过)用户在网页或APP里完成认证(开放认证、粉丝认证、自主或定制认证) 云端AC服务器通知终端节点放行 抛开更 ...