Scheme的理解
我們都知道乍炉,蘋(píng)果系統(tǒng)使用沙盒機(jī)制來(lái)保障用戶(hù)的隱私和安全绢片,一個(gè)App只能訪問(wèn)自己的沙盒,不能訪問(wèn)其他app的信息岛琼。這樣保證了app的用戶(hù)的信息的同時(shí)底循,也阻礙了不同的App 之間的信息交流。所以蘋(píng)果提供了一個(gè)可以在App之間跳轉(zhuǎn)的方法:URL Scheme槐瑞。一個(gè)App可以設(shè)置自己的URL Scheme此叠,另外的App可以使用這個(gè)URL Scheme,然后通過(guò)系統(tǒng)的OpenURL來(lái)打開(kāi)該App随珠。就像網(wǎng)頁(yè)一樣灭袁,通過(guò)一個(gè)網(wǎng)址來(lái)跳轉(zhuǎn)到另一個(gè)網(wǎng)址。
URL的樣式
protocol://hostname[:port]/path/[;parameters][?query]#fragment
- protocol(Scheme) :協(xié)議名稱(chēng)窗看,例如 http茸歧、https,和你自己定義的 Scheme显沈。
- hostname:域名或ip地址软瞎,例如 www.baidu.com 就是域名;110.242.68.3就是IP地址拉讯。
- port:端口號(hào)涤浇,例如 www.baidu.com:80后面的80就是端口號(hào),80是默認(rèn)端口號(hào)魔慷,一般不顯示只锭。
- path:路徑,表示主機(jī)上的目錄或文件路徑院尔。例如:https://fanyi.baidu.com/translate蜻展。
- query:可選項(xiàng),用于傳遞參數(shù)邀摆,由?符號(hào)開(kāi)始纵顾,&符號(hào)隔開(kāi),參數(shù)名和值用=符號(hào)相連栋盹。例如:https://www.baidu.com/s?ie=utf-8&wd=ios施逾。
舉例如下:
shemeUseApp://ipOrYuming:8080/path?param1=xxx¶m2=yyy
設(shè)置Scheme的注意點(diǎn)
- URL Scheme必須能唯一標(biāo)識(shí)一個(gè)APP。
- 如果你設(shè)置的URL Scheme與別的APP的URL Scheme沖突時(shí),你的APP不一定會(huì)被啟動(dòng)起來(lái)汉额。
注冊(cè)URL Scheme
-
打開(kāi)工程沪饺,點(diǎn)擊項(xiàng)目名稱(chēng),找到
info
條目闷愤,在info
條目下整葡,找到URL Types
未添加URL Types.png -
在
URL Types
處點(diǎn)擊“+”號(hào),新增一個(gè)URLTypes
讥脐,然后填寫(xiě)identifier
和URL Schemes
.- identifier:URL Identifier是自定義的 URL scheme 的名字遭居,一般采用反轉(zhuǎn)域名的方法保證該名字的唯一性。例如:
com.xxxx.schemeUse
旬渠。 - URL Schemes:為自己的app定義的schemes俱萍。使用另外的app調(diào)起自己的app時(shí),使用這個(gè)參數(shù)告丢,其格式為:
schemeUseApp://
添加URL Types.png
- identifier:URL Identifier是自定義的 URL scheme 的名字遭居,一般采用反轉(zhuǎn)域名的方法保證該名字的唯一性。例如:
驗(yàn)證App的調(diào)起
使用上述所說(shuō)的schemeUseApp://
在瀏覽器中進(jìn)行測(cè)試枪蘑。本文使用的是模擬器,在瀏覽器中輸入schemeUseApp://
岖免,點(diǎn)擊搜索岳颇。
-
如果手機(jī)上沒(méi)有還沒(méi)有安裝app,是找不到的颅湘,safari提示的時(shí)候是以網(wǎng)址的形式進(jìn)行提醒话侧,“Safari瀏覽器打不開(kāi)該網(wǎng)頁(yè),因?yàn)榫W(wǎng)址無(wú)效闯参≌芭簦”
未安裝App的情況.png
-
手機(jī)上已經(jīng)安裝了App的情況下,是可能正常調(diào)起鹿寨。
已安裝App的情況.png
不同應(yīng)用之間新博,帶參數(shù)的跳轉(zhuǎn)
在跳轉(zhuǎn)的 URL scheme
中可以添加參數(shù),比如:shemeUseApp://ipOrYuming:8080/path?param1=xxx¶m2=yyy
脚草。
在工程的AppDelegate.m
文件中赫悄,重寫(xiě)方法- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
,并在方法中進(jìn)行URL的分析拆解玩讳,就可以得到相關(guān)的參數(shù)涩蜘。
其程序表現(xiàn)如下:
AppDelegation.m
中的openURL
方法中的打印結(jié)果為:
2022-05-09 15:04:35.544398+0800 schemeUse[6268:326999] url : shemeuseapp://ipOrYuming:8080/path?param1=xxx¶m2=yyy
2022-05-09 15:04:35.544524+0800 schemeUse[6268:326999] URL scheme:shemeuseapp
2022-05-09 15:04:35.544580+0800 schemeUse[6268:326999] URL host: ipOrYuming
2022-05-09 15:04:35.544632+0800 schemeUse[6268:326999] URL port: 8080
2022-05-09 15:04:35.544695+0800 schemeUse[6268:326999] URL path: /path
2022-05-09 15:04:35.544739+0800 schemeUse[6268:326999] URL query: param1=xxx¶m2=yyy