理论
在Apple的文档中,scheme在URL相关的内容中出现过,比如:
This property contains the scheme. Any percent-encoded characters are not unescaped. For example, in the URL `http://www.example.com/index.html` , the scheme is `http` .
The full URL is the concatenation of the scheme, a colon ( `:` ), and the value of `resourceSpecifier` .
紧接着这一段,有如下说明:
Note
The term “protocol” is also sometimes used when talking about network-based URL schemes. However, not all URL schemes are networking protocols—data:// URLs, for example.
详情点击这里。可以看出,scheme是URL中 : 之前的部分。
在iOS/macOS/WatchOS 2中,可以利用scheme来标记APP并且通过它进行一些简单的通信。
scheme的使用
- 设置scheme
Xcode项目的info.plist中增加URL types,这是一个数组,里面的每一项都是一个字典,默认只有URL Identifier——标记URL types中的某一个item,在这里可以添加URL Schemes。比如添加一个"test" - 使用scheme,添加了scheme以后,重新run项目。
- 可以在Safari中输入添加的scheme,然后就可以跳转到刚才的APP中了。
- 通过
UIApplication.shared.openURL
来进行APP间的跳转。如果是iOS9.0之后,需要先在info.plist中添加LSApplicationQueriesSchemes,然后把要打开的scheme添加到里面。
高级用法
- 当APP被其他APP通过scheme调起的时候,可以通过
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
方法从url参数中获取到当前启动这个APP的完整URL,还可以通过options获取到其他APP的Bundle Identifier - 在Safari中输入URL或者通过openURL来调起APP的时候,除了输入[scheme]://之外,还可以在后面带上一些内容,比如:
[scheme]://aaa=1?bbb=52
实战
微信、支付宝、微博等应用的第三方登录、支付、分享功能,都是通过scheme来实现的。下面我们用微信的登录为例,来讲解一下scheme的使用过程。
要使用微信的授权登录功能,首先要去微信开放平台创建一个应用,需要我们填写应用名称、icon和Bundle Identifier,之后微信会把应用的AppId和AppSecret给我们。然后根据AppID集成微信的SDK,并且在URL types里面添加一个以appid为scheme的item。到这里,微信的分享功能就集成完成了。那么,每一步都在做什么呢?
其中,第3步中是否到服务器验证应该可以通过抓包来看到,但是我懒了,没有做。也不影响整体的流程。
结语
因为本人并不是微信的开发人员,以上内容可能会有出入,微信在安全方面做的应该更好。但是,大致的流程应该就是这样。其他平台、功能应该差别也不大。如有错误或者疑问可以在下面留言。
PS: 玩王者荣耀遇到的坑货太多,弄的很郁闷,又无处发泄,我就自己做了一个《举报坑货》的APP,目前只有iOS版本的基本功能,欢迎试玩吐槽。(QQ群:280597764)