You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SiriKit扩展的INSendMessageIntent Handler中打开宿主应用遇阻:无continueInApp选项

解决SiriKit中INSendMessageIntent Handler打开宿主App的问题

我之前做SiriKit消息扩展时也碰到过一模一样的问题——翻遍了响应选项都没找到直接的continueInApp开关,后来才搞明白:INSendMessageIntent的响应逻辑和部分其他Intent不一样,得手动在代码里配置才行。

给你一步步拆解操作:

  • 先在你的INSendMessageIntentHandler的handle(intent:completion:)方法里,完成消息相关的业务逻辑(比如验证收件人合法性、处理消息内容等)。
  • 最关键的一步:创建INSendMessageIntentResponse时,要选择带RequiringAppLaunch后缀的响应码,比如.successRequiringAppLaunch——这个标识是告诉Siri,需要启动宿主App来完成后续操作。
  • 最后手动给响应对象设置continueInApp = true,再把响应传给completion回调即可。

直接上代码示例,一看就明白:

class SendMessageIntentHandler: NSObject, INSendMessageIntentHandling {
    func handle(intent: INSendMessageIntent, completion: @escaping (INSendMessageIntentResponse) -> Void) {
        // 先处理消息相关逻辑:比如检查收件人是否存在
        guard let recipient = intent.recipients?.first else {
            completion(INSendMessageIntentResponse(code: .failure, userActivity: nil))
            return
        }
        
        // 创建需要跳转宿主App的响应对象
        let response = INSendMessageIntentResponse(code: .successRequiringAppLaunch, userActivity: nil)
        response.continueInApp = true
        
        // 如果需要给宿主App传递数据,可以通过NSUserActivity实现
        // let userActivity = NSUserActivity(activityType: "com.yourapp.sendMessage")
        // userActivity.userInfo = ["recipientName": recipient.displayName]
        // let response = INSendMessageIntentResponse(code: .successRequiringAppLaunch, userActivity: userActivity)
        
        completion(response)
    }
}

另外还有两个注意点:

  • 确保宿主App的Info.plist已经正确配置了SiriKit权限(NS Siri Usage Description),如果需要跳转后传递数据,还要让扩展和宿主App共享同一个App Group。
  • 别用错响应码:如果用.success,Siri只会提示操作完成,不会打开App;必须用.successRequiringAppLaunch或.failureRequiringAppLaunch这类带RequiringAppLaunch的响应码,才会触发跳转逻辑。

内容的提问来源于stack exchange,提问作者Bharathi Mm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:22:01