一、应用间跳转介绍

1.1、什么是应用间跳转,有什么作用? 如下

<1>、使用第三方用户登录,需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名"

<2>、应用程序推广,设置-推荐应用-有很多应用程序图标如果本机已经安装过,会直接跳转到另外一个应用程序, 软件的广告,我们在抖音或者进入头条都可以看到很多的点击事件进去其他的app或者去下载appstore下载app

<3>、平时 支付宝,微信支付 等等

1.2、如何实现应用程序间跳转 ?

<1>、跳转appstore进入自己的app: 在我们自己的app里面有时候我们会有更新提醒,其实也就是打开我们自己 app 的 url,以 itms-apps://或https://开头的应用详情页链接,跳转到AppStore,如下,其中url要进行转码,下面我就不再转码了

OC 版本:

Swift 版本:

<2>、打电话:tel://电话号码,代码和上面的一样

<3>、发短信:sms://电话号码,代码和上面的一样

<4>、发邮件:mailTo://邮箱号,代码和上面的一样

1.3、URL : 统一资源定位符

<1>、我们以淘宝网的一个链接为例:https://www.taobao.com/markets/bao/xiangbao?spm=a21bo.2017.201867-main.5.5af911d9blzLlJ

Swift版本

打印结果:协议= https IP或者是域名= www.taobao.com 路径= /markets/bao/xiangbao 参数= spm=a21bo.2017.201867-main.5.5af911d9blzLlJ

OC版本

打印结果和上面的一样

<2>、一个 url 分为以下部分

二、应用间跳转实现

2.1、我们先以自己创建的app实现来回的跳转:Test1 与 Test2 两个项目

2.2、给Test2项目设置一个 URL Scheme,用来其他的app跳转到 Test2

应用间跳转-LMLPHP

给Test2项目设置一个 `URL Scheme`,用来其他的app跳转到 `Test2`

2.3、在Test1项目里面设置白名单

<1>、解释一下什么是白名单:其实白名单是在 iOS9.0 以后提出的,它就是一个数组,里面放的是其他app的URL Scheme名字,在iOS9以前是不需要设置的,可以直接用canOpenURL判断是否可以跳转,但是在iOS9.0之后如果不添加白名单, openURL 是无法判断判断是否可以跳转的。

<2>、设置白名单,如果你要跳转其他的app,就要在自己的app的 info.plist 设置白名单,添加其他app的URL Scheme,白名单的字段是:LSApplicationQueriesSchemes,下面我们在 Test1添加白名单

应用间跳转-LMLPHP

白名单的设置

2.4、在Test1项目跳转到Test2项目测试,代码如下

我们把上面 1.2中的<1>里面的url换为下面,在同一个手机上运行 Test1 和 Test2 两个项目

应用间跳转-LMLPHP

跳转效果

OC 版本:后面的代码都是  1.2中的<1>里面的代码

Swift 版本:后面的代码都是  1.2中的<1>里面的代码

2.5、如果你想在Test2app再返回到Test1app,其实也就是反过来,在 Test2 的白名单里面添加Test1的URL Scheme,在跳转Test1的使用根据Test1的schmem用openURL返回,记得先用 canOpenURL判断一下

2.6、常用白名单字段(更多的白名单字段在mob平台iOS开发文档查看)

新浪

微信

支付宝

QQ

三、怎样跳转到不同界面?

3.1、再建立一个项目 Test3 ,给它添加一个 URL Scheme,再给Test3添加两个控制器 ViewController2与ViewController3

应用间跳转-LMLPHP

再建立一个项目Test3,给它添加一个Url Scheme

3.2、在Test3处理其他Test1(或者其他的app通过openURL)进来的判断

OC 版本

Swift 版本

3.3、在Test1里面的跳转代码

OC 版本

Swift 版本

四、总结

4.1、实现两个app之间跳转的步骤

<1>、在各自的app里面设置 URL scheme

<2>、在各自app的info.plist里面添加字段LSApplicationQueriesSchemes,类型为数组,数组中添加对方的 scheme 字符串(白名单的作用仅仅是iOS9.0方法canOpenURL要求的,因为我们在跳转前需要检查下设备有没有安装将要跳转的应用)

<3>、通过openURL 跳转对方的 URL Scheme 即可

4.2、在最后我重复一下很多app跳转到微信、支付宝、微博等等后,它们是怎么做到再回到我们的app的,首先我们知道这些app里面的白名单肯定是没有我们的 URL Scheme

答:首选我们在其他平台注册自己的应用的时候,都会给我们一个 URL Scheme 字符串,这个字符串我们需要添加到我们的 URL Scheme里面,想必大家也知道了,我们需要添加多个URL Scheme,因为微博,微信,支付宝都会给我们一个唯一的 URL Scheme 字符串,唯一是为了防止我们跳转到他们的app后再返回的时候出错,还有其他设备的 URL Scheme与我们的一样就会造成返回错乱的情况;再说支付宝微信在返回我们的app的时候他们不去白名单里面添加我们的 URL Scheme,那是因为他们知道我们的设备肯定有我们的app,不然怎么会进入到微信和支付宝的?又有人说了我先进到微信,在弹出返回自己app和留在微信的界面弹出,我进入后台去把自己的app卸载,再去微信点击返回自己的app,其实我也是这么测试的,但是只要离开微信,返回自己app和留在微信的按钮就会消失,所以微信返回其他的app是不需要在白名单添加其他app的 URL Scheme。

测试的demo

到此结束这篇文章,希望你能够通过这篇博客彻底知道 URL Scheme作用和白名单是什么以及如何跳转在app之间跳转。有不理解的地方写下你的评论,看到后我会第一时间回答。

02-11 21:58