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

被唤起端的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:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容