怎样在网页中翻开你的app

先声明一下关于ios中9.0翻开体式格局的文章来自博客:IOS9通用链接(universal link)

媒介

关于一个完整的互联网产物而言须要有app端与web端两个差别前端,关于产物而言许多都愿望能够将wap页上的用户引向native app上这就请求前端工程师们为网页供应种种进口去翻开app,本日我们就聊一聊app的翻开体式格局(有毛病的处所还请高手斧正)。

通例翻开

关于app翻开而言最通例的翻开就是经由过程url scheme的体式格局去翻开你的app,以下的

myapp://
myapp://open
myapp://type=1&id=2sdeo223lwe

这些抛出都是以url的体式格局举行抛出,app捕捉到这些抛出去做响应的处置惩罚,本文对app的处置惩罚不做详细描述,app开辟请自行谷歌百度。关于前端而言抛出的体式格局也有许多,而最理想的体式格局是经由过程iframe的src对其举行链抛出,来!说的在多都没有代码来的清楚,请看下面。

起首我们须要有一个iframe:

//现实上就是新建一个iframe的天生器
var  createIframe=(function(){
  var iframe;
    return function(){
        if(iframe){
            return iframe;
        }else{
            iframe = document.createElement('iframe');
            iframe.style.display = 'none';
            document.body.appendChild(iframe);
            return iframe;      
        }
    }
})()

以后我们还须要一个url scheme:

//天生一个url scheme,假定我们商定的scheme是myApp://type=1&id=iewo212j32这类情势的

var baseScheme = "myApp://"
var createScheme=function(options){
    var urlScheme=baseScheme;
    for(var item in options){
        urlScheme=urlScheme+item + '=' + encodeURIComponent(options[item]) + "&";
    }
    urlScheme = urlScheme.substring(0, urlScheme.length - 1);
    return encodeURIComponent(urlScheme);
}

这类scheme情势的实在不是最好的,依据我们踩过的坑,以为商定为与http协定邻近能够更好一些,详细的协定须要前端职员本身去和app端职员商定。

ok万事具备,iframe有了,urlScheme也有了,该去翻开app了

var openApp=function(){
    var localUrl=createScheme();
    var openIframe=createIframe();
    if(isIos()){
        //推断是不是是ios,详细的推断函数自行百度
        window.location.href = localUrl;
        var loadDateTime = Date.now();
        setTimeout(function () {
            var timeOutDateTime = Date.now();
            if (timeOutDateTime - loadDateTime < 1000) {
                window.location.href = "你的下载页面";
            }
        }, 25);
    }else if(isAndroid()){
        //推断是不是是android,详细的推断函数自行百度
        if (isChrome()) {
            //chrome阅读器用iframe打不开得直接去翻开,算一个坑
            window.location.href = localUrl;
        } else {
            //抛出你的scheme
            openIframe.src = localUrl;
        }
        setTimeout(function () {
            window.location.href = "你的下载页面";
        }, 500);
    }else{
        //主假如给winphone的用户预备的,现实都没测过,如今winphone不好找啊
        openIframe.src = localUrl;
        setTimeout(function () {
            window.location.href = "你的下载页面";
        }, 500);
    }
}

以上就是你要翻开scheme的主要代码了,好吧,现实上不只是翻开app,还要完成未翻开的时刻跳到下载页去。个中安卓现实上不管有无翻开都邑跳到下载页去,而ios……..好吧!根据网上的说法是阅读器失焦后会挂起剧本,呵呵,这是多老的ios版本的表现了,现实上如今的ios已没有这么做,有些版本会跟安卓的表现一样,而有些则是直接跳转基础不会去翻开,另有翻开的时刻谁人恶心的体系弹窗是什么鬼。好吧,现实上至此你会发明,ios9.0以上的有些打不开直接跳,有些打得开还会有许可弹窗,而微信则是不管如何都打不开,现实上微信会在他的阅读器里阻拦掉一切未经其许可的scheme包含app store,那末接下来我们要处理这些题目。

通用链接

针对ios9及以上的打不开题目,现实上ios9供应了更好的处理方案————通用链接。

什么是Universal Links(通用链接)?

这是iOS9推出的一项功用,假如你的运用支撑Universal Links(通用链接),那末就能够轻易的经由过程传统的HTTP链接来启动APP(假如iOS装备上已装置了你的app,不须要分外做任何推断等),也许翻开网页(iOS装备上没有装置你的app)。也许能够更简朴点来申明,在iOS9之前,关于从种种从阅读器,Safari、UIWebView也许 WKWebView中叫醒APP的需求,我们一般只能运用scheme。

以上来自网上关于通用链接的引见,关于前端简朴点讲就是你接见一个http的url,假如这个url带有你提交给开辟平台的设置文件中婚配划定规矩的内容,ios体系会去尝试翻开你的app,假如打不开,体系就会在阅读器中转向你要接见的链接。很好的一个属性,由于经由过程这个属性在ios9上我们能够绕过微信的阻拦从而翻开app。

