苹果在 iOS10 开放了 SiriKit 接口给第三方应用。目前,QQ已经率先适配了 Siri 的发消息和打电话功能。这意味着在 iOS10 中你可以直接告诉 Siri 让它帮你发QQ消息和打QQ电话了,听起来是不是很酷炫?
那么第三方应用使用 Siri 的体验究竟如何?哪些应用可以接入SiriKit?接入 SiriKit 又需要做哪些工作呢?
一.核心
siri接收的信息:AppName + Intent + Recipient + Content
其中AppName + Intent 是必须的,不然 Siri 无法抽象出你的“Intent”。后两项如果缺省的话,我们可以在实现中要求用户进一步提供数据或者忽略。在识别完成后 Siri 会将消息内容和接收者抽象成一个 INSendMessageIntent 传递给 App的 Intent Extension。
二. Siri接收信息到执行的过程
每个domain的功能在Siri中都有对应的Intents,而每个Intents都对应一个特定的handler协议。对应的Intent和handler协议分别为INSendMessageIntent和INSendMessageIntentHanding。
所以:只要实现INSendMessageIntentHanding协议的相关方法,并在Siri解析中INSendMessageIntent请求时用我们的INSendMessageIntentHanding对象去处理相关的信息请求就OK。
过程:(1)Siri获得Intent后SiriKit处理有:1. Resovle Recipient; 2.Resovle Content; 3.Resolution Result 。 (2)通过SiriKit处理完Resolution Result后Intent UI Extension处理Intent逻辑:1.Confirm SendMessage;2.Handle SendMessage。
通过(1)和(2)的处理SiriKit已经完成了Intent的处理,如果是SendMessage的话,Message SDK就会Send Message了。
三. Intents UI Extension
对于支持自定义界面的 Intent 类型,可以在 Intents UI Extension 中提供更美观的自定义界面。 Custom UI 的实现相对较简单,和 iOS app 的开发一样,都是通过 UIViewController 的子类实现。我们需要在 Intents UI Extension 的 info.plist 文件中设置 initial viewcontroller 或者设置 main storyboard,对于不同类型的 Intent 的界面展示通过 Child Viewcontrollers 的方式实现差异化界面展示。
三个重要的方法:
(1)configureWithInteraction:context:completion:
(2)viewWillAppear:viewDidAppear:
(3)viewWillDisappear:viewDidDisappear:
四.总结
总的来说虽然苹果这一次对 SiriKit 开放的场景有限,但是从我们的适配经历来看苹果对 Siri 还是非常重视的。另外,这是 SiriKit 首次对第三方应用开放接口,所以不可避免存在一些问题。在语言识别方面 Siri 依然存在一些缺陷,比如对中英文混合的场景识别依旧不太好。期待以后 Siri 对中文的支持越来越好,也希望 Siri 能够开放更多的场景给第三方应用适配。