iOS schem與Universal Link 調(diào)試時(shí)踩坑解決記錄
簡(jiǎn)介

scheme和Universal Link是在iOS中兩種可以在網(wǎng)頁(yè)中點(diǎn)擊回跳到自己預(yù)定的APP的兩種方式。至于這兩種方式需要怎么配置,這里就不做詳細(xì)的介紹了。網(wǎng)上的文章一搜一大堆。今天主要是說(shuō)一下這次的配置過程中遇到的問題。
AppDelegate和SceneDelegate
SceneDelegate是在iOS13的時(shí)候新增的,之前做老項(xiàng)目的迭代更新的時(shí)候很少接觸這個(gè)文件。這回就簡(jiǎn)單的和它交流一下。
對(duì)于這次的交流結(jié)論是:當(dāng)AppDelegate和SceneDelegate兩個(gè)文件共存的時(shí)候,我們不僅僅要關(guān)注AppDelegate中的回調(diào)函數(shù),還要關(guān)注SceneDelegate代理的回調(diào)函數(shù),因?yàn)樵诓煌膇OS系統(tǒng)下走的文件回調(diào)是不一樣的。
在iOS13之前通通走AppDelegate,iOS13之后就會(huì)走SceneDelegate。
問題:在iOS13以上冷啟動(dòng)的時(shí)候不會(huì)走代理函數(shù)!
上面已經(jīng)說(shuō)過在iOS13之前通通走AppDelegate,iOS13之后就會(huì)走SceneDelegate。
如果你用了Scheme方式:
iOS13之前會(huì)走這個(gè)代理函數(shù)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
}
我們只需要在里面多自己相應(yīng)的邏輯處理就可以了,并且不用關(guān)注是冷啟動(dòng)還是APP已經(jīng)在后臺(tái)掛起。都能在這里獲取到你想要的參數(shù)。
iOS13之后會(huì)走
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts{
UIOpenURLContext *urlContext = URLContexts.anyObject
}
這時(shí)就會(huì)出現(xiàn)問題了,這個(gè)函數(shù)只有在APP在后臺(tái)掛起的時(shí)候才會(huì)走。如果是冷啟動(dòng)的時(shí)候,壓根不會(huì)走這個(gè)函數(shù),從而導(dǎo)致我們拿不到那個(gè)想要跳轉(zhuǎn)的鏈接地址。
如果你用了Universal Link方式:
iOS13之前會(huì)走這個(gè)代理函數(shù)
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler{
}
我們只需要在里面多自己相應(yīng)的邏輯處理就可以了,并且不用關(guān)注是冷啟動(dòng)還是APP已經(jīng)在后臺(tái)掛起。都能在這里獲取到你想要的參數(shù)。
iOS13之后會(huì)走
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity{
}
這時(shí)就會(huì)出現(xiàn)問題了,這個(gè)函數(shù)只有在APP在后臺(tái)掛起的時(shí)候才會(huì)走。如果是冷啟動(dòng)的時(shí)候,壓根不會(huì)走這個(gè)函數(shù),從而導(dǎo)致我們拿不到那個(gè)想要跳轉(zhuǎn)的鏈接地址。
總結(jié)
在你使用SceneDelegate的時(shí)候不管你是scheme還是Universal Link 都會(huì)在冷啟動(dòng)的時(shí)候不走代理函數(shù)。解決辦法有兩種:
1.你可以不用SceneDelegate這個(gè)文件。這樣就可以避免問題的出現(xiàn)。畢竟現(xiàn)在的APP好像并沒有強(qiáng)制開發(fā)者只用SceneDelegate;
2.在無(wú)數(shù)次的測(cè)試的時(shí)候我們會(huì)發(fā)現(xiàn)在APP冷啟動(dòng)的時(shí)候都會(huì)走SceneDelegate的
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
我們可以對(duì)這個(gè)函數(shù)做做文章。 在connectionOptions中有兩個(gè)屬性,一個(gè)是URLContexts另一個(gè)是userActivities,你再看看對(duì)應(yīng)在SceneDelegate的函數(shù)都有對(duì)應(yīng)的形參,所以我們可以在冷啟動(dòng)的時(shí)候獲取一下相應(yīng)的參數(shù)然后從而達(dá)到獲取鏈接參數(shù)的目的;
scheme: UIOpenURLContext *urlContext = connectionOptions.URLContexts.anyObject; Universal Link: NSUserActivity *userActivity =connectionOptions.userActivities.anyObject;
以上就是iOS schem與Universal Link 調(diào)試時(shí)踩坑解決記錄的詳細(xì)內(nèi)容,更多關(guān)于iOS schem Universal Link調(diào)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
iOS中如何判斷當(dāng)前網(wǎng)絡(luò)環(huán)境是2G/3G/4G/5G/WiFi
這篇文章主要給大家介紹了關(guān)于iOS中如何判斷當(dāng)前網(wǎng)絡(luò)環(huán)境是2G/3G/4G/5G/WiFi的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
iOS開發(fā)中常見的解析XML的類庫(kù)以及簡(jiǎn)要安裝方法
這篇文章主要介紹了iOS開發(fā)中常見的解析XML的類庫(kù)以及簡(jiǎn)要安裝方法,簡(jiǎn)要地說(shuō)明了在Xcode下的一些特點(diǎn)以供對(duì)比,需要的朋友可以參考下2015-10-10
iOS 中 使用UITextField格式化銀行卡號(hào)碼的解決方案
今天小編給大家分享ios中使用UITextField格式化銀行卡號(hào)碼的實(shí)現(xiàn)思路詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12
iOS應(yīng)用開發(fā)中使用NSLocale類實(shí)現(xiàn)對(duì)象信息的本地化
這篇文章主要介紹了iOS應(yīng)用開發(fā)中使用NSLocale類實(shí)現(xiàn)對(duì)象信息的本地化的方法,能夠?qū)r(shí)間和貨幣等格式化為與系統(tǒng)本地設(shè)置相同的偏好,需要的朋友可以參考下2016-05-05
iOS 修改alertViewController彈框的字體顏色及字體的方法
下面小編就為大家分享一篇iOS 修改alertViewController彈框的字體顏色及字體的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-01-01
利用iOS開發(fā)實(shí)現(xiàn)翻轉(zhuǎn)撲克牌動(dòng)畫的方法
這篇文章主要給大家介紹了關(guān)于利用iOS開發(fā)實(shí)現(xiàn)翻撲克牌動(dòng)畫的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07
iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的解決
大家都知道WebViewJavascriptBridge它主要幫助我們優(yōu)雅的實(shí)現(xiàn)OC與JS的交互,下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-10-10

