Part2: 创建 Intents Extension

在这里放出原文链接地址

Part 2.1: 创建 Intents Extension

Intents Extension 实际上就是在你 App 包里面的 一个 App Extension , 所有和 SiriKit 进行的交互, 都是通过 Intents Extension 进行的. 尽管大多数时候, 与 SiriKit 进行交互操作都是通过 Intents Extension 进行的, 但是你的 App 仍然需要知道这些交互, 并且在某些时候, 你的 App 还需要对这些交互事件进行一些积极的响应.

当你需要添加一个 Intents Extension 到你的 App 时, 你需要做如下的几个步骤:

  1. 让你的 App 拥有使用 Siri 的能力. 查看: Configuring Your Xcode Project
  2. 在你的工程中, 添加一个 Intents Extension 的 Target, 并且配置它的 Info.plist 文件. 查看: Configuring Your Xcode Project
  3. 在程序运行时, 向你的用户请求使用 Siri 的权限. 查看: Requesting Siri Authorization In Your iOS App
  4. 声明一个用来操作 Intents 的对象. 查看: Resolving And Handling Intents
  5. 为你的 App 定义任何你将会用到的自定义词汇(Custom Vocabulary). 查看: Specifying Custom Vocabulary

注意:
你可以添加一个 Intents UI Extension 到你的项目中, 来自定义 SiriMaps 的显示界面. 需要注意的是, Intents UI Extension 不是 Intents Extension 的替代品, 所以当你添加了 Intents UI Extension 时, 你还需要添加 Intents Extension. 了解更多内容, 请查看: Creating an Intents UI Extension

了解如何创建 App Extensions, 请查看: App Extension Programming Guide

了解如何创建 App Extensions, 请查看: App Extension Programming Guide

Part 2.2: 配置 Xcode 工程

配置 Xcode 工程需要几个步骤, 除了在工程中添加一个 Intents Extension 的 Target 以外, 你还需要对你的 App 做一些小小的修改.
为了使用 SiriKit, 你需要让你的 App 拥有使用 Siri 的能力. 这其实很简单, 操作步骤就好像你让 App 拥有 iCloud推送内购买能力一样. 这将会在你的工程中添加一个 entitlements, 让 App Store 知道你的 App 是支持 Siri 的.

让你的 App 拥有使用 Siri 能力的几个步骤:

  1. 在 Xcode 中打开你的工程.
  2. 在 Xcode 的设置中, 选择你的 App Target.
  3. 选择 Capabilities 这个标签.
  4. 打开 Siri 对应的开关.

上一张图, 这样看的更清晰.

操作步骤图例

当你为工程添加了使用 Siri 的能力之后, 你就可以为你的工程创建一个 Intents Extension 的 Target 了. 添加这个 Target 后, 将会为你提供几个构建 Intents Extension 时的基础文件, 还会将它添加到你的 App Bundle 中.

添加一个 Intents Extension 需要如下几步:

  1. 使用 Xcode 打开你的工程.

  2. 在顶部的菜单栏选择 File > New > Target.


    操作步骤图例
  3. 在出现的对话框中选择对应平台的 Intents Extension, 然后点击 Next.

    操作步骤图例

  4. 为你的 Intents Extension 指定一个名字, 并且配置其他的一些选项. 注意: 如果你希望自定义一部分的 Siri 的 UI, 那么你需要勾选 Include UI Extension 这个选项.

  5. 配置完之后, 点击 Finish.

注意:
你也许将会在你的工程中添加不止一个 Intents Extension , 但是每一个 Extension 都必须要支持不同的 Intents. 一般来说, 为了提供更好的性能 或 减少内存占用的时候, 我们才会创建许多 Extension.

在你的工程中添加了 Intents Extension 的 Target 之后, 配置 Xcode 为你提供的 Info.plist 文件来指定你的 App 都支持哪些 Intents. SiriKit 使用这个 plist 文件来确定你的 App 都支持哪些 Intents.

