让微信二维码扫描您的APK

转载 2015年07月06日 18:27:27

二维码深入人心,很多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中包含腾讯的域名,都可以顺利下载。

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

 

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

让微信二维码扫描您的APK

让微信二维码扫描你的APK 转自:http://www.apkbus.com/android-157345-1-1.html   二维码深入人心,很多App都在官网挂出了可以扫描下载apk的...
  • zjlovety
  • zjlovety
  • 2014年06月17日 17:47
  • 29045

让微信二维码扫描你的APK

目前有在开发公司的微信公众平台,遇到了扫描下载apk的二维码问题,在微信群里面也木有人能给我解决,同事给我推荐了这篇文章:          http://www.cnblogs.com/liyunf...
  • jiaxiang521521
  • jiaxiang521521
  • 2014年03月09日 01:54
  • 4571

微信二维码扫描下载APK

前几天给客户制作的app需要上线,生成二维码扫描进行下载,把生成好的apk挂在服务器端,将地址复制下来,通过草料二维码(http://cli.im/)生成一个二维码   也许你会看到有个app的选项...
  • JerehEdu
  • JerehEdu
  • 2015年04月30日 08:45
  • 1792

Zxing仿微信二维码扫描

1.Zxing的介绍 2.二维码的生成 3.二维码的识别
  • zhangxing52077
  • zhangxing52077
  • 2016年10月18日 23:24
  • 1463

iOS原生自定义二维码扫描界面(类似微信)

本次demo的特点:1.利用苹果原生的框架进行二维码的扫描功能 2.利用动画等效果自定义扫描界面。...
  • huanghao12
  • huanghao12
  • 2016年01月06日 22:26
  • 5183

对apk进行zipalign

zipalign.exe在sdk之下:android-sdk\build-tools\21.1.2    下面我介绍该工具的功能: Zipalign优化工具是Android SDK中自带的...
  • aaaaaaaaabaas
  • aaaaaaaaabaas
  • 2015年08月05日 19:40
  • 2506

apk版本在应用商店的管理

Google为APK定义了两个关于版本属性:VersionCode和VersionName,他们有不同的用途。 VersionCode:对消费者不可见,仅用于应用市场、程序内部识别版本,判断新旧...
  • some_man
  • some_man
  • 2016年05月05日 16:55
  • 455

微信二维码扫描开发XML解析

package com.nuc.util; import java.io.InputStream; import java.io.Writer; import java.util.HashM...
  • u011157285
  • u011157285
  • 2014年10月28日 23:03
  • 1521

Android实现二维码扫描(仿微信,轻量Zxing)

前言 要做一个功能,二维码识别。网上找一堆相关的Demo,但是总不是想要的效果,或者都是多年前的版本,权衡考虑之后,决定亲自操刀。不纠结直接选中Zxing框架,https://github.com/z...
  • JavaAndroid730
  • JavaAndroid730
  • 2016年11月28日 22:35
  • 4587

微信二维码扫描无法下载APK文件

查到如下的解决办法: http://js250.com/home/?p=192
  • Oliverzzj
  • Oliverzzj
  • 2014年04月07日 10:21
  • 4413
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让微信二维码扫描您的APK
举报原因:
原因补充:

(最多只允许输入30个字)