SiriKit框架详细解析(四)—— 构建代码以支持App扩展和将意图调度到处理对象(一)

版本记录

版本号 时间
V1.0 2018.09.11

前言

大家都知道随着人工智能的发展,会掀起来另外一个工业革命,而语音识别就是人工智能的初始阶段,但是每个公司做的都不一样,涉及到一系列的语音的采集和算法实现,苹果的Siri就是业界语音识别的代表性的产品。接下来的几篇我们就详细解析一下SiriKit这个框架。感兴趣的可以看下面几篇文章。
1. SiriKit框架详细解析(一)—— 基本概览(一)
2. SiriKit框架详细解析(二)—— 请求授权使用SiriKit和INPreferences类(一)
3. SiriKit框架详细解析(三)—— 创建Intents App扩展(一)

Structuring Your Code to Support App Extensions - 构建代码以支持App扩展

将您的后端服务移至私有框架,以便您的应用和应用扩展程序可以使用它们。

应用扩展程序是代表您的应用,vending服务或在系统询问时向系统提供信息的代理。 由于它们会扩展您应用的行为,因此应用扩展程序通常需要访问您的应用使用的相同后端服务和数据。

如果您的应用和应用扩展程序共享服务,请考虑按以下方式构建代码:

  • Implement your core services in a private shared framework - 在私有共享框架中实现您的核心服务。 私有共享框架允许您在一个代码模块中放置用于访问服务的代码,并使用来自多个目标的代码。 共享框架通过确保每个可执行文件使用相同的代码路径来最小化两个可执行文件的大小并使测试更容易。

  • Use a shared container to store common resources - 使用共享容器来存储公共资源。 将相关图像和数据文件放入共享容器中,以便您的应用和应用扩展程序可以访问它们。 您可以在每个目标的Capabilities选项卡中启用共享容器支持。


Dispatching Intents to Handler Objects - 将意图调度到处理对象

为SiriKit提供一个能够处理给定意图的对象。

当用户使用SiriMaps向您的应用发出请求时,SiriKit会加载您的Intents应用扩展并创建其INExtension子类的实例。 扩展对象的工作是为SiriKit提供用于处理特定意图的处理程序对象。 您可以从扩展对象的handler(for:)方法中提供这些对象。

对于所有Intents应用程序扩展,handler(for:)方法的结构是相同的,并且该方法必须为Intents应用程序扩展支持的所有意图返回有效的新对象。 Listing 1显示了支持消息和VoIP呼叫域中的意图的方法版本。 在检查提供的intent对象的类型之后,该方法创建并返回能够处理该intent的对象。

// Listing 1 
Providing handler objects to SiriKit

override func handler(for intent: INIntent) -> Any {
   switch intent {
   case is INSendMessageIntent,
            is INSearchForMessagesIntent,
            is INSetMessageAttributeIntent:
      return MyMessageHandler()
            
   case is INStartAudioCallIntent:
      return MyAudioCallHandler()
            
   case is INStartVideoCallIntent:
      return MyVideoCallHandler()
            
   default:
      // The app extension should only be called for intents it knows about.
      fatalError()
   }
}

从处理程序返回的对象handler(for:)方法必须实现处理相应意图所需的特定协议。 每个intent对象都有一个关联的协议,其名称基于intent的名称。 例如,在处理INStartAudioCallIntent对象时,您提供了一个采用INStartAudioCallIntentHandling协议的对象。 该协议定义了您的对象必须实现的方法来解析任何意图参数,并让SiriKit知道您如何处理意图。

SiriKit通常在处理单个intent对象时创建处理程序对象的多个副本,并且在每个对象上只调用一个方法。 不要将缓存的状态信息存储在处理程序对象中,因为在后续方法调用期间不会出现该信息。 相反,应该始终对每个方法中的任何所需数据发出新的请求。

后记

本篇主要讲述了构建代码以支持App扩展和将意图调度到处理对象,感兴趣的给个赞或者关注~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容