理論
在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添加到里面。
LSApplicationQueriesSchemes.png
高級用法
- 當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。到這里,微信的分享功能就集成完成了。那么,每一步都在做什么呢?
微信授權過程.jpg
其中,第3步中是否到服務器驗證應該可以通過抓包來看到,但是我懶了,沒有做。也不影響整體的流程。
結語
因為本人并不是微信的開發人員,以上內容可能會有出入,微信在安全方面做的應該更好。但是,大致的流程應該就是這樣。其他平臺、功能應該差別也不大。如有錯誤或者疑問可以在下面留言。
PS: 玩王者榮耀遇到的坑貨太多,弄的很郁悶,又無處發泄,我就自己做了一個《舉報坑貨》的APP,目前只有iOS版本的基本功能,歡迎試玩吐槽。(QQ群:280597764)