iOS schem與Universal Link 調(diào)試時踩坑解決記錄
簡介
scheme和Universal Link是在iOS中兩種可以在網(wǎng)頁中點擊回跳到自己預定的APP的兩種方式。至于這兩種方式需要怎么配置,這里就不做詳細的介紹了。網(wǎng)上的文章一搜一大堆。今天主要是說一下這次的配置過程中遇到的問題。
AppDelegate和SceneDelegate
SceneDelegate是在iOS13的時候新增的,之前做老項目的迭代更新的時候很少接觸這個文件。這回就簡單的和它交流一下。
對于這次的交流結論是:當AppDelegate和SceneDelegate兩個文件共存的時候,我們不僅僅要關注AppDelegate中的回調(diào)函數(shù),還要關注SceneDelegate代理的回調(diào)函數(shù),因為在不同的iOS系統(tǒng)下走的文件回調(diào)是不一樣的。
在iOS13之前通通走AppDelegate,iOS13之后就會走SceneDelegate。
問題:在iOS13以上冷啟動的時候不會走代理函數(shù)!
上面已經(jīng)說過在iOS13之前通通走AppDelegate,iOS13之后就會走SceneDelegate。
如果你用了Scheme方式:
iOS13之前會走這個代理函數(shù)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{ }
我們只需要在里面多自己相應的邏輯處理就可以了,并且不用關注是冷啟動還是APP已經(jīng)在后臺掛起。都能在這里獲取到你想要的參數(shù)。
iOS13之后會走
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts{ UIOpenURLContext *urlContext = URLContexts.anyObject }
這時就會出現(xiàn)問題了,這個函數(shù)只有在APP在后臺掛起的時候才會走。如果是冷啟動的時候,壓根不會走這個函數(shù),從而導致我們拿不到那個想要跳轉的鏈接地址。
如果你用了Universal Link方式:
iOS13之前會走這個代理函數(shù)
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler{ }
我們只需要在里面多自己相應的邏輯處理就可以了,并且不用關注是冷啟動還是APP已經(jīng)在后臺掛起。都能在這里獲取到你想要的參數(shù)。
iOS13之后會走
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity{ }
這時就會出現(xiàn)問題了,這個函數(shù)只有在APP在后臺掛起的時候才會走。如果是冷啟動的時候,壓根不會走這個函數(shù),從而導致我們拿不到那個想要跳轉的鏈接地址。
總結
在你使用SceneDelegate的時候不管你是scheme還是Universal Link 都會在冷啟動的時候不走代理函數(shù)。解決辦法有兩種:
1.你可以不用SceneDelegate這個文件。這樣就可以避免問題的出現(xiàn)。畢竟現(xiàn)在的APP好像并沒有強制開發(fā)者只用SceneDelegate;
2.在無數(shù)次的測試的時候我們會發(fā)現(xiàn)在APP冷啟動的時候都會走SceneDelegate的
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions
我們可以對這個函數(shù)做做文章。 在connectionOptions
中有兩個屬性,一個是URLContexts
另一個是userActivities
,你再看看對應在SceneDelegate的函數(shù)都有對應的形參,所以我們可以在冷啟動的時候獲取一下相應的參數(shù)然后從而達到獲取鏈接參數(shù)的目的;
scheme: UIOpenURLContext *urlContext = connectionOptions.URLContexts.anyObject; Universal Link: NSUserActivity *userActivity =connectionOptions.userActivities.anyObject;
以上就是iOS schem與Universal Link 調(diào)試時踩坑解決記錄的詳細內(nèi)容,更多關于iOS schem Universal Link調(diào)試的資料請關注腳本之家其它相關文章!
相關文章
objective-c實現(xiàn)點到直線的距離及與垂足的交點
這篇文章主要給大家介紹了利用objective-c實現(xiàn)點到直線的距離及與垂足的交點的相關資料,文中給出了詳細的實現(xiàn)思路和實現(xiàn)代碼,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04IOS CoreAnimation中l(wèi)ayer動畫閃爍的解決方法
這篇文章主要為大家詳細介紹了IOS CoreAnimation中l(wèi)ayer動畫閃爍的原因,分享了layer動畫閃爍的解決方法,感興趣的小伙伴們可以參考一下2016-06-06iOS應用開發(fā)中監(jiān)聽鍵盤事件的代碼實例小結
這篇文章主要介紹了iOS應用開發(fā)中監(jiān)聽鍵盤事件的代碼實例小結,呼出鍵盤等操作為iOS App中的必備功能,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03