Ios/Android h5 唤起本地APP

纠结两天(浏览器中唤起本地APP),一直找不到解决方案,今天总算基本搞定。

ps:吐槽一下 魔窗那篇文章,为什么就不直接把js代码开源开源,混淆后的代码看得我好恼火

参考文章:魔窗解决方案京东解决方案

首先是判断浏览器

// 判断浏览器
var Navigator = navigator.userAgent;
var ifChrome = Navigator.match(/Chrome/i) != null && Navigator.match(/Version\/\d+\.\d+(\.\d+)?\sChrome\//i) == null ? true : false;
var ifAndroid = (Navigator.match(/(Android);?[\s\/]+([\d.]+)?/)) ? true : false;
var ifiPad = (Navigator.match(/(iPad).*OS\s([\d_]+)/)) ? true : false;
var ifiPhone = (!ifiPad && Navigator.match(/(iPhone\sOS)\s([\d_]+)/)) ? true : false;
var ifIos = Navigator.match(/iPhone|iPad|iPd/i) ? true : false;
var ifSafari = ifIos && Navigator.match(/Safari/);
// ios 设备的版本号
var iosVersion = Navigator.match(/OS\s*(\d+)/)
iosVersion = iosVersion ? (iosVersion[1] || 0) : 0;
// 安卓版本号
var androidVersion = Navigator.match(/Android\s*(\d+)/)
androidVersion = androidVersion ? (androidVersion[1] || 0) : 0;

android5 及以上的高版本

// 延后50毫秒
setTimeout(function() {
    location.href = ‘自定义 URL’
}, 50)

ios9 及以上的版本

setTimeout(function() {  // 必须要使用settimeout
    var a = document.createElement("a"); //创建a元素
    a.setAttribute("href", ‘自定义 URL’), a.style.display = "none", document.body.appendChild(a);
    var t = document.createEvent("HTMLEvents"); // 返回新创建的 Event 对象,具有指定的类型。
    t.initEvent("click", !1, !1) // 初始化新事件对象的属性
    a.dispatchEvent(t)  // 绑定事件
}, 0)

所有情况都用 iframe

document.querySelector("#" + iframe).src = ‘自定义 URL’ // 将iframe增加src

计算时差的方案打开APP

var checkOpen = function (cb){
    var _clickTime = +(new Date());
    function check(elsTime) {
        if ( elsTime > 3000 || document.hidden || document.webkitHidden) {
            cb(1);
        } else {
            cb(0);
        }
    }
    //启动间隔20ms运行的定时器,并检测累计消耗时间是否超过3000ms,超过则结束
    var _count = 0, intHandle;
    intHandle = setInterval(function(){
        _count++;
        var elsTime = +(new Date()) - _clickTime;
        if (_count>=100 || elsTime > 3000 ) {
            clearInterval(intHandle);
            check(elsTime);
        }
    }, 20);
}
checkOpen(function(opened){
    // APP没有打开成功  并且开启自动跳转到下载页
    if(opened === 0 && option.autoRedirectToDownloadUrl){
        location.href = downloadUrl;
    }
});

注意

ios9 以上的 Universal Link 设置自行百度下(这个需要问问ios开发人员) 这里还有个我自己发现的 bug
在Android里面的qq里面打开
如果打开APP的同时立马返回到QQ里面,应用宝的下载页立马又重新打开APP。ios里面也有个情况,打开APP的同时立马用左上角的返回再次点击打开APP按钮则
Universal Link 失效,跳转到配置好的 Universal Link 链接,大家有知道的解答哈,共同成长
如果ios9 里面没有安装APP 则直接就挑转到 Universal Link 链接 ,这应该是个bug,我想的是,如果没有安装APP 则跳转到应用宝,这个不知道怎么实现

测试的配置所有用的 得到 的APP链接,为了方便

GitHub上面有个示例:https://github.com/lmxdawn/te...

原文地址:https://www.cnblogs.com/baimeishaoxia/p/12209026.html

时间: 2024-10-30 05:10:08

Ios/Android h5 唤起本地APP的相关文章

iOS/Android 浏览器(h5)及微信中唤起本地APP

在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: 如何解决未安装APP时的做好引导页 如何在微信中唤醒APP 在iOS9中如何处理universal link被用户误关的情况 如何解决Android各种机型.各种第三方浏览器导致的兼容问题等 在APP未安装情况下,引导用户下载后打开APP后,如何进入之前唤起时指定的页面或内容,即如何实现场景还原 在

iOS/Android 微信及浏览器中唤起本地APP

在微信里面打开app的指定页面,考虑到使用Url Scheme,可是微信已经禁止了,但是通过浏览器可以实现,最终是在微信里面让用户通过打开浏览器,使用安卓或者IOS开发者提供的协议短链,如贴吧APP,协议为:com.baidu.tieba:// ,微信的:weixin://实现在浏览器中打开app指定页面,通过传递不同的参数实现跳转不同的页面 而对于点击链接后,能否直接打开,可以通过下面的代码来实现. js代码 document.querySelector("#linkApp").on

js实现在微信中唤起本地APP

使用微信打开网址时,无法在微信内打开常用下载软件,手机APP等.网上流传的各种微信打开下载链接,微信一更新基本失效.大家常用的方法是,弹出一个遮罩提示用户在新的浏览器窗口打开,再也不用管微信如何的更新. 直接判断微信的ua,如果是在微信内置浏览器中打开,弹出一个遮罩提示用户在浏览器中打开下载,并且不加关闭的按钮.这样子用户就只能在浏览器中打开,并且可以直接下载应用了. css代码 <style type="text/css"> *{ margin:0; padding:0;

推荐下载App,如果本地安装则直接打开本地App(Android/IOS)

推荐下载App,如果本地安装则直接打开本地App(Android/IOS) - 纵观现在每家移动网站,打开首页的时候,都有各种各样的形式来提示你下载自身的移动App(Android/IOS),这是做移动客户端产品的一个很好地引流的手段.当然各家引流下载的交互和视觉各不相同,有的是完全“强奸”用户,有的是完全取悦用户.但是最终的形式就是你点击一个按钮之后,可以去下载对应的App(Android直接下载对应的Apk文件,IOS会跳转到App store的对应地址). 之前开发这个需求的时候,就是很简

给你的移动网站加点料:推荐下载App,如果本地安装则直接打开本地App(Android/IOS)

纵观现在每家移动网站,打开首页的时候,都有各种各样的形式来提示你下载自身的移动App(Android/IOS),这是做移动客户端产品的一个很好地引流的手段.当然各家引流下载的交互和视觉各不相同,有的是完全“强奸”用户,有的是完全取悦用户.但是最终的形式就是你点击一个按钮之后,可以去下载对应的App(Android直接下载对应的Apk文件,IOS会跳转到App store的对应地址). 之前开发这个需求的时候,就是很简单的针对用户访问的useragent进行判断,如果android设备,给出的是a

H5唤起app

H5唤起app 1.判断是否在微信中打开 无论是在哪个平台的客户端Android/IOS,在微信的平台上访问都有一个问题,那就是无法启动客户端,这是微信为了安全性考虑的限制,android这边屏蔽schema协议,除非公司是微信的伙伴加入了白名单才能使用,IOS系统可以去访问app对应appstore的下载页,但是微信经常屏蔽appstore的这个网址,进而访问不到.比较方便的做法就是在微信浏览器中,无论是IOS还是android都去应用宝的下载(IOS 这边最后会到appstore中)页面打开

app内嵌vue h5,安卓和ios拦截H5点击事件

安卓和ios拦截h5点击事件,这个函数事件必须是暴漏在window下的 安卓和ios拦截普通h5函数: 1 <div onclick = "show(),window.android.show()"></div> 2 <script> 3 function show(){ //如果需要传值,可以在show里添加参数,在上面的点击事件中直接进行传值就好 4 alert(1) 5 } 6 </script> vue函数并没有直接暴漏在wind

微信中通过页面(H5)直接打开本地app的解决方案

简述 微信中通过页面直接打开app分为安卓版和IOS版,两个的实现方式是完全不同的. 安卓版实现:使用腾讯的应用宝,只要配置了"微下载"之后,打开链接腾讯会帮你判断本地是否已经安装了app,如果本地安装就直接打开,没有安装的话就是腾讯微下载的页面进行app下载,当然微下载的页面腾讯提供了几个模板,可以自己选择和修改. IOS实现:ios像直接点击链接打开本地app就难了,有两种方式可供我们选择: 1.腾讯深度合作的公司,微信可以帮你打开app: 2.使用IOS9+的新功能"U

(Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议 (图)

(Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议! 新闻采集器做好了,前端展示APP界面感觉还不是很好,还需要改进改进,希望发布(Android和IOS版本)前听听大家的建议! 新闻采集器做好了,前端展示APP界面感觉还不是很好,还需要改进改进,希望发布前听听大家的建议!