Может ли мое приложение Swift определить, что оно было открыто Siri
? Я хотел бы открыть для определенного viewController
, если (и только если) мое приложение было открыто Siri.
Может ли мое приложение обнаружить, что оно было открыто Siri?
Ответы (4)
Это, к сожалению, пока невозможно. Вы можете прочитать в SiriKit что можно делать, а что нельзя. Это первая версия SiriKit, возможно она появится позже.
Это стало возможным в watchOS3.2. в своем ExtensionDelegate реализуйте функцию handle(userActivity). Если ваше приложение открыто из Siri, userActivity.activityType
будет именем INIntentResponse, предоставленным вашим IntentHandler, поэтому вам просто нужно проверить, соответствует ли userActivity.activityType
любому из имен INIntentResponse, которые может обрабатывать ваше расширение Intents.
вы можете добиться этого с помощью метода делегата SceneDelegate
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if #available(iOS 12.0, *) {
if userActivity.interaction?.intent is YourIntentName {
// App launched via that particular shortcut.
}
}
}
Примечание: здесь YourIntentName
— это имя Intent в вашем .intentdefinition
файле.
Помещение этого в didFinishLaunchingWithOptions сработало для меня при первом запуске.
Объект:
BOOL startedFromSiri = ([[launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey] isEqualToString:@"com.apple.assistant.assistantd"]) ? YES : NO;
Свифт:
let startedFromSiri: Bool = (launchOptions[.sourceApplication] == "com.apple.assistant.assistantd") ? true : false