美文网首页
SiriKit使用简介

SiriKit使用简介

作者: 孢子菌 | 来源:发表于2016-08-02 22:42 被阅读1946次

介绍SiriKit

SiriKit是让你的内容通过Siri展示的一个框架库。当用户向Siri请求特别类型的服务时,系统就会使用Intents Extension(自定义)来支持那些服务,如果需要图形界面交互,还可以创建Intents Extension UI来在Siri界面上显示自定义的UI界面。
目前为止,Siri只支持下面的6种服务类型:

  • 语音或者视频呼叫
  • 信息通讯
  • 支付功能
  • 查找图片
  • 锻炼
  • 预约出行工具

交互过程

Paste_Image.png

打开Intent Extension的info.plist,在NSExtensionNSExtensionAttributes键下,可以看到 IntensSupportedIntentsRestrictedWhileLocked,分别代表着支持的Intent和锁屏状态下支持的Intent。而NSExtensionPrincipalClass字段定义了处理Intent的入口类(继承于INExtension)。

info.plist

解析以及处理Intents

当Intent传入到入口类中,首先会调用- (id)handlerForIntent:(INIntent *)intent;方法,该方法的返回值是一个实现了XXXIntentHandling协议的对象,也就是上文中的处理类。
每一个XXXIntentHandling协议中会定义一个必须实现的handle方法,一个可选的confirm方法,和若干reslove方法(依据当前场景下Intent参数而定)。

比如PaymentINSendPaymentIntentHandling协议

功能 代码
处理方法 - handleSendPayment:completion:
确认方法 - confirmSendPayment:completion:
解析货币单位方法 - resolveCurrencyAmountForSendPayment:withCompletion:
解析附加语方法 - resolveNoteForSendPayment:withCompletion:
解析付款方式方法 - resolvePaymentMethodForSendPayment:withCompletion:
解析收款人方法 - resolvePayeeForSendPayment:withCompletion:

依照不同的场景(Intents Domains)和不同的命令,协议中的解析方法数目会变化。每一个解析方法都需要得到一个INIntentResolutionResult类型的实例,用来保存校验结果。

INIntentResolutionResult及其子类有不同的构造方法生成不同类型的结果,用来指定和Siri的交互。

值类型 说明
INIntentResolutionResult
+ (instancetype)needsValue; 需要一个值,Siri会提示用户给一个值
+ (instancetype)notRequired; 不是必要的,是否给值都会过这个resolve
+ (instancetype)unsupported; 不支持的,Siri会提示用户这个值不被支持
INBooleanResolutionResult
+ (instancetype)successWithResolvedValue:(BOOL)resolvedValue; 成功解析
+ (instancetype)confirmationRequiredWithValueToConfirm:(nullable NSNumber *)valueToConfirm; Siri提示用户确认当前是否是一个bool值

当一个intent的所有参数都成功解析了,处理程序就会向用户询问是否确认这个intent的细节,并且提供一个建议响应。当所有参数被成功解析后,或者在不要求所有参数进行解析,那么就认为是解析成功。
在确认期间,就可以执行所有的intent参数的附加验证,以确保你可以使用该信息来执行所请求的服务。如果之前的解析函数是单元测试,那么这个确认函数就是集成测试,保证所有输入参数正确。

最后一个处理intent的阶段,就是执行与这个intent相关的动作。在-handleSendPayment:completion函数中做相应业务逻辑,需要注意的是你在Extension中做的修改也应当反应到App主程序当中,所以需要提供任务的数据给到App。SiriKit提供了一个包含intent细节(INIntent、INIntentResponse)的InInteraction对象,你可以使用userActivityInstance.interaction得到它,在App启动时调用
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler
函数处理来自Extension的数据。

自定义界面(Intent UI Extension)

上文说道,创建Extension的时候,可以在新建页面勾选UI Extension选项,创建一个Extension工程来展示页面。

配置

同样我们打开UI Extension的info.plist文件,我们能看见NSExtension键,其中有NSExtensionMainStoryboard
这个键值,用来指定入口的StoryBoard。和App不一样的是,如果不适用StoryBoard方式,我们需要使用NSExtensionPrincipalClass这个键来指定入口的ViewController。

实现ViewController

系统创建了ViewController,加载视图,调用viewDidLoad方法并且调用了INUIHostedViewControlling协议的configureWithInteraction:context:completion:方法,传递了一个交互对象,用于配置界面。 当配置完成后,ViewController就会展示在Siri或者Maps应用界面的空白部分。这时会调用viewWillAppear/viewDidAppear方法。
当视图消失时,也会调用生命周期的viewWillDisappear/viewDidDisappear方法。

UI展示流程示意

关于控制器的使用,苹果给出了几点注意事项:

  • 切换子控制器来展示不同类型的内容。 你的Intents UI扩展只有一个主视图控制器,如果你想为不同的Intents展示不同的内容,你需要使用不同的视图。可以在configureWithInteraction:context:completion:这个方法里面,根据提供的intentObject来创建不同的子视图。

  • 在你的视图控制器可用的期间,动态调整内容。 在** viewDidAppear:方法里面才开始启动动画,在viewWillDisappear: **方法里面要结束动画。

  • 尽快的配置好你的视图控制器,这样Siri才能更快的展示它。 你的视图控制器也许不会在屏幕上停留太久,所以尽量利用本地资源以及提供的INInteraction对象来配置你的设置。如果你需要从服务器拉取更多的信息,请异步完成,并在稍后再更新你的界面。

  • 请不要在界面里面展示广告。你可以展示你自己的品牌信息,但是你不能够加入其它广告。

参考资料:
SiriKit 学习笔记
SiriKit编程指南

相关文章

  • SiriKit使用简介

    介绍SiriKit SiriKit是让你的内容通过Siri展示的一个框架库。当用户向Siri请求特别类型的服务时,...

  • SiriKit

    如何使用 SiriKit INExtension 无法调用 UIApplication 只能在 UIViewCon...

  • SiriKit的使用介绍

    Intent的概念 Siri做完语音识别和语义分析之后,将结构化语音分析结果打包成一个某个领域(Domain)的意...

  • SiriKit框架详细解析(二)—— 请求授权使用SiriKit

    版本记录 前言 大家都知道随着人工智能的发展,会掀起来另外一个工业革命,而语音识别就是人工智能的初始阶段,但是每个...

  • SiriKit初探

    SiriKit简介 Siri 是一款苹果 iOS 系统提供的智能语音助手软件,它的全名是 Speech Inter...

  • 18.iOS10新特性,适配教程,XCode8新特性

    iOS 10 新特性 SiriKit SiriKit的功能非常强大,支持音频、视频、消息发送接收、搜索照片、预订行...

  • SiriKit 使用注意事項

    在一段时间的SiriKit开发中遇到了很多问题,踩到了很多坑,最终实现的功能却很简单,远远没有达到惊艳的程度,使用...

  • Part1: SiriKit 介绍

    在这里放出原文链接地址 Part 1.1 SiriKit 介绍 SiriKit 可以使你的 App 和 App 提...

  • SiriKit

    Siri目前支持以下几个方面:1、语音和视频通话 (VoIP calling)2、发送消息 (Messaging)...

  • 我所感兴趣的iOS10新特性

    SiriKit Siri API 的开放自然是 iOS 10 SDK 中最激动人心也是亮眼的特性。SiriKit ...

网友评论

      本文标题:SiriKit使用简介

      本文链接:https://www.haomeiwen.com/subject/vdkzjttx.html