iOS schem與Universal Link 調(diào)試時(shí)踩坑解決記錄
簡(jiǎn)介
scheme和Universal Link是在iOS中兩種可以在網(wǎng)頁(yè)中點(diǎn)擊回跳到自己預(yù)定的APP的兩種方式。至于這兩種方式需要怎么配置,這里就不做詳細(xì)的介紹了。網(wǎng)上的文章一搜一大堆。今天主要是說一下這次的配置過程中遇到的問題。
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)說過在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.在無數(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)文章
objective-c實(shí)現(xiàn)點(diǎn)到直線的距離及與垂足的交點(diǎn)
這篇文章主要給大家介紹了利用objective-c實(shí)現(xiàn)點(diǎn)到直線的距離及與垂足的交點(diǎn)的相關(guān)資料,文中給出了詳細(xì)的實(shí)現(xiàn)思路和實(shí)現(xiàn)代碼,對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-04-04IOS CoreAnimation中l(wèi)ayer動(dòng)畫閃爍的解決方法
這篇文章主要為大家詳細(xì)介紹了IOS CoreAnimation中l(wèi)ayer動(dòng)畫閃爍的原因,分享了layer動(dòng)畫閃爍的解決方法,感興趣的小伙伴們可以參考一下2016-06-06IOS 聊天界面(自適應(yīng)文字)的實(shí)現(xiàn)
本文主要介紹一個(gè)實(shí)現(xiàn)聊天界面的思路過程,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03iOS簡(jiǎn)單抽屜效果的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了iOS簡(jiǎn)單抽屜效果的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08iOS應(yīng)用開發(fā)中監(jiān)聽鍵盤事件的代碼實(shí)例小結(jié)
這篇文章主要介紹了iOS應(yīng)用開發(fā)中監(jiān)聽鍵盤事件的代碼實(shí)例小結(jié),呼出鍵盤等操作為iOS App中的必備功能,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03iOS中一行代碼實(shí)現(xiàn) UIView 鏤空效果
這篇文章主要介紹了一行代碼實(shí)現(xiàn) UIView 鏤空效果,這是一種實(shí)現(xiàn) UIView 鏤空效果的方案,可以快速實(shí)現(xiàn)任意形狀的鏤空、文字的鏤空、帶鏤空的毛玻璃效果等。需要的朋友可以參考下2018-11-11