app之间的跳转很多场景都用到, 本文主要讲解跳转的两种方式,以及推荐一个好用的第三方平台.
URL Scheme方式
具体操作步骤如下:
在工程或者info.plist里面直接配置app的 URL Schemes 用来让别的app跳转到自己, 配置方式有两种, 如下图所示
1.在工程里面配置
2.在info.plist里面配置
跳转方法
iOS10以前
UIApplication.shared.openURL(url)iOS10以后
//不带options
1 |
|
//带options
1 |
|
options目前只有一个key那就是UIApplicationOpenURLOptionUniversalLinksOnly, 其默认只为false. 解释如下
-
true: 安装了目标app, 则跳转目标app, 没有安装不能跳转,并在回调中返回false
-
false: 安装了目标app就跳转到目标app, 没有安装目标app,他能打开safari跳转到对应的网站
3.谨慎使用 UIApplication.shared.canOpenURL(url)
canOpenURL只有在info.plist里面注册过的 URL Schemes 才能打开, 并且info.plist里面最多只能注册50个, 一般够用. (但是像微信这种大型应用, 在别的app跳转进来之后再返回源app是都要要通过源app的URL Scheme回到源应用, 如果没有三方应用都要在微信里注册,那肯定是不现实的, 也肯定不够用. 当然另有解决方法, 下面会谈到)
注意: openUrl
方法没有50个的数量限制
使用方法
像微信这种大型应用, 在别的app跳转进来之后再返回源app是都要要通过源app的URL Scheme回到源应用, 如果没有三方应用都要在微信里注册,那肯定是不现实的, 也肯定不够用. 解决办法很简单: 跳转时将源app的URL Scheme传递给微信
首先了解一下URL的组成部分
1 |
|
结果如下:
1 |
|
从源app跳转到目标app时, url是传递参数的媒介
代码入下:
1.源app代码
1 |
|
优化建议:
-
如果跳转第三方时将自己的Scheme传递过去, 不建议使用BundleIdentifier, 因为不安全, 可以自己定义一个唯一标示即可
-
拼接URL的规则推荐: com.heron.Base://baseapp/function?title=hello&content=world&urlscheme=AppOneScheme&name=AppOne
- 上面的三种颜色分别对应一个部分
- 红色:目标app的scheme
- 蓝色:参数配置, 目标app通过这个来判断自己要做什么.
- 绿色: 参数, 参数里面包含了标题, 内容, 源app的scheme(方便从目标app返回源app), 源app的名称(方便第三方应用在返回源app的时候给用户提示要返回到哪个app)
2.目标app的代码
目标app接收到跳转参数的地方在在AppDelegate中, 方法如下:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
1 |
|
Universal Links方式
虽然在微信内部开网页会禁止所有的Scheme,但是iOS 9.0新增加了一项功能是Universal Links,使用这个功能可以使我们的App通过HTTP链接来启动App。
1.如果安装过App,不管在微信里面http链接还是在Safari浏览器,还是其他第三方浏览器,都可以打开App。
2.如果没有安装过App,就会打开网页。
具体的使用方法此文章写的十分详细,请查阅
推荐使用的第三个 魔窗
能够快速跳转, 定位页面, 支持universalLink等, 功能十分强大, 具体使用方法参考官网说明.