iOS schem與Universal Link 調試時踩坑解決記錄
簡介

scheme和Universal Link是在iOS中兩種可以在網頁中點擊回跳到自己預定的APP的兩種方式。至于這兩種方式需要怎么配置,這里就不做詳細的介紹了。網上的文章一搜一大堆。今天主要是說一下這次的配置過程中遇到的問題。
AppDelegate和SceneDelegate
SceneDelegate是在iOS13的時候新增的,之前做老項目的迭代更新的時候很少接觸這個文件。這回就簡單的和它交流一下。
對于這次的交流結論是:當AppDelegate和SceneDelegate兩個文件共存的時候,我們不僅僅要關注AppDelegate中的回調函數(shù),還要關注SceneDelegate代理的回調函數(shù),因為在不同的iOS系統(tǒng)下走的文件回調是不一樣的。
在iOS13之前通通走AppDelegate,iOS13之后就會走SceneDelegate。
問題:在iOS13以上冷啟動的時候不會走代理函數(shù)!
上面已經說過在iOS13之前通通走AppDelegate,iOS13之后就會走SceneDelegate。
如果你用了Scheme方式:
iOS13之前會走這個代理函數(shù)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
}
我們只需要在里面多自己相應的邏輯處理就可以了,并且不用關注是冷啟動還是APP已經在后臺掛起。都能在這里獲取到你想要的參數(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已經在后臺掛起。都能在這里獲取到你想要的參數(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 調試時踩坑解決記錄的詳細內容,更多關于iOS schem Universal Link調試的資料請關注腳本之家其它相關文章!
相關文章
iOS中如何判斷當前網絡環(huán)境是2G/3G/4G/5G/WiFi
這篇文章主要給大家介紹了關于iOS中如何判斷當前網絡環(huán)境是2G/3G/4G/5G/WiFi的相關資料,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-07-07
iOS 中 使用UITextField格式化銀行卡號碼的解決方案
今天小編給大家分享ios中使用UITextField格式化銀行卡號碼的實現(xiàn)思路詳解,非常不錯,具有參考借鑒價值,需要的朋友參考下2016-12-12
iOS應用開發(fā)中使用NSLocale類實現(xiàn)對象信息的本地化
這篇文章主要介紹了iOS應用開發(fā)中使用NSLocale類實現(xiàn)對象信息的本地化的方法,能夠將時間和貨幣等格式化為與系統(tǒng)本地設置相同的偏好,需要的朋友可以參考下2016-05-05
iOS 修改alertViewController彈框的字體顏色及字體的方法
下面小編就為大家分享一篇iOS 修改alertViewController彈框的字體顏色及字體的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導致crash的解決
大家都知道WebViewJavascriptBridge它主要幫助我們優(yōu)雅的實現(xiàn)OC與JS的交互,下面這篇文章主要給大家介紹了關于iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導致crash的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10

