文档章节

点击页面判断是否安装app并打开,否则跳转app store的方法

芥末小弟
 芥末小弟
发布于 2017/03/01 09:54
字数 1384
阅读 8
收藏 0
点赞 0
评论 0

常常有这样的场景,咱们开发出来的APP需要进行推广,比如在页面顶部来一张大Banner图片,亦或一张二维码。但往往我们都是直接给推广图片加了一个下载链接(App Store中的)。所以咱们来模拟一下用户的操作步骤:

1、用户第一次访问宣传页面

   a、点击Banner,进入到APP Store中对应的APP下载页

   b、APP下载页中提示:安装;用户点击安装

   c、安装完成后,APP下载页中提示:打开;用户继续点击打开

   d、用户正常使用APP

2、用户第二次访问宣传页面

   a、点击Banner,进入到APP Store中对应的APP下载页

   b、APP下载页中提示:打开;用户直接点击打开

   c、用户正常使用APP

3、用户第三次、第四次、...、第N次访问,操作步骤同2

能看出来,不管是点击Banner还是扫描二维码的方式,对于已经安装过APP的用户来说,这个体验都是非常糟糕的。

更优的体验是:点击Banner(或扫描二维码)后,程序判断当前系统是否已安装App,如果未安装,则自动跳转到App Store下载页;否则直接打开App

 

iOS上,要增加一个APP的大Banner,其实只需要在<head>标签内增加一个<meta>标签即可,格式如:

<meta name='apple-itunes-app' content='app-id=你的APP-ID'>

比如加一个百度贴吧的Native APP大Banner,用下面这串儿代码:

 

[html]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. <meta name='apple-itunes-app' content='app-id=477927812'>  



 

而对于点击链接后,能否直接打开,可以通过下面的代码来实现。前提条件:你得知道你的APP对应的打开协议,如贴吧APP,协议为:com.baidu.tieba:// ,微信的:weixin:// ,and so on。。。

 

[html]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. <!-- a标签的链接,设置为对应的下载链接;点击打开的动作,在click事件中注册 -->  
  2. <href="https://itunes.apple.com/cn/app/id477927812" id="openApp">贴吧客户端</a>  
  3. <script type="text/javascript">  
  4.     document.getElementById('openApp').onclick = function(e){  
  5.         // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为  
  6.         // 否则打开a标签的href链接  
  7.         var ifr = document.createElement('iframe');  
  8.         ifr.src = 'com.baidu.tieba://';  
  9.         ifr.style.display = 'none';  
  10.         document.body.appendChild(ifr);  
  11.         window.setTimeout(function(){  
  12.             document.body.removeChild(ifr);  
  13.         },3000)  
  14.     };  
  15. </script>  



 

当然,如果你是设计成一张二维码,可以用下面这段代码:

 

[html]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. <!-- a标签的链接,设置为对应的下载链接;点击打开的动作,在click事件中注册 -->  
  2. <href="https://itunes.apple.com/cn/app/id477927812" id="openApp" style="display: none">贴吧客户端</a>  
  3. <script type="text/javascript">  
  4.     document.getElementById('openApp').onclick = function(e){  
  5.         // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为  
  6.         // 否则打开a标签的href链接  
  7.         var ifr = document.createElement('iframe');  
  8.         ifr.src = 'com.baidu.tieba://';  
  9.         ifr.style.display = 'none';  
  10.         document.body.appendChild(ifr);  
  11.         window.setTimeout(function(){  
  12.             document.body.removeChild(ifr);  
  13.         },3000)  
  14.     };  
  15.     document.getElementById('openApp').click();  



 

要使用哪一种,就取决与你的实际场景了!

 

 

 

我们在浏览网页的时候,你会看到一个网页下面漂浮着一个提示框“打开APP”或者“下载APP的字样”,如果你的手机已经安装过这个APP,那么网页会提示“打开APP”,如果没有安装,那就会提示“下载APP的字样”  这个从技术角度是如何去实现的呢?下面我给大家分享这块技术,去年公司给国际动漫节做项目的时候,客户就提到这个需求,在点击网页企业的时候 那么直接打开APP(如果已经安装了) 如果没有安装过,直接打开APP页面
 
下面我把这块的源码分享一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
if (navigator.userAgent.match(/android/i)) {
      // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为
      // 否则打开a标签的href链接
      var isInstalled;
      //下面是安卓端APP接口调用的地址,自己根据情况去修改
      var ifrSrc =  'cartooncomicsshowtwo://platformapi/startApp? type=0&id=${com.id}&phone_num=${com.phone_num}' ;
      var ifr = document.createElement( 'iframe' );
      ifr.src = ifrSrc;
      ifr.style.display =  'none' ;
      ifr.onload = function() {
      // alert('Is installed.');
      isInstalled =  true ;
      alert(isInstalled);
      document.getElementById( 'openApp0' ).click();};
      ifr.onerror = function() {
          // alert('May be not installed.');
          isInstalled =  false ;
          alert(isInstalled);
      }
      document.body.appendChild(ifr);
      setTimeout(function() {
          document.body.removeChild(ifr);
      }, 1000 );
}
//ios判断
if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i))
      if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i))  {
          //Animation://com.yz.animation
          var isInstalled;
          //var gz = '{"comName":"${com.short_name}","comID":"${com.id}","comPhoneNum":"${com.phone_num}","type":"0"}';
          //var jsongz =JSON.parse(gz);
 
          //下面是IOS调用的地址,自己根据情况去修改
          var ifrSrc =  'Animation://?comName=${com.short_name}&comID=${com.id}&comPhoneNum=${com.phone_num}&type=0' ;var ifr = document.createElement( 'iframe' );
          ifr.src = ifrSrc;
          ifr.style.display =  'none' ;
          ifr.onload = function() {
               // alert('Is installed.');
               isInstalled =  true ;
               alert(isInstalled);
               document.getElementById( 'openApp1' ).click();};
          ifr.onerror = function() {
               // alert('May be not installed.');
               isInstalled =  false ;
               alert(isInstalled);
          }
          document.body.appendChild(ifr);
          setTimeout(function() {
               document.body.removeChild(ifr);
          }, 1000 );
      }
}
大家在做的过程中需要注意两个问题:
1、接口地址一定要写对,大家可以查一下schema协议,通过这个协议调用的
2、在做用安卓的时候  如果用微信扫一扫或者QQ浏览器扫码功能的时候
使用上面的协议会存在问题的就是必须用APK上架到腾讯应用市场上去
 
