鸦杀's Blog

如何唤起app

2016-06-19

app外唤起的话,我们需要注意以下几点:

1、现在唤起一般是用iframe,而在ios的高版本中(大于8.9.9),iframe已经不支持,可以用location.href。

2、如何检测是否安装app:使用定时器。

3、微信和QQ浏览器不支持唤起,像微信必须是与它合作的app才能唤起。

如何实现,可以看一下这篇回答,来源:https://segmentfault.com/q/1010000004671841

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
$("a[href^='schema://']").on('click',function(e){  
e.preventDefault();
if(isWeixinBrowser() || isQQBrowser()){
$('.layer').show(); //友好的提示页面
}else{
if(isAndroid){
//android

//此操作会调起app并阻止接下来的js执行
$('body').append("");

//没有安装应用会执行下面的语句
setTimeout(function(){window.location = 'http://www.yourdlurl.com/download.html'},600);
}else{
//ios
window.location = 'schema://openapp';
setTimeout(function(){window.location = 'itms-apps://itunes.apple.com/app/idXXXXXXX'},25);
}
}
})

function isWeixinBrowser() {
return (/micromessenger/.test(ua)) ? true : false;
}

function isQQBrowser() {
return (ua.match(/QQ/i) == "qq") ? true : false;
}

然后目前我们的实现是这样的:

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
var iframeCall=function(nativeUrl, noAppUrl){  
if (!iframe) {
iframe = doc.createElement('iframe');
iframe.id = 'callapp_iframe_' + (+new Date);
iframe.frameborder = '0';
iframe.style.cssText = 'display:none;border:0;width:0;height:0;';
doc.body.appendChild(iframe);
}
iframe.src = nativeUrl;

var clickedAt = +new Date;
setTimeout(function() {
if (+new Date - clickedAt < 2000) {
window.location = noAppUrl;
}
}, 500);
};

var downOrCall=function(url){
if(!url){
return;
}
if (_env.os.isAndroid || (_env.os.isIOS && _env.os.version.lt('8.9.9'))) {
if (!iframe) {
iframe = doc.createElement('iframe');
iframe.id = 'callapp_iframe_' + (+new Date);
iframe.frameborder = '0';
iframe.style.cssText = 'display:none;border:0;width:0;height:0;';
doc.body.appendChild(iframe);
}
iframe.src = url;
} else {
window.location = url;
}
},

扫描二维码,分享此文章