SiriKit 学习笔记
SiriKit 学习笔记 未完成
这是什么东西,干什么用的就不说了撒、
SiriKit 是如何工作的?
目前 Siri 能支持的服务包括以下部分:
- 基于网络的语音/视频通话 (VoIP Calling)
- 发送信息 (Messaging)
- 支付 (Payments)
- 照片搜索 (Searching photos)
- 训练 (Workouts)
- 预定 (Ride booking)
也就是说,通过 SiriKit 你是可以做上面这些事情,这每一项服务,被称为一个 Intents Domain
,可以理解为一个意向域
,每个用户向 Siri 传达的指令被识别为一个 Intents
,每一个 Intents 都属于一个具体的 Intents Domain。
举个例子🌰,比如你给 Siri 讲:
“Hey siri, 微信告诉 Sean 我明天不去上班了。”
这么一句话,那么你看,其实这个 Intents 其实包含着 四个信息 :
-
微信
-- 调用微信这个APP -
发送消息
-- Intents 的类型是INSendMessageIntent
-
Sean
-- 消息的接受者 -
我明天不去上班啦~!!!
-- 消息的具体内容
Siri 获取了前两个消息之后,就确定是哪一个 APP,以及这个 Intents 的类型,然后 去查看咱们的 APP 有没有支持这个 Intents 的 Domain,如果没有支持,Siri 就会告诉你:
“对不起,我好像不明白。”
根据这个 Intents,再去获取具体的参数。那你现在是 Messaging 的 Domain 的 INSendMessageIntent
,
那么对于 INSendMessageIntent 这一个 Intents 来说,具体的参数就是消息的接受者和消息的内容,也就是后两个信息。
所以我们想要 APP 对接 Siri,只需要做两件事情:
- 在应用的 Plist 文件中声明 APP 支持的 Intents Domain
- 实现具体的 Intents 方法
Intents Framework & Intents UI Extensions
为了支持 Siri,你需要使用Intents Framework
和 Intents UI Framework
。
技术上讲,其实 Siri 和 Maps 跟我们的 App 交互的时候就是通过两个 Extension 扩展类:
Intents
: 这个 Extension 是必须实现的。如同上面的举例,这个 Extension 其实就是 App 对具体的 Intents 的处理的实现,也就是 SiriKit 最核心的一部分。
Intents UI
: 标记为 Optional,可以提供也可以不提供,这个东西就是你对 Siri 说话之后 Siri 的那个界面出现的 UI 样式,你可以自定义那个。看需求选择实现。
创建一个 Intents Extension
上面说了,Siri 通过 Intents Extension 来实现跟 App 的交互,INExtension
类就是这个 Intents Extension 的实现。
当我们实现一个具体的 Intents extensions 的时候,INExtension 有常见的三种具体对象:
- 用来解析用户的 Intents 的类,获取 Siri 传递过来的 Intents 对象的参数信息
- 一个对用户的 Intents 进行 明确确定、再次确认 以及 逻辑处理的对象
- 根据处理结果,来对 Siri 的 Intents 进行回应的对象
当 Siri 抛过来一个 Intents,Siri 直接过来找 INExtension 对象。INExtension 对象必须可以对 Siri 扔过来的 Intents 对象进行处理,每一种类型的 Intents 都对应着具体处理的类必须去遵循的 Protocol。
Protocol 中的方法分为三种,跟上面的123类似:
- 解析 Siri 传来的具体的 Extents 的方法
- 让 Siri 去跟用户再次确认的方法
- 一边执行,一边让 Siri 给用户显示结果的方法
如下面的图:
请求用户授权 App 使用 Siri
OK,