源码下载地址:http://download.csdn.net/detail/wangliang198901/8695049

 

转载请注明:Android开发中文站 » JS检测APP是否安装的情况

http://www.androidchina.net/2435.html

© 著作权归作者所有

共有 人打赏支持
芥末小弟
粉丝 0
博文 202
码字总数 120715
作品 0
昌平
Android APP打开另一个APP完整逻辑实现

本文出自:https://blog.csdn.net/DT235201314/article/details/80255143 一丶概述 前段时间配合开发,完成了一个APP拉起另一个APP的需求,负责接收数据跨登录部分。当然整个实现思路挺感兴趣...

天一方蓝
05/10
0
0
iOS两个APP之间跳转传值

==================执行跳转的APP================= // // ViewController.m // 系统应用跳转 // // Created by dc0061 on 16/1/6. // Copyright © 2016年 dc0061. All rights reserved. /......

wuc
2016/01/06
77
0
App在iOS9上不能分享至微信,提示微信没有安装

终于下定决心升级到iOS9.1了,升级完成后这才发现app里点分享时只显示微信收藏,分享至好友和分享至朋友圈都没有了。点击微信收藏,居然还提示微信没有安装——想都不用想,肯定是iOS9惹的祸...

yoyoso
2015/10/30
0
0
一个二维码支持支付宝和微信支付(上)

一个二维码同时支持微信和支付宝扫描的原理很简单,就是中间做了一个跳转,判断用户用的是什么浏览器请求的即可。 这里首先要说清楚的是支付宝的支付是蛮简单的,我们使用的是“手机网站支付...

3kqing
2016/09/08
7K
10
iOS App与浏览器深度链接

概念介绍 1.深度链接(Deep Linking) 深度链接即通过手机浏览器或者微信、QQ等第三方启动自己原生应用,进而跳转到指定页面或者处理指定逻辑。 2.延迟深度链接(Deferred Deep Linking) 是指...

LvesLi
2017/08/11
0
0
怎么可以把 iOS/Android 应用的下载链接合成一个二维码?

在iOS系统设备扫描时 如果是微信扫描,因为第一步里使用了中间页面,此时无法直接跳转到App Store了,所以需要给出提示页面,提示用户点击右上角浏览器,以打开App Store下载页面 如果是微信...

贝勒老爷
2017/12/28
0
0
【iOS开发】打开另一个APP(URL Scheme与openURL)

目标 平常我们做iOS开发,会经常遇到打开其他的APP的功能。本篇文章讲的就是打开别人的APP的一些知识。我们的目标是: 打开别人的APP 让别人打开我们的APP iOS9的适配问题 使用URL Schemes传...

hejunbinlan
2016/11/01
82
1
Android Studio 第六十四期 - Android业务组件化之URL Scheme使用

什么是 URL Scheme? android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉...

吴雨声
前天
0
0
iOS微信分享功能简单实现

文/老坛泡菜(简书作者) 原文链接:http://www.jianshu.com/p/7a2f49c654df 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 PS:此文以简单实现功能为主,不足之前还望指点...

Daniel_s
2016/03/22
332
0
【iOS开发】仿微信分享功能

目标 本篇文章讲的是我做的一个仿微信分享到朋友圈的功能。 事先声明,楼主并不知道微信的分享具体是怎么实现的,只是按照楼主自己的想法做了一个。而且,比较简陋。 这篇文章主要是我上一篇...

hejunbinlan
2016/11/01
16
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Call to undefined function Workerman\posix_getpid

workerman 在centos下报PHP Fatal error: Call to undefined function Workerman\posix_getpid posix在下面这个包中php-process...

dragon_tech
7分钟前
0
0
mysql 7.4 创建表 时  所建表 字段太多 导致失败

报错:[Err] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. 解决方法:把表的引......

qimh
9分钟前
0
0
语法补漏

1.if...elif...else... 代码示例: test=10 if test>9: print(1) elif test>8: print(2) elif test>7: print(3) else: print('nothing') 输出代码: 1...

十年磨一剑3344
9分钟前
0
0
Python -re模块及正则表达式解析

传送门: https://blog.csdn.net/pipisorry/article/details/25909899 ps:上面文章中"命名分组"的语法格式不能执行。正确的如下: (?P<name>正则表达式) #name是一个合法的标识符 除了使用别名...

一口今心
17分钟前
0
0
mybatis中session.getMapper方法源码分析

0开始代码AuthorMapper mapper = session.getMapper(AuthorMapper.class); 1 DefaultSqlSession类 @Override public <T> T getMapper(Class<T> type) { //最后会去调用MapperRegistry.getMap......

writeademo
25分钟前
1
0
spring cloud zuul网关的作用

zuul一般有两大作用,1是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块. zuul: ignored-services: '*' sensitiveHeaders: routes: ...

算法之名
25分钟前
9
0
java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
35分钟前
1
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
37分钟前
1
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
40分钟前
1
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
43分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部