Может ли мое приложение обнаружить, что оно было открыто Siri?

Может ли мое приложение Swift определить, что оно было открыто Siri? Я хотел бы открыть для определенного viewController, если (и только если) мое приложение было открыто Siri.


person Jonesie    schedule 11.10.2016    source источник


Ответы (4)


Это, к сожалению, пока невозможно. Вы можете прочитать в SiriKit что можно делать, а что нельзя. Это первая версия SiriKit, возможно она появится позже.

person Rashwan L    schedule 11.10.2016
comment
Это стало возможно в watchOS3.2, см. мой ответ ниже. - person Dávid Pásztor; 24.05.2017

Это стало возможным в watchOS3.2. в своем ExtensionDelegate реализуйте функцию handle(userActivity). Если ваше приложение открыто из Siri, userActivity.activityType будет именем INIntentResponse, предоставленным вашим IntentHandler, поэтому вам просто нужно проверить, соответствует ли userActivity.activityType любому из имен INIntentResponse, которые может обрабатывать ваше расширение Intents.

person Dávid Pásztor    schedule 24.05.2017
comment
Есть ли способ обнаружить это в расширении? Заголовок stackoverflow.com/questions/56996618/ - person MendyK; 11.07.2019

вы можете добиться этого с помощью метода делегата 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 файле.

person Sultan Ali    schedule 17.08.2020

Помещение этого в didFinishLaunchingWithOptions сработало для меня при первом запуске.

Объект:

BOOL startedFromSiri = ([[launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey] isEqualToString:@"com.apple.assistant.assistantd"]) ? YES : NO;

Свифт:

let startedFromSiri: Bool = (launchOptions[.sourceApplication] == "com.apple.assistant.assistantd") ? true : false

person drmidnight    schedule 18.10.2017
comment
launchOptions всегда получает ноль для меня - person Max Rogers; 30.01.2018