日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

iOS?schem與Universal?Link?調試時踩坑解決記錄_IOS

作者:饞嘴的張先生 ? 更新時間: 2023-03-16 編程語言

簡介

scheme和Universal Link是在iOS中兩種可以在網頁中點擊回跳到自己預定的APP的兩種方式。至于這兩種方式需要怎么配置,這里就不做詳細的介紹了。網上的文章一搜一大堆。今天主要是說一下這次的配置過程中遇到的問題。

AppDelegate和SceneDelegate

SceneDelegate是在iOS13的時候新增的,之前做老項目的迭代更新的時候很少接觸這個文件。這回就簡單的和它交流一下。

對于這次的交流結論是:當AppDelegate和SceneDelegate兩個文件共存的時候,我們不僅僅要關注AppDelegate中的回調函數,還要關注SceneDelegate代理的回調函數,因為在不同的iOS系統下走的文件回調是不一樣的。

在iOS13之前通通走AppDelegate,iOS13之后就會走SceneDelegate。

問題:在iOS13以上冷啟動的時候不會走代理函數!

上面已經說過在iOS13之前通通走AppDelegate,iOS13之后就會走SceneDelegate。

如果你用了Scheme方式:

iOS13之前會走這個代理函數

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
}

我們只需要在里面多自己相應的邏輯處理就可以了,并且不用關注是冷啟動還是APP已經在后臺掛起。都能在這里獲取到你想要的參數。

iOS13之后會走

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts{
    UIOpenURLContext *urlContext = URLContexts.anyObject
}

這時就會出現問題了,這個函數只有在APP在后臺掛起的時候才會走。如果是冷啟動的時候,壓根不會走這個函數,從而導致我們拿不到那個想要跳轉的鏈接地址。

如果你用了Universal Link方式:

iOS13之前會走這個代理函數

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler{
}

我們只需要在里面多自己相應的邏輯處理就可以了,并且不用關注是冷啟動還是APP已經在后臺掛起。都能在這里獲取到你想要的參數。

iOS13之后會走

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity{
}

這時就會出現問題了,這個函數只有在APP在后臺掛起的時候才會走。如果是冷啟動的時候,壓根不會走這個函數,從而導致我們拿不到那個想要跳轉的鏈接地址。

總結

在你使用SceneDelegate的時候不管你是scheme還是Universal Link 都會在冷啟動的時候不走代理函數。解決辦法有兩種:
1.你可以不用SceneDelegate這個文件。這樣就可以避免問題的出現。畢竟現在的APP好像并沒有強制開發者只用SceneDelegate;
2.在無數次的測試的時候我們會發現在APP冷啟動的時候都會走SceneDelegate的

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions

我們可以對這個函數做做文章。 在connectionOptions中有兩個屬性,一個是URLContexts另一個是userActivities,你再看看對應在SceneDelegate的函數都有對應的形參,所以我們可以在冷啟動的時候獲取一下相應的參數然后從而達到獲取鏈接參數的目的;

scheme:
UIOpenURLContext *urlContext = connectionOptions.URLContexts.anyObject;
Universal Link:
NSUserActivity *userActivity =connectionOptions.userActivities.anyObject;

原文鏈接:https://juejin.cn/post/7189818971443429433

欄目分類
最近更新