理論
在Apple的文檔中米同,scheme在URL相關(guān)的內(nèi)容中出現(xiàn)過,比如:
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.
詳情點(diǎn)擊這里窍霞。可以看出拯坟,scheme是URL中 : 之前的部分但金。
在iOS/macOS/WatchOS 2中,可以利用scheme來標(biāo)記APP并且通過它進(jìn)行一些簡單的通信郁季。
scheme的使用
- 設(shè)置scheme
Xcode項(xiàng)目的info.plist中增加URL types冷溃,這是一個(gè)數(shù)組钱磅,里面的每一項(xiàng)都是一個(gè)字典,默認(rèn)只有URL Identifier——標(biāo)記URL types中的某一個(gè)item似枕,在這里可以添加URL Schemes盖淡。比如添加一個(gè)"test" - 使用scheme,添加了scheme以后凿歼,重新run項(xiàng)目褪迟。
- 可以在Safari中輸入添加的scheme,然后就可以跳轉(zhuǎn)到剛才的APP中了答憔。
- 通過
UIApplication.shared.openURL
來進(jìn)行APP間的跳轉(zhuǎn)味赃。如果是iOS9.0之后,需要先在info.plist中添加LSApplicationQueriesSchemes虐拓,然后把要打開的scheme添加到里面心俗。
高級(jí)用法
- 當(dāng)APP被其他APP通過scheme調(diào)起的時(shí)候,可以通過
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
方法從url參數(shù)中獲取到當(dāng)前啟動(dòng)這個(gè)APP的完整URL蓉驹,還可以通過options獲取到其他APP的Bundle Identifier - 在Safari中輸入U(xiǎn)RL或者通過openURL來調(diào)起APP的時(shí)候城榛,除了輸入[scheme]://之外,還可以在后面帶上一些內(nèi)容态兴,比如:
[scheme]://aaa=1?bbb=52
實(shí)戰(zhàn)
微信狠持、支付寶、微博等應(yīng)用的第三方登錄诗茎、支付工坊、分享功能,都是通過scheme來實(shí)現(xiàn)的敢订。下面我們用微信的登錄為例王污,來講解一下scheme的使用過程。
要使用微信的授權(quán)登錄功能楚午,首先要去微信開放平臺(tái)創(chuàng)建一個(gè)應(yīng)用昭齐,需要我們填寫應(yīng)用名稱、icon和Bundle Identifier矾柜,之后微信會(huì)把應(yīng)用的AppId和AppSecret給我們阱驾。然后根據(jù)AppID集成微信的SDK,并且在URL types里面添加一個(gè)以appid為scheme的item怪蔑。到這里里覆,微信的分享功能就集成完成了。那么缆瓣,每一步都在做什么呢喧枷?
其中,第3步中是否到服務(wù)器驗(yàn)證應(yīng)該可以通過抓包來看到,但是我懶了隧甚,沒有做车荔。也不影響整體的流程。
結(jié)語
因?yàn)楸救瞬⒉皇俏⑿诺拈_發(fā)人員戚扳,以上內(nèi)容可能會(huì)有出入忧便,微信在安全方面做的應(yīng)該更好。但是帽借,大致的流程應(yīng)該就是這樣珠增。其他平臺(tái)、功能應(yīng)該差別也不大宜雀。如有錯(cuò)誤或者疑問可以在下面留言切平。
PS: 玩王者榮耀遇到的坑貨太多,弄的很郁悶辐董,又無處發(fā)泄,我就自己做了一個(gè)《舉報(bào)坑貨》的APP禀综,目前只有iOS版本的基本功能简烘,歡迎試玩吐槽。(QQ群:280597764)