上一篇文章 iOS12 Siri ShortCuts 应用 (一) 主要写了通过 NSUserActivity 实现 Siri ShortCuts 的方案。具体功能就是通过用户自定义的siri 语音指令, 利用siri打开app, 完成用户想要的功能。
今天这篇文章就来介绍另外一种功能,通过 Intents Extension 实现不打开app 去完成某个任务。先来看下效果:
SiriKit Intent Definition File
在新建Extension之前,我们要通过 file->newfile, 选择 SiriKit Intent Definition File。创建好后是这个样子的:
上图中,我一共自定义了三个 Intent, 分别是 DailyPunch、BreakfastPunch和 SportPunch。在这个界面,你可以设置 Intent 的 category,title和一些参数。每个 Intent 都对应一个 Response, 如下图所示。你可以在response定义参数和错误类型。如图所示,我定义了 errorMessage 的参数 和 failureUnLogin等两个错误类型。这里 errorMessage 用来传递服务器返回的错误信息。
创建完成后,编译一下项目,xcode 会自动生成对应的类,我这里的话会生成 DailyPunchIntent 等三个类,每个类包含了 DailyPunchIntentHandling 协议和 DailyPunchIntentResponse 类等所需要的内容。
需要注意的是,这些类不会出现在项目的目录中,有点和 Core Data 类似。
但你可以正常使用,可以为其新建 Category 或者导入头文件就可以直接使用。
我这里通过 Category 为每个 Intent 类添加了 suggestedInvocationPhrase 属性,可以在用户录制的时候给出建议短语。
@implementation DailyPunchIntent (PXDailyPunch)
- (instancetype)init{
self = [super init];
if (self) {
self.suggestedInvocationPhrase = @"打卡";
}
return self;
}
@end
Intents Extension
接下来就是创建 Extension 了。通过 file -> new -> target , 选择 Intents Extension 即可。为了让 Extension 的界面便于控制,我选择了 Include UI Extension。这样就同时创建了两个Extension。
Intents Extension 创建好后,会自动出