iOS项目中的URL|iOS项目中的URL Schemes与白名单

在项目中对接支付、分享等第三方框架的时候,经常会用到URL Scheme和白名单等的配置,一直都是照着文档直接配置,没有理解它的作用。 最近写分享的时候分享静态页面,后台问我要一个iOS协议,用于跳转appstore的下载地址,没有搞明白就百度了一下,搜了很多文章,终于搞明白了它的作用。现在就来总结一下吧。

  1. URL Scheme是什么
由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。 我们可以对比网页链接来理解:
  • URL:简单的比如:www.apple.com就是一个url,我们也叫它链接或网址。
  • Scheme:表示的是一个 URL 中最初始的位置,即 ://之前的那段字符。比如www.apple.com这个网址的 Schemes是 http
这样我们就很容易理解,在本地应用为主的iOS系统中,我们可以像寻找一个网页一样,通过一种特殊的URL来定位一个应用甚至应用中的某个功能。举个例子,如果我们要打开微信,那么我们只需要找到微信应用的scheme就可以了,也就是weixin://;但是我们要打开微信的朋友圈,我们还需要加上后面的url,也就是weixin://dl/moments。
2. URL Scheme如何设置
我们可以理解,如果想要其他应用识别出我们的应用,比如在支付完成后从支付宝跳转回我们的应用或者分享结束后返回我们的应用,就需要将我们应用设置的URL scheme告诉其他应用。那么如何设置URL scheme呢?下面我们就来试一试吧。
首先选中工程的target->info->URL Types
在URL Schemes中设置自己应用的scheme就可以了。
【iOS项目中的URL|iOS项目中的URL Schemes与白名单】这时我们的info.plist就变成了这样:


这样,当我们调起支付宝或其他应用时,将已经设置好的scheme传给他们就可以了。一般情况下一个应用只需要一个且唯一的scheme就可以了,但是当我们集成了第三方应用,比如友盟分享时,他会要求我们按照一个标准来设置应用的scheme,这时我们可以根据需要多添加一个scheme。
  • 配置URL scheme的白名单
当我们需要打开其他应用时,正常情况下,我们应该是先用 canOpenURL:方法先判断能否打开这个url,然后再用 openURL方法打开该URL的。这样可以带来更好的用户体验。 因为iOS9的时候苹果加强了权限,只有在info.plist文件中加入了URL Schemes白名单才能使用canOpenURL:方法来判断是否能打开该url。该白名单的上限是50个。也就是说,你最多只能使用canOpenURL:方法判断50个URL Schemes。当然,平常我们都用不了那么多,就算是集成分享功能,50个肯定够了。
备注:只是对canOpenURL:方法有限制,openURL:方法是没有限制的。
我们需要在MyApp的info.plist里面将weixin设置为白名单。
步骤:点击info.plist->右键->Open As->Source Code->添加下面的代码
LSApplicationQueriesSchemesweixin复制代码

这样就可以了。











    推荐阅读