【发布时间】:2020-06-05 06:47:15
【问题描述】:
假设我正在制作一个用户可以在其上安装几个小的交互式体验(meditations)的应用。
为方便起见,我希望我的用户能够在开始时说:“嘿 Siri,在 Meditations 中启动 Beach Sunset。”
由于某些原因,用户通过语音执行此操作是有意义的, 之前从未在 iOS 应用中与 Beach Sunset 进行过交互。 (例如,他们可能已经通过我的服务的网络应用“拥有”它。)
也就是说:我想要一个像 “嘿 Siri,在冥想中启动海滩日落” 这样的语音操作,即使 用户没有为其设置快捷方式首先,或者我为它“捐赠”行动。
这可能吗? (我觉得许多默认应用都有类似的行为,但也许它们很特别。)如果不是,我能做的下一个最好的事情是什么?
Siri 是否需要“捐赠”才能了解我的应用程序的语音操作,或者它们只是一种提示和预测用户行为的机制?
Siri 是否需要“快捷方式”来了解我的应用程序的语音操作,或者它们只是用户短语自定义的一种机制?
我从未向 iOS 应用程序添加 Siri 支持,但似乎“参数”在 iOS 13 中变得更加强大。This answer 暗示在 iOS 12 中不可能实现类似的功能,但我认为这也是做一些不同的事情(我想启动应用程序;他们想“创建一个对象”大概只是使用 Intent UI。我不知道这是否重要。)
我做了什么
我在 Start 类别 (LaunchMeditation) 中定义了一个自定义意图,其中包含一个参数 (meditationName)。
我考虑过标准的媒体意图,但这里的媒体是交互式的,而不是严格意义上的音频/视频,我不想惹麻烦。
我在我的应用中添加了一个 Intents 扩展,并编写了一个基本的测试“处理程序”,它只是试图将冥想名称传递给应用:
@interface IntentHandler () <LaunchMeditationIntentHandling>
@end
@implementation IntentHandler
- (id)handlerForIntent:(INIntent *)intent { return self; }
- (void)handleLaunchMeditation:(nonnull LaunchMeditationIntent *)intent
completion:(nonnull void (^)(LaunchMeditationIntentResponse * _Nonnull))completion {
// XXX: Maybe activity can just be nil?
NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@"com.example.meditations.activity.launch"];
activity.title = [NSString stringWithFormat:@"Launch %@ in Meditations", intent.meditationName]; // Do I need this?
activity.userInfo = @{@"meditationName": intent.meditationName};
completion([[LaunchMeditationIntentResponse alloc] initWithCode:LaunchMeditationIntentResponseCodeContinueInApp
userActivity:activity]);
}
- (void)resolveMeditationNameForLaunchMeditation:(nonnull LaunchMeditationIntent *)intent
withCompletion:(nonnull void (^)(INStringResolutionResult * _Nonnull))completion {
completion([INStringResolutionResult successWithResolvedString:intent.meditationName]);
}
@end
当我测试 Intents 扩展时,我现在可以在 Shortcuts 中为它创建一个快捷方式,设置它的参数,给它一个名字(比如“海滩时间”),然后通过告诉 Siri 这个名字来启动它——这就是我所做的一切不希望用户不得不做。
除此之外,Siri 会响应
Meditations 尚未通过 Siri 添加对此的支持。
...无论我如何表达我开始海滩日落的请求。 “没有添加支持” 听起来很痛苦,就像我缺少一些东西一样。
【问题讨论】:
-
你成功了吗?感觉应该支持通过系统/自定义意图添加 Siri 支持而不向系统捐赠任何东西。播客应用还可以解析“在 中播放播客 ”,而无需先捐赠每个播客。
标签: ios parameters ios13 siri sirishortcuts