美文网首页
APP 之间的跳转

APP 之间的跳转

作者: 小饼干是只松鼠 | 来源:发表于2018-03-27 10:40 被阅读253次

    App之间跳转实现

    在谈App内部的路由之前,先来谈谈在iOS系统间,不同App之间是怎么实现跳转的。

    1. URL Scheme方式

    iOS系统是默认支持URL Scheme的,具体见官方文档

    比如说,在iPhone的Safari浏览器上面输入如下的命令,会自动打开一些App:

    
    // 打开邮箱
    mailto://
    
    // 给110拨打电话
    tel://110
    
    

    在iOS 9 之前只要在App的info.plist里面添加URL types - URL Schemes,如下图:

    image.png

    这里就添加了一个com.ios.Qhomer的Scheme。这样就可以在iPhone的Safari浏览器上面输入:

    
    com.ios.Qhomer://
    
    

    就可以直接打开这个App了。

    关于其他一些常见的App,可以从iTunes里面下载到它的ipa文件,解压,显示包内容里面可以找到info.plist文件,打开它,在里面就可以相应的URL Scheme。

    
    // 手机QQ
    mqq://
    
    // 微信
    weixin://
    
    // 新浪微博
    sinaweibo://
    
    // 饿了么
    eleme://
    
    
    image.png

    当然了,某些App对于调用URL Scheme比较敏感,它们不希望其他的App随意的就调用自己。

    
    - (BOOL)application:(UIApplication *)application
                openURL:(NSURL *)url
      sourceApplication:(NSString *)sourceApplication
             annotation:(id)annotation
    {
        NSLog(@"sourceApplication: %@", sourceApplication);
        NSLog(@"URL scheme:%@", [url scheme]);
        NSLog(@"URL query: %@", [url query]);
    
        if ([sourceApplication isEqualToString:@"com.tencent.weixin"]){
            // 允许打开
            return YES;
        }else{
            return NO;
        }
    }
    
    

    如果待调用的App已经运行了,那么它的生命周期如下:

    image.png

    如果待调用的App在后台,那么它的生命周期如下:

    image.png

    明白了上面的生命周期之后,我们就可以通过调用application:openURL:sourceApplication:annotation:这个方法,来阻止一些App的随意调用。

    image.png image.png

    如上图,饿了么App允许通过URL Scheme调用,那么我们可以在Safari里面调用到饿了么App。手机QQ不允许调用,我们在Safari里面也就没法跳转过去。

    关于App间的跳转问题,感兴趣的可以查看官方文档Inter-App Communication

    App也是可以直接跳转到系统设置的。比如有些需求要求检测用户有没有开启某些系统权限,如果没有开启就弹框提示,点击弹框的按钮直接跳转到系统设置里面对应的设置界面。

    iOS 10 支持通过 URL Scheme 跳转到系统设置 iOS10跳转系统设置的正确姿势 关于 iOS 系统功能的 URL 汇总列表

    2. Universal Links方式

    虽然在微信内部开网页会禁止所有的Scheme,但是iOS 9.0新增加了一项功能是Universal Links,使用这个功能可以使我们的App通过HTTP链接来启动App。 1.如果安装过App,不管在微信里面http链接还是在Safari浏览器,还是其他第三方浏览器,都可以打开App。 2.如果没有安装过App,就会打开网页。

    具体设置需要3步:

    1.App需要开启Associated Domains服务,并设置Domains,注意必须要applinks:开头。

    image.png

    2.域名必须要支持HTTPS。

    3.上传内容是Json格式的文件,文件名为apple-app-site-association到自己域名的根目录下,或者.well-known目录下。iOS自动会去读取这个文件。具体的文件内容请查看官方文档

    image.png

    如果App支持了Universal Links方式,那么可以在其他App里面直接跳转到我们自己的App里面。如下图,点击链接,由于该链接会Matcher到我们设置的链接,所以菜单里面会显示用我们的App打开。

    image.png

    在浏览器里面也是一样的效果,如果是支持了Universal Links方式,访问相应的URL,会有不同的效果。如下图:

    image.png

    以上就是iOS系统中App间跳转的二种方式。

    从iOS 系统里面支持的URL Scheme方式,我们可以看出,对于一个资源的访问,苹果也是用URI的方式来访问的。

    统一资源标识符(英语:Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。URI的最常见的形式是统一资源定位符(URL)。

    举个例子:

    image.png

    这是一段URI,每一段都代表了对应的含义。对方接收到了这样一串字符串,按照规则解析出来,就能获取到所有的有用信息。

    这个能给我们设计App组件间的路由带来一些思路么?如果我们想要定义一个三端(iOS,Android,H5)的统一访问资源的方式,能用URI的这种方式实现么?

    作者:饿了么物流移动团队
    链接:https://juejin.im/post/5ab85a346fb9a028e52dd16e
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:APP 之间的跳转

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