h5页面下载或打开APP

已知问题

1.在微信内Android不支持打开APP和跳转到下载页面
2.在微信内iOS不支持直接打开APP但是可以跳转到App Store

实现步骤

1.判断iOS和Android
2.iOS判断是否在微信中,
-是,无论是否已有APP都直接跳转到App Store
-否,直接打开APP或跳转到App Store
3.Android判断是否在微信中,
-是,提示用户用浏览器打开页面,再直接打开APP或跳转下载页面
-否,直接打开APP或跳转下载页面

实现代码

handleNextPage = () => {

        let d = new Date();
        let t0 = d.getTime();
        // 判断是安卓还是ios
        if(this.isAndroid_ios()) {
            if(this.isWeiXin()) {
                // 引导用户在浏览器中打开
                Alert.hint('请在浏览器中打开本链接', 3000);
                return;
            }
            //Android
            if(this.openApp('msfacepay://')){
                this.openApp('msfacepay://');
            }else{
                //由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验
                let delay = setInterval(function(){
                    let d = new Date();
                    let t1 = d.getTime();
                    if( t1-t0<3000 && t1-t0>2000){
                        window.location.href = "app下载地址";
                    }
                    if(t1-t0>=3000){
                        clearInterval(delay);
                    }
                },1000);
            }
            // window.location.href = "msfacepay://";
            // window.setTimeout(function(){
            //  Alert.hint('暂未开通,敬请期待', 1500);
            //  // window.location.href = "https://itunes.apple.com/cn/app/id1419477919";//打开app下载地址,由app开发人员提供
            // },2000)
        }else {
            if(this.isWeiXin()) {
                window.location.href = 'https://itunes.apple.com/cn/app/id1419477919'
                return;
            }
            //IOS
            // window.location.href = 'msfacepay://'
            // if(openApp('msfacepay://')){  
            //     openApp('msfacepay://');
            // }else{
            //     var delay = setInterval(function(){
            //         var d = new Date();
            //         var t1 = d.getTime();
            //         if( t1-t0<3000 && t1-t0>2000){
            //             alert('请下载APP');
            //             window.location.href = "https://itunes.apple.com/cn/app/id1419477919";
            //         }
            //         if(t1-t0>=3000){
            //             clearInterval(delay);
            //         }
            //     },1000);
            // }
            //iOS不支持iframe打开APP
            window.location.href = "msfacepay://";
            window.setTimeout(function(){
                window.location.href = "https://itunes.apple.com/cn/app/id1419477919";//打开app下载地址,由app开发人员提供
            },2000)
        }
    };
//判断是安卓还是iOS
    isAndroid_ios(){  
        let u = navigator.userAgent, app = navigator.appVersion;  
        let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //android终端或者uc浏览器  
        let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端  
        return isAndroid == true ? true : false ;  
    }
//判断是否微信
    isWeiXin() {
        if(/MicroMessenger/gi.test(navigator.userAgent)) {
            return true;
        }else {
            return false;
        }
    }
openApp(src) {
        // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为
        // 否则打开a标签的href链接
        let ifr = document.createElement('iframe');
        ifr.src = src;
        ifr.style.display = 'none';
        document.body.appendChild(ifr);
        window.setTimeout(function(){
            document.body.removeChild(ifr);
        },2000);
    }
注:iOS在浏览器中直接打开APP时,如果未找到对应程序,浏览器会弹出“Safari浏览器打不开该网页,因为网址无效”。需要手动点击一下,才会出现下一个“在App Store中打开链接吗?”

影响用户体验,还没想到好的解决办法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,205评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 15,375评论 4 61
  • 不是所有的人都能成为朋友,也不是所有的情谊都值得去珍藏。时间它是一剂良药,它缅怀着最美的深情,同时也带走着那留不住...
    420_c644阅读 231评论 0 0
  • 每年的4月4-6日,距离春分有已过半月。此时天气清爽明净,草木青青,万物欣欣向荣,下一个节气也就到来了,谓之清明。...
    doyenbrand阅读 255评论 0 0
  • 写在前面 如果只解释命令的用法的话,我想,是非常枯燥,而且没人愿意去看,看了也学不会,学不会就用不了,用不了就.....
    段浅浅儿阅读 506评论 0 0

友情链接更多精彩内容