美文网首页
h5或者iOSApp如何唤起另一个iOSApp

h5或者iOSApp如何唤起另一个iOSApp

作者: 十三楼的大笨象 | 来源:发表于2019-04-03 14:59 被阅读0次

    被唤起端的APP需要做的工作如下:

    设置URL Scheme 只是一个app的标识 具体是什么自己定 一个Scheme对应一个app。URL identifier只是一个标示符,随意填写,建议写成:com..反转域名的方法保证该名字的唯一性,可以使用项目的build id。

    1.png

    唤起端需要做的工作分两种情况:

    APP唤起APP:

    打开对应的scheme:
    需要注意的一点事 这个url需要在scheme的尾部添加:// 比如设定的scheme是A 那么这个要打开的url则是A://

    - (void)awakeOtherApp
    {
        NSString *customURL = @"openDemoApp://";
        
        if ([[UIApplication sharedApplication]
             canOpenURL:[NSURL URLWithString:customURL]])
        {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
                                                            message:[NSString stringWithFormat:
                                                                     @"No custom URL defined for %@", customURL]
                                                           delegate:self cancelButtonTitle:@"Ok"
                                                  otherButtonTitles:nil]; 
            [alert show]; 
        } 
    }
    

    在对应的位置调用这个方法即可

    在ios9以后,因为注重了安全问题,所以需要在info.plist文件中设置一个白名单,如果不设置的话会包以下错误信息:

    -canOpenURL: failed for URL: "openDemoApp://" - error: "This app is not allowed to query for scheme opendemoapp"
    

    2、h5调起APP

    大概原理是:判断是安卓还是苹果,如果为苹果显示苹果的标签,点击a标签,执行跳转唤起APP(openAPP),加一个定时器,三秒(可根据需求调整)之后,如果没有唤起成功,跳转到App Store下载页面。

    <body>
        <div id="btn">
    <!--        <button onclick="submitFn()">打开app</button> -->
            <a href="安卓配置" class="a-btn"  style="display: none">安卓</a>
            <a href="苹果URL scheme://" class="i-btn" style="display: none">苹果</a>
        </div>
      </body>
    <script src="http://m-cdn.saclub.com.cn/app/2.4/js/jquery-1.11.3.min.js"></script>
        <script type="text/javascript">
         var ua = navigator.userAgent.toLowerCase();
         var isWeixin = ua.indexOf('micromessenger') != -1;
         var isAndroid = ua.indexOf('android') != -1;
         var isIos = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1);
         var d = new Date();
         var t0 = d.getTime();
        $(function(){
    //判断执行安卓按钮还是苹果按钮
             if(isAndroid){
                 $(".a-btn").show();
              }else{
                  $(".i-btn").show();
              }
        });
        //跳转下载
        $(".a-btn").click(function(){
    //安卓
             openApp("安卓下载链接");
        });
        $(".i-btn").click(function(){
    //苹果
             openApp("IOS App Store下载链接");
        });
        function openApp(src) {
        // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为
        // 否则打开a标签的href链接
             var delay = setInterval(function(){
                 var d = new Date();
                 var t1 = d.getTime();
                 if( t1-t0<3000 && t1-t0>2000){
                    alert('请下载APP');
                     window.location.href =src;
                 }
                 if(t1-t0>=3000){
                      clearInterval(delay);
                 }
            },2000);
        }
    
    

    <a href="苹果URL scheme://" class="i-btn" style="display: none">苹果</a>
    注:在IOS中设置URL scheme
    前端跳转代码中需要在URL scheme后添加://,否则无法完成跳转。

    URL Scheme 是什么?

    iOS有个特性就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme用于从浏览器或其他应用中启动本应用。常见的分享到第三方之间的跳转都是基于Scheme的。

    通过对比网页链接来理解iOS 上的 URL Schemes,应该就容易多了。

    URL,我们都很清楚,http://www.apple.com就是个URL,我们也叫它链接或网址;
    Schemes,表示的是一个 URL 中的一个位置——最初始的位置,即 ://之前的那段字符。比如 http://www.apple.com这个网址的Schemes是 http。
    根据我们上面对URL Schemes的使用,我们可以很轻易地理解,在以本地应用为主的 iOS 上,我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该这个应用的URL 的 Schemes 部分,也就是开头儿那部分。比如短信,就是 sms:

    相关文章

      网友评论

          本文标题:h5或者iOSApp如何唤起另一个iOSApp

          本文链接:https://www.haomeiwen.com/subject/tgfzbqtx.html