美文网首页
iOS - 自定义URL Scheme完成应用间的跳转

iOS - 自定义URL Scheme完成应用间的跳转

作者: Billlin | 来源:发表于2017-08-31 23:51 被阅读0次

    iPhone/iOS SDK 最酷的特性之一就是应用将其自身“绑定”到一个自定义URL Scheme上,该Scheme用于从浏览器或其他应用中启动本应用。

    (实现功能:在应用一中打开应用二)

    应用二需要实现:

    在应用二中注册自定义URL Scheme



    URL Schemes 是一个数组,运行应用定义多个 URL Scheme。key Item0的value就是你自定义的url,此时你的自定义url为 myapp://。

    在应用二中实现application:openURL:options:的代理

    - (BOOL)application:(UIApplication *)application openURL:(nonnullNSURL *)url options:(nonnullNSDictionary<NSString *,id> *)options {
        NSLog(@"Calling Application Bundle ID: %@", options[UIApplicationOpenURLOptionsSourceApplicationKey]);
        NSLog(@"URL scheme: %@", [urlscheme]);
        NSLog(@"URL query: %@", [urlquery]);
        return YES;
    }
    

    Calling Application Bundle ID,是应用一的BundlerID,你可以用这个来确保只有你定义的应用可以与你的应用直接交互。
    URL scheme:你自己的url
    URL query: 从应用一传递过来的参数

    有一点要特别注意,你不能阻止其他应用通过自定义 URL scheme 调用你的应用,然而你可以跳过后续的操作并返回 NO,就像上面的代码那样。也就是说,如果你想阻止其它应用调用你的应用,创建一个与众不同的 URL scheme。尽管这不能保证你的应用不会被调用,但至少大大降低了这种可能性。

    应用一需要实现:

    首先需要配置白名单,在iOS9中,如果使用URL Schemes,就必须在Info.plist中将你要在外部调用的URL Schemes列为白名单,否则不能使用。
    设置白名单的key是LSApplicationQueriesSchemes。


    然后在应用一中,在你需要跳转的地方实现下面的代码:

    - (void)btnClick:(UIButton *)btn {
        NSString *customURL =@"myapp://?token=123abct&registered=1";
        NSURL *url = [NSURLURLWithString:customURL];
        if ([[UIApplicationsharedApplication] canOpenURL:url]) {
            NSLog(@"can go to test");
            [[UIApplicationsharedApplication] openURL:url];
        } else {
            NSLog(@"can not go to test");
        }
    }
    

    注意:

    1. 通过自定义URL Schemes向应用传递参数。因为NSURL作为一个从一个应用调用另一个的基础,遵循RFC 1808标准,基于网页内容的URL格式也可以在这里适用。
      代码中就定义了token和registerd两个参数。

    2.url中的 [url scheme]必须和应用二中自定义的url一样。

    3.在跳转之前先用canOpenURL方法检查你的手机中是否安装了应用二,如果安装了再使用openURL跳转。

    通过网页中的网址打开应用:

    <a href="" id="openApp">打开应用二</a>
    <script type="text">
    document.getElementById('openApp').onclick = function(e){
      // 通过iframe的方式试图打开APP,如果能正常打开,会直接切换到APP,并自动阻止a标签的默认行为
      // 否则打开a标签的href链接
      var ifr = document.createElement('iframe');
      ifr.src = 'myapp://com.martin.app';
      ifr.style.display = 'none';
      document.body.appendChild(ifr);
      window.setTimeout(function(){
      document.body.removeChild(ifr);
      },3000)  
    };  
    </script>
    

    相关文章

      网友评论

          本文标题: iOS - 自定义URL Scheme完成应用间的跳转

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