扫二维码下载apk并统计被扫描次数

需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数。

两种实现方法:

1.一般我们用草料生成二维码,如果没有注册的话只能生成一个包含下载网址的静态码,没有统计功能,而且出了自己截图保存外,草料是不会保存你的二维码的。

如果注册草料后,可以选择生成活码。所谓活码,就是一个指向页面,然后通过这个指向页面,再到你的下载链接。这个指向页面内嵌了统计代码。你可以通过草料的统计功能,看你的二维码相关的扫描数据。

2.你的App下载地址,自己内嵌一个统计代码,这样来统计扫描数据,这样,你只要一个静态码就够了。不需要在草料注册,用户扫描二维码后,直接进入下载界面,没有中间的指向页面。

由于不希望自己的app投放到应用市场,因此微下载行不通。比如,把你的APK文件上传到腾讯的开放平台,申请通过后,会拿到一个移动推广链接,然后替换原来的“android下载”的链接(直接此文件生成一个二维码也行),这样用户就可以在微信中扫一扫直接下载了。

同时,一般用户用扫一扫,大多都用微信自带“扫一扫”工具,而微信打开的二维码页面,会自动屏蔽apk文件,所有显然把apk的url生成一个二维码,让用户扫一扫后就能直接下载,这样是行不通的。微信做了限制除了和微信有合作关系的应用才能使用微信扫描后直接下载apk,其他的应用只能点击微信右上角的菜单跳转到普通浏览器下载apk。

尝试:

用草料生成二维码:

“文件”方式生成二维码:上传需要下载的文件,生成二维码,扫描二维码跳转到它默认的模板页面,点击可下载该文件。但是不支持.apk这样的特殊格式。

“网址”方式生成二维码:直接将.apk的下载地址url生成二维码,扫描下载行不通。微信将其屏蔽了(QQ中的“扫一扫”功能是可以的,易信、360也都可以扫出来)。

所以最终采用第二种方法。

实现方案:

直接判断微信的ua,然后弹出一个遮罩提示用户在新的浏览器中打开下载,并且加关闭的按钮,类似于如图。

(1)在你的服务器上写一个下载详情页面,将app下载链接放上去。这里设计的是:使用JS+HTML+CSS结合的方式,用移动h5技术适配了手机版网页,不会在已进入微信就弹出提示它在新浏览器中打开,因为你还可以在这个页面里做一些提交表单查看信息等操作。只有用户点击应用下载链接才弹出遮罩提示跳转至新的浏览器下载,如图:

(2)把下载页面的URL地址,通过"草料二维码"生成一个二维码,如图:

(3)如果是在微信里扫一扫打开的,当用户点击“安卓版下载”的时候,就提示用户要在默认浏览器中打开,如图:

(4)其实扫描二维码,就是访问一个url,可以在后台统计url被访问的次数,就是扫描二维码的次数了。

 贴出关键代码:

 public class Counter{
 private int count;
 public Counter(){
  this(0);
  }
 public Counter(int count){
  this.count=count;
  }
 public void setCount(int count){
  this.count=count;
  }
 public int getCount(){
  return count;
  }
 public void add(int step){
  count+=step;
  }
 }
 /**
 * 统计页面访问的次数,并在关闭应用时将其保存到文件,待下次启应用时读取次数。
 * @author Joanna.Yan
 *
 */
public class MyServletContextListener implements ServletContextListener{
 public void contextInitialized(ServletContextEvent sce){
  System.out.println("====================helloapp application is Initialized.==========");
  ServletContext context=sce.getServletContext();
  try{
   BufferedReader reader = new BufferedReader(
     new InputStreamReader(context.getResourceAsStream("/count/count.txt")));
   int count = Integer.parseInt(reader.readLine());
   reader.close();
   Counter counter = new Counter(count);
   context.setAttribute("counter",counter);
  }catch(IOException e){e.printStackTrace();}
  }
 public void contextDestroyed(ServletContextEvent sce){
  System.out.println("helloapp application is Destroyed.");
  ServletContext context=sce.getServletContext();
  Counter counter=(Counter)context.getAttribute("counter");
  if(counter != null){
   try{
    String filepath = context.getRealPath("/count");
    filepath = filepath+"/count.txt";
    PrintWriter pw= new PrintWriter(filepath);
    pw.println(counter.getCount());
    pw.close();
   }catch(IOException e){e.printStackTrace();};
   }
  }
 }

web.xml中注册监听器:

<listener>
 <listener-class>joanna.yan.listener.MyServletContextListener</listener-class>
 </listener>

web.xml中注册servlet:

<servlet>
 <servlet-name>QRCodeServlet</servlet-name>
 <servlet-class>joanna.yan.servlet.QRCodeServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>QRCodeServlet</servlet-name>
 <url-pattern>/QRCode</url-pattern>
 </servlet-mapping>
public class QRCodeServlet extends HttpServlet{
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  doPost(req, resp);
 }
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  System.out.println("QRCodeServlet被访问了!");
  ServletContext context=getServletContext();
  Counter counter=(Counter) context.getAttribute("counter");
  if(counter==null){
   counter=new Counter(1);
   context.setAttribute("counter", counter);
  }
  counter.add(1);
  System.out.println("被扫描的次数:"+counter.getCount());
  resp.sendRedirect(""+req.getContextPath()+"/apkdownload.jsp");
 }
}

