Part2: 创建 Intents Extension
在这里放出原文链接地址
Part 2.1: 创建 Intents Extension
Intents Extension 实际上就是在你 App 包里面的 一个 App Extension , 所有和 SiriKit 进行的交互, 都是通过 Intents Extension 进行的. 尽管大多数时候, 与 SiriKit 进行交互操作都是通过 Intents Extension 进行的, 但是你的 App 仍然需要知道这些交互, 并且在某些时候, 你的 App 还需要对这些交互事件进行一些积极的响应.
当你需要添加一个 Intents Extension 到你的 App 时, 你需要做如下的几个步骤:
- 让你的 App 拥有使用
Siri的能力. 查看: Configuring Your Xcode Project - 在你的工程中, 添加一个
Intents Extension的 Target, 并且配置它的Info.plist文件. 查看: Configuring Your Xcode Project - 在程序运行时, 向你的用户请求使用
Siri的权限. 查看: Requesting Siri Authorization In Your iOS App - 声明一个用来操作
Intents的对象. 查看: Resolving And Handling Intents - 为你的 App 定义任何你将会用到的自定义词汇(Custom Vocabulary). 查看: Specifying Custom Vocabulary
注意:
你可以添加一个Intents UI Extension到你的项目中, 来自定义Siri或Maps的显示界面. 需要注意的是,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 能力的几个步骤:
- 在 Xcode 中打开你的工程.
- 在 Xcode 的设置中, 选择你的 App Target.
- 选择 Capabilities 这个标签.
- 打开
Siri对应的开关.
上一张图, 这样看的更清晰.
操作步骤图例
当你为工程添加了使用 Siri 的能力之后, 你就可以为你的工程创建一个 Intents Extension 的 Target 了. 添加这个 Target 后, 将会为你提供几个构建 Intents Extension 时的基础文件, 还会将它添加到你的 App Bundle 中.
添加一个 Intents Extension 需要如下几步:
-
使用 Xcode 打开你的工程.
-
在顶部的菜单栏选择 File > New > Target.
操作步骤图例
-
在出现的对话框中选择对应平台的
Intents Extension, 然后点击Next.
操作步骤图例
-
为你的
Intents Extension指定一个名字, 并且配置其他的一些选项. 注意: 如果你希望自定义一部分的Siri的 UI, 那么你需要勾选Include UI Extension这个选项. -
配置完之后, 点击 Finish.
注意:
你也许将会在你的工程中添加不止一个Intents Extension, 但是每一个Extension都必须要支持不同的Intents. 一般来说, 为了提供更好的性能 或 减少内存占用的时候, 我们才会创建许多Extension.
在你的工程中添加了 Intents Extension 的 Target 之后, 配置 Xcode 为你提供的 Info.plist 文件来指定你的 App 都支持哪些 Intents. SiriKit 使用这个 plist 文件来确定你的 App 都支持哪些 Intents.
指定支持的 Intents 需要如下几步:
-
在 Xcode 中, 选择
Intents Extension文件夹下的Info.plist文件. 注意: 在我这个工程中, 则是SiriKitIntentsExtension文件夹下的Info.plist文件.
Info.plist
-
在 plist 文件中, 展开
NSExtension和NSExtensionAttributes就这两个 key, 然后我们将会看到IntentsRestrictedWhileLocked和IntentsSupported这两个 key. -
在
IntentsSupported这个 key 中, 添加Extension需要支持的Intent的字符串. 字符串实际就是Intent类的名称.IntentsSupported这个 key 是必须的, 你可以再这里支持所有的Intent, 也可以是其中的一部分. -
在
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 之前, 必须要经过用户的许可才行. 请求用户的许可需要如下几个步骤:
- 在你项目中的
Info.plist文件中, 添加NSSiriUsageDescription这个 key, 这个 key 对应的是一个字符串的值, 该字符串描述了在你的 App 中SiriKit的应用场景. - 在项目中调用
INPreferences的requestSiriAuthorization:类方法.
当你的 App 第一次调用 requestSiriAuthorization: 方法时, 系统将会弹出一个提示框来询问用户是否授权你的 App 使用 SiriKit, 这个提示框中包含了上文提到的 NSSiriUsageDescription 这个 key 所对应的值, 就是刚才我们在 info.plist 中配置的字符串. 此时用户可以选择接受, 同样也可以选择拒绝. 无论用户选择了哪一项, 他都可以去 Setting 中修改你 App 的授权状态. 系统会将你 App 的授权状态记录下来, 所以在接下来再次调用 requestSiriAuthorization 方法时将不会再一次向用户弹出授权的提示框.
Part 2.4: 测试你的 Extension
测试 Extension 的时候, 需要是用真机才行. Xcode 允许你直接在工程中运行 Extension, 并且可以再真机运行的同时对其进行 Debug 操作.
在你的设备中运行 Extension:
- 选择
Intents Extension的 scheme. (当你在工程中添加了一个Intents Extension的 Target 之后, Xcode 会自动生成一个对应的 scheme) - 对你的 scheme 进行配置.
-
Command + R运行. - Xcode 会弹出一个提示, 此时选择
Siri或Maps来运行. Xcode 将会构建你的 App 和Extension, 在你的设备中安装并且运行它们.
当你第一次安装 Extension 的时候, Siri 可能无法直接识别出你的 Extension. 所以在你测试相关指令之前, 你可能需要耐心的等待几分钟. 同样的, 如果你更新了你的 Info.plist 文件, 你可能也需要耐心的等几分钟让 Siri 来识别你的修改.
Lemon龙说:
如果您在文章中看到了错误 或 误导大家的地方, 请您帮我指出, 我会尽快更改
如果您有什么疑问或者不懂的地方, 请留言给我, 我会尽快回复您
如果您觉得本文对您有所帮助, 您的喜欢是对我最大的鼓励
如果您有好的文章, 可以投稿给我, 让更多的 iOS Developer 在简书这个平台能够更快速的成长