#ios #swift #siri #sirikit
#iOS #swift #siri #sirikit
Вопрос:
Я пытаюсь реализовать SiriKit в своем приложении для iOS. Я хочу открыть другой контроллер просмотра при запуске приложения через Siri.
Как я могу обработать этот тип операции в моем приложении?
Комментарии:
1. Привет, Вивек, добро пожаловать в StackOverflow! В настоящее время этот вопрос слишком широк для сообщества StackOverflow. Покажите, какие исследования вы провели по этой проблеме, какие попытки вы предприняли для решения, а затем попытайтесь сделать свой вопрос более конкретным. Также рассмотрите возможность чтения документации Apple по SiriKit и AppDelegate / UIViewController.
Ответ №1:
Вы можете это сделать, однако сначала вам придется настроить SiriKit в вашем приложении, что требует небольшой работы с длинным списком инструкций: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/index.html#//apple_ref/doc/uid/TP40016875-CH11-SW1 .
Также есть пример приложения SiriKit, которое Apple создала под названием UnicornChat:https://developer.apple.com/library/content/samplecode/UnicornChat/Introduction/Intro.html
После того, как вы добавили расширение приложения SiriKit и правильно обработали свое намерение, вы сможете отправить его в свое приложение, используя responseCode, связанный с вашим намерением. Это откроет ваше приложение, и вы можете перехватить его и отправить в WhateverViewController, добавив следующий код в делегат вашего приложения:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
// implement to handle user activity created by Siri or by our SiriExtension
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// Access the storyboard and fetch an instance of the view controller
let viewController: WhateverViewController = storyboard.instantiateViewController(withIdentifier: "WhateverViewController") as! WhateverViewController
window?.rootViewController = viewController
window?.makeKeyAndVisible()
}