指定支持的 Intents 需要如下几步:

  1. 在 Xcode 中, 选择 Intents Extension 文件夹下的Info.plist 文件. 注意: 在我这个工程中, 则是 SiriKitIntentsExtension 文件夹下的 Info.plist 文件.

    Info.plist

  2. 在 plist 文件中, 展开 NSExtensionNSExtensionAttributes就这两个 key, 然后我们将会看到 IntentsRestrictedWhileLockedIntentsSupported 这两个 key.

  3. IntentsSupported 这个 key 中, 添加 Extension 需要支持的 Intent 的字符串. 字符串实际就是 Intent 类的名称. IntentsSupported 这个 key 是必须的, 你可以再这里支持所有的 Intent, 也可以是其中的一部分.

  4. IntentsRestrictedWhileLocked 这个 key 中, 你可以添加当屏幕处于锁定状态下的时候支持的 Intent. IntentsRestrictedWhileLocked 是一个可选的 key, 有些 Intent, 例如涉及到了交易的Intent, 通常都需要用户解锁自己的设备. 你可以使用这个 key 来设置一些默认情况下不需要解锁设备就能够使用的 Intent.

当一个用户语言表达的非常不清晰的时候, SiriKit 将会分析出很多的 Intent, 此时 SiriKit 就将会使用你提供的 IntentsSupported key 所对应的内容, 根据内容的顺序来确定将哪一个 Intent 发送给你的 App. 在你组织 IntentsSupported key 所对应的内容的时候, 你应该将和你 App 最相关的一条放在第一位. 当你支持不同领域的 Intent 并且 这些领域的语义又很接近的时候, 区分 Intent 的先后顺序是非常有意义的. 例如: 你的 App 同时支持打电话和发信息的时候, 你也许希望发送信息的行为优先于打电话的行为.

有些Intent 需要一些额外的配置步骤. 例如: 当你在实现一个旅行预订的 App 时, Maps 期待你可以提供一个 GeoJSON文件来描述你服务的覆盖范围. 更多详细的配置步骤, 请查看: Intents Domains

Part 2.3: 为你的 App 请求用户许可

在你的 App 使用 SiriKit 之前, 必须要经过用户的许可才行. 请求用户的许可需要如下几个步骤:

  1. 在你项目中的 Info.plist 文件中, 添加 NSSiriUsageDescription 这个 key, 这个 key 对应的是一个字符串的值, 该字符串描述了在你的 App 中 SiriKit 的应用场景.
  2. 在项目中调用 INPreferencesrequestSiriAuthorization: 类方法.

当你的 App 第一次调用 requestSiriAuthorization: 方法时, 系统将会弹出一个提示框来询问用户是否授权你的 App 使用 SiriKit, 这个提示框中包含了上文提到的 NSSiriUsageDescription 这个 key 所对应的值, 就是刚才我们在 info.plist 中配置的字符串. 此时用户可以选择接受, 同样也可以选择拒绝. 无论用户选择了哪一项, 他都可以去 Setting 中修改你 App 的授权状态. 系统会将你 App 的授权状态记录下来, 所以在接下来再次调用 requestSiriAuthorization 方法时将不会再一次向用户弹出授权的提示框.

Part 2.4: 测试你的 Extension

测试 Extension 的时候, 需要是用真机才行. Xcode 允许你直接在工程中运行 Extension, 并且可以再真机运行的同时对其进行 Debug 操作.

在你的设备中运行 Extension:

  1. 选择 Intents Extension 的 scheme. (当你在工程中添加了一个 Intents Extension 的 Target 之后, Xcode 会自动生成一个对应的 scheme)
  2. 对你的 scheme 进行配置.
  3. Command + R 运行.
  4. Xcode 会弹出一个提示, 此时选择 SiriMaps 来运行. Xcode 将会构建你的 App 和 Extension, 在你的设备中安装并且运行它们.

当你第一次安装 Extension 的时候, Siri 可能无法直接识别出你的 Extension. 所以在你测试相关指令之前, 你可能需要耐心的等待几分钟. 同样的, 如果你更新了你的 Info.plist 文件, 你可能也需要耐心的等几分钟让 Siri 来识别你的修改.

Lemon龙说:

如果您在文章中看到了错误 或 误导大家的地方, 请您帮我指出, 我会尽快更改

如果您有什么疑问或者不懂的地方, 请留言给我, 我会尽快回复您

如果您觉得本文对您有所帮助, 您的喜欢是对我最大的鼓励

如果您有好的文章, 可以投稿给我, 让更多的 iOS Developer 在简书这个平台能够更快速的成长

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

推荐阅读更多精彩内容