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 对应的开关.

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

Part2: 创建 Intents Extension_第1张图片
操作步骤图例

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

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

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

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


    Part2: 创建 Intents Extension_第2张图片
    操作步骤图例
  3. 在出现的对话框中选择对应平台的 Intents Extension, 然后点击 Next.

    Part2: 创建 Intents Extension_第3张图片
    操作步骤图例

  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 文件.

    Part2: 创建 Intents Extension_第4张图片
    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 在这个平台能够更快速的成长

你可能感兴趣的:(Part2: 创建 Intents Extension)