У меня есть намерение Siri, которое отображает следующий пользовательский интерфейс.
[]
Когда пользователь нажимает на него, запускается приложение.
Когда приложение находится в фоновом режиме , я использую следующий код в делегате сцены, чтобы зафиксировать, что сделал пользователь, и направить его в нужное окно. Он работает должным образом.
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
print("CONTINUE USER ACTIVITY")
guard let intent = userActivity.interaction?.intent as? WasteWizardIntent else {
print("AppDelegate: WasteWizardIntent - FALSE")
//return false
return
}
print("AppDelegate: WasteWizardIntent - TRUE")
print(intent)
appState.selectedTab = .wastewizard
appState.deepLinkActionSheet = true
appState.deepLinkString = intent.garbage!
//contentView.wasteWizard.viewModel.goToWasteItem(for: intent.garbage!)
}
Однако я не могу понять, что делать, когда приложение запускается, когда оно НЕ находится в фоновом режиме.
Я пробовал следующее :
- В методе SceneDelegate
scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
. Когда я устанавливаю точку останова, userActvity, intent и handoffUserActivityType равны нулю.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
RootAlerter.shared.rootViewController = window.rootViewController
self.window = window
window.makeKeyAndVisible()
let userActivity = connectionOptions.userActivities
let string = connectionOptions.handoffUserActivityType
let intent = userActivity?.interaction?.intent as? WasteWizardIntent
print("handoff type \(connectionOptions.handoffUserActivityType)")
}
Я также пробовал следующие методы, но они никогда не вызывались:
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>)
func scene(_ scene: UIScene, didUpdate userActivity: NSUserActivity)
func scene(_ scene: UIScene, willContinueUserActivityWithType userActivityType: String)
Также пробовал это в AppDelegate
private func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool