gpt4 book ai didi

ios - 通过带有参数的 Siri 启动应用程序,无需捐赠/快捷方式

转载 作者:行者123 更新时间:2023-12-05 02:08:56 38 4
gpt4 key购买 nike

假设我正在制作一款应用,用户可以在其中安装几个小的互动体验(冥想)。

为了方便起见,我希望我的用户能够通过说:“嘿 Siri,开始冥想中的海滩日落。”

由于某些原因,用户通过语音执行此操作是有意义的,无需首先在 iOS 应用中与 Beach Sunset 进行交互。 (例如,他们可能已经通过我服务的网络应用程序“拥有”它。)

也就是说:我希望像“嘿 Siri,在冥想中开始海滩日落” 这样的语音操作即使在没有用户为其设置快捷方式的情况下也能正常工作首先,或者我为它“捐赠”行动。

这可能吗? (我觉得很多默认应用程序都有类似的行为,但也许它们很特别。)如果不是,我能做的下一个最好的事情是什么?

Siri 是否需要“捐赠”来了解我的应用程序的语音操作,或者它们只是一种提示和预测用户行为的机制?

Siri 是否需要“快捷方式”来了解我的应用程序的语音操作,或者它们只是一种用户短语自定义机制?

I've never added Siri support to an iOS app, but it seems “parameters” have gotten a lot more powerful in iOS 13. This answer suggests something similar wasn't possible in iOS 12, but I think it's also doing something somewhat different (I want to launch the app; they want to “create an object” presumably just using Intent UI. I don't know if this matters.)

我做了什么

我在 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 Extension 时,我现在可以在 Shortcuts 中为它创建一个 Shortcut,设置它的参数,给它起一个名字(比如“Beach time”),然后通过告诉 Siri 这个名字来启动它——这就是我所做的一切不要希望用户不得不做。

除此之外,Siri 会回应

Meditations hasn't added support for that with Siri.

......无论我如何表达我开始海滩日落的请求。 “没有添加支持” 听起来很痛苦,就像我缺少了什么。

最佳答案

我会尽量简短地回答您的所有问题。

  • 如果不提供 Action ,您就无法创建 Siri Action 。一旦你捐赠了你的 Action ,它们也不会注册到 Siri。用户必须创建快捷方式才能使用它们。
  • 您可以做的下一个最好的事情是告知您的用户您的 Siri 快捷方式。为此,您可以在入职屏幕上显示弹出窗口或通知新用户。好的部分是您可以通过此代码将您的用户重定向到“创建 Siri 快捷方式”屏幕,您可以通过单击按钮或点击手势触发。
let shortcut = INShortcut(userActivity: shortcutActivity!) // shortcutActivity is your donated activity.          
let vc = INUIAddVoiceShortcutViewController(shortcut: shortcut)
vc.delegate = self // INUIAddVoiceShortcutViewControllerDelegate
self.present(vc, animated: true, completion: nil)
  • 快捷方式对于 Siri 了解您的实现是必要的。
  • 据我所知,意图域可以帮助您为 Siri 快捷方式指定更多参数。这使您能够创建更多 Siri 交互。
  • Apple 还推广常用应用程序的 Siri 快捷方式。如果您的用户定期或比其他人更频繁地使用您的应用程序,他们可能会在主屏幕上看到 Siri 快捷方式建议。类似于此one .

我也认为在没有任何用户操作的情况下捐赠 Siri Shortcuts 会很棒,但会存在某些问题,例如:

  • 如果两个或多个不同的应用对 Siri 快捷方式使用相同的短语怎么办?
  • Siri 如何区分未注册的命令和简单的对话?例如,如果有人使用短语“Hi Siri”创建了快捷方式。
  • 即使您使用特定短语捐赠了一个 Action ,Siri 也必须了解用户如何发音该特定短语。

这些可能弊大于利,因此我认为 Apple 选择了当前的方式。希望这些能回答您的问题。

关于ios - 通过带有参数的 Siri 启动应用程序,无需捐赠/快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60328476/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com