APP 之间的跳转

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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、应用场景 我们的APP有时候想直接去到设置页面,程序退到后台进入设置页面然后又重新打开,这样子总是感觉多做了很...
    phzean阅读 16,645评论 10 20
  • 简述 通过对比网页链接来理解iOS上的URL Schemes,应该就容易多了URL Schemes 有两个单词: ...
    Gary_fei阅读 8,436评论 1 5
  • APP之间的跳转需求很普遍,比如我们使用支付宝、微信支付时,会调起支付宝、微信客户端,支付完成后又返回到我们APP...
    Sky109阅读 9,210评论 0 0
  • 一、微信、qq等自带浏览器无法进行app之间的跳转 iOS9以后出来了通用链接跳转,效果可以看网易新闻、今日头条等...
    方小花c阅读 5,498评论 0 1
  • 摘要:简单实现iOS应用之间的跳转,其中一些参数设置和逻辑处理不是太正规(相对标准化的参考文档:自定义 URL S...
    Gxdy阅读 3,021评论 0 0

友情链接更多精彩内容