我的应用程序可以检测到它是由 Siri 打开的吗?

Can my app detect that it was opened by Siri?

我的 Swift 应用程序能否检测到它是由 Siri 打开的?如果(且仅当)我的应用程序由 Siri 打开,我想打开特定 viewController

不幸的是,这还不可能。您可以在 SiriKit 阅读可以做什么和不可以做什么。这是SiriKit的第一个版本,可能会晚点推出。

在watchOS3.2中成为可能。在您的 ExtensionDelegate 中,实现函数 handle(userActivity)。如果您的应用程序是从 Siri 打开的,userActivity.activityType 将是您的 IntentHandler 提供的 INIntentResponse 的名称,因此您只需检查 userActivity.activityType 是否等于您的 Intents Extension 可以使用的任何 INIntentResponse 名称手柄。

将它放在 didFinishLaunchingWithOptions 中对我来说在初始启动时有用。

对象:

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

Swift:

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

可以用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 是您 .intentdefinition 文件中的 Intent 名称