@@ -32,6 +32,7 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate, AccountManagerDel
32
32
@LazyInjectService var backgroundTasksService : BackgroundTasksServiceable
33
33
@LazyInjectService var appNavigable : AppNavigable
34
34
@LazyInjectService var appRestorationService : AppRestorationServiceable
35
+ @LazyInjectService var deeplinkParser : DeeplinkParsable
35
36
36
37
var shortcutItemToProcess : UIApplicationShortcutItem ?
37
38
@@ -68,20 +69,26 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate, AccountManagerDel
68
69
return
69
70
}
70
71
71
- guard userActivity . activityType == SceneActivityIdentifier . mainSceneActivityType else {
72
- Log . sceneDelegate ( " unsupported user activity type: \( userActivity. activityType ) " )
73
- return
74
- }
72
+ Task {
73
+ guard await !continueWebActivityIfPossible ( scene , userActivity : userActivity) else {
74
+ return
75
+ }
75
76
76
- scene. userActivity = userActivity
77
+ guard userActivity. activityType == SceneActivityIdentifier . mainSceneActivityType else {
78
+ Log . sceneDelegate ( " unsupported user activity type: \( userActivity. activityType) " )
79
+ return
80
+ }
77
81
78
- guard let userInfo = userActivity. userInfo else {
79
- Log . sceneDelegate ( " activity has no metadata to process " )
80
- return
81
- }
82
+ scene. userActivity = userActivity
83
+
84
+ guard let userInfo = userActivity. userInfo else {
85
+ Log . sceneDelegate ( " activity has no metadata to process " )
86
+ return
87
+ }
82
88
83
- Log . sceneDelegate ( " restore from \( userActivity. activityType) " )
84
- Log . sceneDelegate ( " selectedIndex: \( userInfo [ SceneRestorationKeys . selectedIndex. rawValue] ) " )
89
+ Log . sceneDelegate ( " restore from \( userActivity. activityType) " )
90
+ Log . sceneDelegate ( " selectedIndex: \( userInfo [ SceneRestorationKeys . selectedIndex. rawValue] ) " )
91
+ }
85
92
}
86
93
87
94
private func prepareWindowScene( _ windowScene: UIWindowScene ) {
@@ -217,11 +224,22 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate, AccountManagerDel
217
224
}
218
225
219
226
Task {
220
- let success = await DeeplinkParser ( ) . parse ( url: url)
227
+ let success = await deeplinkParser . parse ( url: url)
221
228
Log . sceneDelegate ( " scene open url: \( url) success: \( success) " )
222
229
}
223
230
}
224
231
232
+ @discardableResult
233
+ private func continueWebActivityIfPossible( _ scene: UIScene , userActivity: NSUserActivity ) async -> Bool {
234
+ guard userActivity. activityType == NSUserActivityTypeBrowsingWeb,
235
+ let incomingURL = userActivity. webpageURL else {
236
+ Log . sceneDelegate ( " the scene continue userActivity - is not NSUserActivityTypeBrowsingWeb " , level: . error)
237
+ return false
238
+ }
239
+
240
+ return await deeplinkParser. parse ( url: incomingURL)
241
+ }
242
+
225
243
// MARK: - Handoff support
226
244
227
245
func scene( _ scene: UIScene , willContinueUserActivityWithType userActivityType: String ) {
@@ -231,13 +249,7 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate, AccountManagerDel
231
249
func scene( _ scene: UIScene , continue userActivity: NSUserActivity ) {
232
250
Log . sceneDelegate ( " scene continue userActivity " )
233
251
Task {
234
- guard userActivity. activityType == NSUserActivityTypeBrowsingWeb,
235
- let incomingURL = userActivity. webpageURL else {
236
- Log . sceneDelegate ( " scene continue userActivity - invalid activity " , level: . error)
237
- return
238
- }
239
-
240
- await UniversalLinksHelper . handleURL ( incomingURL)
252
+ await continueWebActivityIfPossible ( scene, userActivity: userActivity)
241
253
}
242
254
}
243
255
0 commit comments