以下是ios开辟职员要做的百度搜刮效果第一条ios中完成通用链接

而我们要做的真的很简朴,现实上我们只须要抛出链接就好了(现实上博主只是来骗履历的)。在此之前请预备好与主站差别的域名,比方主站www.xxxx.com,你们能够预备好open.xxxx.com的域名作为重定向用。好吧!现实上通用链接有一个很坑的属性,必需是异域翻开,而且假如你提交的是你主站的链接,你翻开你的主站你会发明网站上方会挂着一个丢脸的灰条转向appstore中你们的app,没错,就是ios体系干的这个事,详细的其他注重事项能够参考这篇文章IOS9通用链接(universal link)

那末接下来我们的代码得做好变动

//增添通用链接的天生,
var baseScheme = "myApp://",
    baseLink="http://m.xxxx.com?";
var createScheme=function(options,isLink){
    var urlScheme=isLink?baseLink:baseScheme;
    for(var item in options){
        urlScheme=urlScheme+item + '=' + encodeURIComponent(options[item]) + "&";
    }
    urlScheme = urlScheme.substring(0, urlScheme.length - 1);
    return isLink?urlScheme:encodeURIComponent(urlScheme);
}

然后对抛出做

var openApp=function(){
    //天生你的scheme你也能够挑选外部传入
    var localUrl=createScheme({type:1,id:"sdsdewe2122"});
    var openIframe=createIframe();
    if(isIos()){
        //推断是不是是ios,详细的推断函数自行百度
        if(isGreaterThan9()){
            //推断是不是为ios9以上的版本,跟其他推断一样navigator.userAgent推断,ios会有带版本号
            localUrl=createScheme({type:1,id:"sdsdewe2122"},true);//代码还能够优化一下
            location.href = localUrl;//现实上不少产物会挑选一开始将链接写入到用户须要点击的a标签里
            return;
        }
        window.location.href = localUrl;
        var loadDateTime = Date.now();
        setTimeout(function () {
            var timeOutDateTime = Date.now();
            if (timeOutDateTime - loadDateTime < 1000) {
                window.location.href = "你的下载页面";
            }
        }, 25);
    }else if(isAndroid()){
        //推断是不是是android,详细的推断函数自行百度
        if (isChrome()) {
            //chrome阅读器用iframe打不开得直接去翻开,算一个坑
            window.location.href = localUrl;
        } else {
            //抛出你的scheme
            openIframe.src = localUrl;
        }
        setTimeout(function () {
            window.location.href = "你的下载页面";
        }, 500);
    }else{
        //主假如给winphone的用户预备的,现实都没测过,如今winphone不好找啊
        openIframe.src = localUrl;
        setTimeout(function () {
            window.location.href = "你的下载页面";
        }, 500);
    }
}

现实上就只须要变动这么点,最主要的是app端接入通用链接,注重抛出的链接不要跟主站同域即可,以后就是不停的调试,本身去踩坑吧,记得绑定域名,这个对域名具有肯定的依赖性。

微信中翻开

至此只需微信是打不开的,现实上腾讯系的产物都是打不开的,包含qq阅读器。

关于微信中有两种体式格局:

  • 一种简朴的体式格局就是弹窗通知用户让他去阅读器中翻开——在手艺以外的方法

  • 另有一种体式格局就是运用宝

是的假如是微信就去翻开你的app对应的运用宝,运用宝会去检测你的app是不是存在有则去翻开,但只是去翻开。现实上腾讯的运用宝关于开辟者在功用上做的比设想中的要壮大,你在运用宝的微下载中设置请求你的applink与app store的链接,以后你只需在你的链接参数中带上android_schema="myApp://"就在运用宝中翻开app中的特定功用,假如疏忽运用宝的页面跟本身scheme翻开没有太大区分,详细的操纵能够检察运用宝的申明。简而言之,腾讯的产物中都去借助运用宝这个平台去实行你须要的操纵。在此就不贴代码了,只需推断阅读器假如是微信也许是qq就去跳你的运用宝链接就行。

总结

现实上纯真翻开app异常简朴,现在不管安卓照样ios都能够很好的支撑scheme,固然腾讯系产物除外,现实上百度阅读器也会阻拦scheme(我以为真是奇了葩!!!微信这类尚能明白,一个阅读器竟然私自去阻拦scheme)现在对百度阅读器还没有什么很好的方法,能够尝试是不是能够经由过程百度运用市场去处理。假如是愿望翻开app同时又要翻开下载页,那末ios9及以上就得用通用链接去处理,重点就是这个通用链接。

    原文作者:AlfredMou
    原文地址: https://segmentfault.com/a/1190000005967865
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