Siri开发征服iOS

Siri Kit

2016-06-26  本文已影响725人  cuagain

概览

SiriKit提供以下六类服务

  1. 语音和视频通话 VoIP calling
  2. 发送消息 Messaging
  3. 收款或者付款 Payments
  4. 图片搜索 Photo search
  5. 管理锻炼 Workouts
  6. 行程预约 Ride booking
    下面来看一下一个典型的Siri进行交互的语句:


    词汇逻辑

    其中有三类关键部分:Intent、App以及其他信息。Intent就是我要想要通过Siri去做的事的意图,App是通过手机安装的什么App来做,至于其他的Payee、Amount等信息则是通过App去完成Intent的必须信息。而整个Siri的交互过程可以参照下图:


    执行流程
    通过Siri来获取用户语言中的关键词汇,这些词汇在Extension中经过一些逻辑处理,最终反馈到用户界面,与用户进行交互。

Siri通过Intents extension的扩展方式和我们的应用进行交互,其中Intents Extension扮演协同Siri共同响应用户的角色,Intents UI Extension可以提供自定义的用户响应界面,用以增强体验。
当我们实现了Intents extension扩展并产生了一个Siri请求事件时,Intent(意图)事件的处理过程分Resolve、Confirm和Handle三个步骤。

Intent处理的三个阶段

生命周期

实现一个Siri Kit应用

  1. 升级到Xcode8,一台升级到iOS10的测试设备
  2. Intents extension : resolve、confirm、handle流程
  3. Intents UI extension 提供界面自定义等内容
  4. 新建一个空应用并新增一个target
  5. 新增Intents Extension,创建时会询问是否激活该扩展且是否将Intents UI Extension一并创建,都选择是。
  6. 了解Embedded frameworks


    extension

Embedded frameworks

Embedded frameworks是苹果着重提出来的,主要用于以下几个方面:

  1. 网络服务
  2. 数据model
  3. Decision-making logic
  4. 用户界面
    可以在应用主target以及extension分别引用。

在创建extension之后,我们查看extension的plist文件,默认的plist结构如图所示:


plist

IntentsSupported表示的是应用支持的Intent事件,IntentsRestrictedWhileLocked表示的是锁屏下支持的Intent事件。在demo中分别赋值:INSendMessageIntent。还要注意一下NSExtensionPrincipalClass,该项内容表示的是extension响应的入口类。其为INExtension的子类,需要实现handler(for intent: INIntent)方法如下:


INExtension
用以根据不同的Intent分发各个自定义Handler进行处理。
另外还就是主项目plist 增加NSSiriUsageDescription 这个是请求Siri权限时提示的文案,同时使用Siri时,用户必须说出App的名字,也就是Bundle display name,都需要进行设置。其中UCSendMessageIntentHandler需要实现INSendMessageIntentHandling中的方法用以与Siri进行交互,也就是Resolve、Confirm和Handler三阶段的交互。

示例代码如下:

  1. 获取收件人信息,可以根据自身匹配的信息返回不同状态与Siri进行进一步的交互。


    收件人
  2. 获取信息内容,也就是要给收件人发送的信息的具体内容。


    信息内容
  3. 收件人、信息内容确定后,通过Siri向用户进行信息确认。


    confirm
  4. 信息确认后,进行最终信息的发送并向用户展示结果。


    handle

    具体展示到界面上的效果图如下


    效果图
    至此,一个完整的通过Siri进行发送信息的完整流程结束。简要概括整个流程,可以参照苹果Keynote中的图示:
    protocol三阶段

    当然,在上面图例中,有开发者自定义的Siri反馈界面,这个界面的实现主要是通过Intents UI Extension来实现的。有兴趣的话,可以自行研究,实现方式也很简单。UI Extension的plist结构可以参照下图,只需要设置一下IntentsSupported即可。


    plist

总结

虽然苹果开放了SiriKit的入口,但是总体而言还是限制颇多,具体如何使用还是需要继续深入挖掘。类似可以自定义应用词汇、使用UI Extension过程中的内存管理等等。

上一篇 下一篇

猜你喜欢

热点阅读