Scheme以及微信、支付宝等第三方功能的实现

通过配置plist文件中的scheme完成在app中接入微信、支付宝、微博等第三方平台并且能够来回跳转。

理论

在Apple的文档中,scheme在URL相关的内容中出现过,比如:

1
2
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` .

紧接着这一段,有如下说明:

1
2
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的使用

  1. 设置scheme
    Xcode项目的info.plist中增加URL types,这是一个数组,里面的每一项都是一个字典,默认只有URL Identifier——标记URL types中的某一个item,在这里可以添加URL Schemes。比如添加一个”test”
  2. 使用scheme,添加了scheme以后,重新run项目。
    1. 可以在Safari中输入添加的scheme,然后就可以跳转到刚才的APP中了。
    2. 通过UIApplication.shared.openURL来进行APP间的跳转。如果是iOS9.0之后,需要先在info.plist中添加LSApplicationQueriesSchemes,然后把要打开的scheme添加到里面。

高级用法

  1. 当APP被其他APP通过scheme调起的时候,可以通过func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool方法从url参数中获取到当前启动这个APP的完整URL,还可以通过options获取到其他APP的**Bundle Identifier**
  2. 在Safari中输入URL或者通过openURL来调起APP的时候,除了输入[scheme]://之外,还可以在后面带上一些内容,比如:[scheme]://aaa=1?bbb=52

实战

微信、支付宝、微博等应用的第三方登录、支付、分享功能,都是通过scheme来实现的。下面我们用微信的登录为例,来讲解一下scheme的使用过程。
要使用微信的授权登录功能,首先要去微信开放平台创建一个应用,需要我们填写应用名称、icon和Bundle Identifier,之后微信会把应用的AppId和AppSecret给我们。然后根据AppID集成微信的SDK,并且在URL types里面添加一个以appid为scheme的item。到这里,微信的分享功能就集成完成了。那么,每一步都在做什么呢?
微信授权过程.jpg
其中,第3步中是否到服务器验证应该可以通过抓包来看到,但是我懒了,没有做。也不影响整体的流程。