设置适配移动端屏幕,禁止浏览器的缩放功能:

<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0">

CSS+JS:

<style type="text/css">
  #weixin-tip{display:none;position:fixed;left:0;top:0;background:rgba(0,0,0,0.8);filter:alpha(opacity=80);width:100%;height:100%;z-index:100;}
  #weixin-tip p{text-align:center;margin-top:10%;padding:0 5%;position:relative;}
  #weixin-tip .close{color:#fff;padding:5px;font:bold 20px/24px simsun;text-shadow:0 1px 0 #ddd;position:absolute;top:0;left:5%;}
</style>
 <script type="text/javascript">
  var is_weixin = (function(){return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1;})();
  window.onload = function() {
  var winHeight = typeof window.innerHeight != 'undefined' ? window.innerHeight : document.documentElement.clientHeight; //兼容IOS,不需要的可以去掉
  var btn = document.getElementById('J_weixin');
  var tip = document.getElementById('weixin-tip');
  var close = document.getElementById('close');
  if (is_weixin) {
   btn.onclick = function(e) {
    tip.style.height = winHeight + 'px'; //兼容IOS弹窗整屏
    tip.style.display = 'block';
    return false;
   };
   close.onclick = function() {
    tip.style.display = 'none';
   };
  }
 };
 </script>
....你的网页代码......
 <div id="weixin-tip">
   <p>
   <img alt="微信打开" src="img/warn.png">
   <span id="close" title="关闭" class="close">X</span>
   </p>
 </div>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • Android实现二维码扫描和生成的简单方法

    这里简单介绍一下ZXing库.ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.该项目可实现的条形码编码和解码.目前支持以下格式:UPC-A,UPC-E.EAN-8,EAN-13.39码.93码.ZXing是个很经典的条码/二维码识别的开源类库,以前在功能机上,就有开发者使用J2ME运用ZXing了,不过要支持JSR-234规范(自动对焦)的手机才能发挥其威力. ZXing

  • JS生成和下载二维码的代码

    废话不多说了,直接给大家贴js代码了,具体代码如下所示: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8

  • JavaScript实现的微信二维码图片生成器的示例

    jquery.qrcode.js 是一个能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生成二维条码. QRCode.js QRCode.js是javascript实现二维码(QRCode)制作生成库. QRCode.js有着良好的跨浏览器兼容性(高版本使用HTML5的 Canvas,低版本IE使用table元素绘制),而且QRCode.js没有任何依赖.只需要引用一个JS. 此插件是能够独立使用的,体积也比较小,使用gzip压缩后才不到4kb.因为它是直

  • php微信开发之带参数二维码的使用

    最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我的开发过程比较详细的记录下,希望对大家有所帮助. 我本次开发使用的是认证服务号. 1 接入 首先进入微信公众号 -> 基本配置  下面是基本配置的页面,在URL中填写服务器地址,这个地址就是接受微信推送事件的一个接口,我是使用thinkPHP框架开发的程序,在其中一个Module(Decorati

  • 通过扫描二维码打开app的实现代码

    最近有朋友问小编这样一个问题,先给大家说下项目需求:扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先判断一下终端. var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; /

  • 利用Java生成带有文字的二维码

    介绍 主要使用了goole的zxing包,下面给出了示例代码,很方便大家的理解和学习,代码都属于初步框架,功能有了,需要根据实际使用情况完善优化. 第一步.maven导入zxing <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.1</version> </dependency>

  • php生成二维码图片方法汇总

    第一种方法: 1,第一种方法:利用使用最广泛,最方便的Google api技术实现: 2 ,<?php //封装生成二维码图片的函数(方法) /* 利用google api生成二维码图片 $content:二维码内容参数 $size:生成二维码的尺寸,宽度和高度的值 $lev:可选参数,纠错等级 $margin:生成的二维码离边框的距离*/ function create_erweima($content, $size = '100', $lev = 'L', $margin= '0') { $

  • 微信 开发生成带参数的二维码的实例

    微信开发生成带参数的二维码的讲解 在微信公众号平台开发者那里,在"账号管理"那里,有一项功能是"生成带参数的二维码",通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 用微信扫一扫推送到开发者网址那儿的数据如下: <xml><ToUserName><![CDATA[gh_452****b0f2]]></ToUserName> <FromUserName><![CDATA[o

  • jQuery实现微信长按识别二维码功能

    最近一直在搞一个微信开发的项目,终于快要完工了,今天小编抽个时间记录下在项目开发过程中遇到jquery.qrcode.min.js生成二维码长按不识别的解决方法,希望对大家有所帮助! 1.引入JS库 <script src="jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script> <script src="jquery.qrcode

  • Android项目实战(二十八):使用Zxing实现二维码及优化实例

    前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中我们也许只会用到二维码的扫描和生成两个功能,所以不必下载完整的jar包,使用简化版的即可,下文可见. 这篇文章讲述: 1.如果快速在项目中集成zxing,实现扫描和生成二维码功能 2.根据项目需求去修改源码实现我们的要求并进行优化 一.快速集成zxing二维码 1.下载库文件 :http://xiazai.jb51.net/201611/yuanma/ZXingB

随机推荐