需求:想让用户扫描一个二维码就能下载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>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# 二维码
# 扫描次数
# php生成二维码图片方法汇总
# JS生成和下载二维码的代码
# 微信 开发生成带参数的二维码的实例
# Android项目实战(二十八):使用Zxing实现二维码及优化实例
# 通过扫描二维码打开app的实现代码
# JavaScript实现的微信二维码图片生成器的示例
# 利用Java生成带有文字的二维码
# jQuery实现微信长按识别二维码功能
# php微信开发之带参数二维码的使用
# Android实现二维码扫描和生成的简单方法
# 一扫
# 如图
# 弹出
# 下载链接
# 就能
# 下载地址
# 将其
# 要在
# 器中
# 跳转
# 内嵌
# 自己的
# 的是
# 是在
# 在这个
# 出了
# 你可以
# 不需要
# 两种
# 腾讯
相关文章:
音响网站制作视频教程,隆霸音响官方网站?
如何快速搭建高效服务器建站系统?
,想在网上投简历,哪几个网站比较好?
深圳网站制作案例,网页的相关名词有哪些?
设计网站制作公司有哪些,制作网页教程?
c# 服务器GC和工作站GC的区别和设置
开源网站制作软件,开源网站什么意思?
活动邀请函制作网站有哪些,活动邀请函文案?
如何高效生成建站之星成品网站源码?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
郑州企业网站制作公司,郑州招聘网站有哪些?
如何快速生成ASP一键建站模板并优化安全性?
如何通过网站建站时间优化SEO与用户体验?
建站主机选哪家性价比最高?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何配置支付宝与微信支付功能?
如何规划企业建站流程的关键步骤?
如何注册花生壳免费域名并搭建个人网站?
,交易猫的商品怎么发布到网站上去?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
网站制作服务平台,有什么网站可以发布本地服务信息?
微信小程序 input输入框控件详解及实例(多种示例)
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
孙琪峥织梦建站教程如何优化数据库安全?
如何批量查询域名的建站时间记录?
如何选择香港主机高效搭建外贸独立站?
如何用狗爹虚拟主机快速搭建网站?
制作网站外包平台,自动化接单网站有哪些?
广州商城建站系统开发成本与周期如何控制?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
如何在阿里云域名上完成建站全流程?
Swift中swift中的switch 语句
C++时间戳转换成日期时间的步骤和示例代码
如何在腾讯云服务器上快速搭建个人网站?
宝塔新建站点为何无法访问?如何排查?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
h5在线制作网站电脑版下载,h5网页制作软件?
建站之星展会模板:智能建站与自助搭建高效解决方案
制作网站怎么制作,*游戏网站怎么搭建?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
江苏网站制作公司有哪些,江苏书法考级官方网站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
网站制作员失业,怎样查看自己网站的注册者?
建站主机数据库如何配置才能提升网站性能?
如何通过西部建站助手安装IIS服务器?
*请认真填写需求信息,我们会在24小时内与您取得联系。