Обработка пользователя, нажимающего на Siri IntentsUI на go для правильного просмотра в приложении, когда приложение завершено / НЕ в фоновом режиме - PullRequest
1 голос
/ 18 июня 2020

У меня есть намерение Siri, которое отображает следующий пользовательский интерфейс.

[enter image description here]

Когда пользователь нажимает на него, запускается приложение.

Когда приложение находится в фоновом режиме , я использую следующий код в делегате сцены, чтобы зафиксировать, что сделал пользователь, и направить его в нужное окно. Он работает должным образом.

        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 
...