深入浅出话iOS URL Scheme(一)理论篇

理论篇

什么是URL Scheme?

简单的说,由于苹果选择沙盒来保障用户的隐私和安全,App只能访问自己的沙盒,但同时也阻碍了应用间合理的信息共享。所以苹果提供了一个可以在App之间跳转的方法:URL Scheme。如果你的App需要提供一个供别的App访问的功能或者数据,那么你必须在你的App定义一个相对应的URL Scheme。当别的App使用一个URL Scheme进行访问时,系统会根据URL Scheme进行匹配,执行相应的操作。

如何理解URL Scheme?

为了更加深入的理解上面的那段话,首先我们清楚几个概念:

  1. URL(Uniform Resoure Locator:统一资源定位器):也就是我们熟悉的那个“网址”,通过他我们可以访问到我们想要的服务和资源,并且URL可以传递相应的参数;

  2. URL地址格式排列为:scheme://host:port/path,举个🌰,http://www.sohu.com/domain/HXWZ就是一个典型的URL,而这个网址对应的Scheme就是http,表示的是一个 URL 中的一个位置——最初始的位置。也可以理解为一种自定义的协议。

  3. 根据我们上面对 URL Scheme 的理解,我们可以很轻易地理解,在以本地应用为主的 iOS 上,我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的标识,也就是Scheme。比如微信的Scheme是weixin,打开微信扫一扫功能的URL Scheme则是weixin://dl/scan

这样一对比就容易很明白的理解出了URL Scheme的真正含义,它是为了在iOS系统中定位对应的App然后执行对应的操作,复杂的URL Scheme还可以传递参数。

URL Scheme的应用场景?

  1. 使用iOS系统预设的URL Scheme调用系统App:
    iOS系统内置的App,如mail,电话等等,都有相应的URL Scheme供其他的App调用.比如下面的代码就是使用系统的电话App给18888888888打电话。
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://18888888888"]];
    关于其他系统支持的URL Scheme我在此不再赘述。以下是一些Scheme合集:
  1. 使用URL Scheme让别的应用打开自己的App,自己的App写好一些需要别的App来使用的功能。比如对于支付宝来说,当的App使用支付宝支付功能时,那么这些App就可以使用支付宝定义好的Scheme来访问支付宝的支付功能。

  2. 使用第三方App写好的URL Scheme实现一些快捷功能。比如说我是一个工具类App,如果我知道很多App的Scheme,可以直接调用他们的很多功能,实现功能聚合的目的。事实上来说,Launch Center Pro 就是基于Scheme来实现快捷方式的。

  3. 跨App间的一些交互
    这个其实与第二条类似,但是分开说是因为,假如你们公司有2个以上的App或者你自己开发的多款App,要进行进程间的数据共享或者其他操作,完全可以使用URL Scheme进行一些具有想象力的操作。

  4. 进行App间的跳转。在传统意义上的页面跳转,无非也就是以下几种方式:

    • Storyboard的segues方式跳转
    • 直接跳转present,dismiss跳转
    • UINavigationController的push,pop跳转

这些方式其实都有一个缺点,那就是跳转很不灵活,如果想让一个模块根据需求动态的跳转不同页面,传递不同的参数,那么就必须书写很多复杂的逻辑几句一些情况也选择要跳转的逻辑。
或许你说我可以通过控制器的名字来创建对应的控制器进行动态的跳转,但事实上这样的方式如果仅仅进行跳转还是能满足需求的,但是在传递参数方面就是闲的力不从心。
所以说了那么多,有一种跳转方式可以既满足跳转的动态需求,也可以灵活的传递参数。这种方式就是使用URL Scheme进行动态跳转。这也是我非常推荐的一种使用方式。并且在一些组件化开发的尝试中,这种跳转方式也带来了很多便利。

使用URL Scheme跳转的好处

  1. 这种跳转方式是很灵活的,我本地只需要需要进行简单逻辑处理,使用openURL来打开对应的控制器,而这个你想要打开的URL Scheme是可以动态的从服务器动态获取的。那么这样就很简单的实现了动态跳转。
  2. URL Scheme传递参数的方式也与URL一致,只需要简单的在URL里附加上对应的参数即可。
  3. 这种页面跳转是无差别的,通过URL Scheme跳转可以无缝的在H5页面和原生页面之间跳转传值,而无非做更多的逻辑判断。

使用URL Scheme跳转的缺点

  1. 写在info.plist文件中的Scheme可能会被一些反编译手段获取到。
  2. URL Scheme可能会被劫持调来安全隐患,比如支付宝的URL Scheme劫持漏洞

当然这是避免的,以下引自乌云:

  1. 苹果可以限制 iOS 应用不能注册别的应用的 Bundle ID 作为 URL Scheme。这样的话,使用自己的 Bundle ID 作为 URL Scheme 的接收器就会变的安全很多。
  1. 第三方应用可以通过①给自己发送 URL Scheme 请求来证明没有被劫持,如果没有收到自己的 URL Scheme,就可以及时给用户发送提醒;②利用 MobileCoreServices 服务中的 applicationsAvailableForHandlingURLScheme() 来查看所有注册了该 URL Schemes 的应用和处理顺序,从而检测自己、或者别人的 URL Scheme 是否被劫持。

下一篇写实战。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,566评论 25 707
  • 两天的拓展训练很快结束,其中有笑也有泪,教官通过游戏的方式让大家都懂了很多道理。
    刘红_b696阅读 132评论 0 0
  • -起- 我大概不是第一次进这栋楼。 可能是小学的时候来过,我想。记忆中楼梯间里的时光昏暗且无比漫长。但是不知怎地我...
    鹘鵃阅读 768评论 6 16
  • 玉淬凰阅读 169评论 0 0
  • ☞长相配不上自己的眼光。 ☞没有一见钟情的资本,少了日久生情的条件。 ☞余生好长,他好难忘。 ☞因为爱过一个人,很...
    姜牧之5373阅读 496评论 0 0