SiriKit 学习笔记(三) 解析和处理Intents

本文介绍了SiriKit中如何处理Indents,包括Indents Object、Handler Object和Response Object的角色。Siri通过INExtension找到匹配的Handler,Handler遵循特定的Protocol来解析和确认Intent。在验证Intent参数的过程中,Siri可能需要与用户交互获取更多详情。文中还展示了如何实现`handlerForIntent:`方法,并提供了验证Intent参数的示例代码。
摘要由CSDN通过智能技术生成

你 App 的Indents extension扩展的接口点是INExtension Object,它的主要作用是把indents引导给Siri去处理。

在extension里有三类objects来处理intents


一种Indents Object保存Siri收集的用户数据

一种Handler Object是你自定义的用以解析,确定并处理indents

一种Response object保存你的处理结果


当SiriKit有一个Indent需要处理时,它会请求INExtension寻找一个匹配的Handler,Handler都继承了相应的Protocol协议对应不同种类的indents。

这些Protocols都有相似的结构,有相应的方法解析,确认并处理相应等indent


实现一个handler必须实现相对应处理所配indents的方法,其他方法都为可选方法,利用这些方法优先解析和确认indents,再进行处理。

在进行验证过程中,Siri和用户进行交互获取额外需要的信息


下图为Siri和handler的流程图





向Handler Objects派发Intents


当intent被app接收,SiriKit请求Intents extension提供相应的handler object,SiriKit调用INExtension子类的 handlerForIntent: 方法,这就是你extension的接入点。

这个方法会返回SiriKit解析,确认和处理的Objects


下面代码块显示实现了 handlerForIntent: 方法提供的针对文本信息和VoIP(语音协议)的intents的handler objects。 这个结构同样可以用于其他的不同handler。

你先检查发过来的intent的类并返回相应的handler object。 你可以利用单一handler来处理所有你支持的intents或者创建分别不同的handler针对不同的intent。

下面例子,intents extension为所有文本相关的intents返回同一个handler object,为语音和视频intents返回不同的handler


</pre><pre name="code" class="plain">
 

  1. overridefunchandler(forintent:INIntent) -> AnyObject? {
  2. varhandler = nil
  3. ifintentisINSendMessageIntent ||
  4. intentisINSearchForMessagesIntent ||
  5. intentisINSetMessageAttributeIntent {
  6. handler = MyMessageHandler()
  7. }
  8. elseifintentisINStartAudioCallIntent {
  9. handler = MyAudioCallHandler()
  10. }
  11. elseifintentisINStartVideoCallIntent {
  12. handler = MyVideoCallHandler()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值