gpt4 book ai didi

ios - 在 Xcode 11 上,如何配置 Intent 在后台运行?

转载 作者:行者123 更新时间:2023-11-29 05:11:53 24 4
gpt4 key购买 nike

TL;DR

在 iOS 13 和 Xcode 11 上,如何将 Intent 配置为在后台运行并仅返回结果,以便将其用作快捷方式应用中其他操作的输入?

我想要实现的目标的详细信息

我的应用程序有一个我想通过快捷方式公开的歌曲列表(实际上是有关歌曲的元数据,而不是歌曲本身)。这个想法是为高级用户提供一种将音乐数据库与他们想要的其他应用程序或操作集成的方法。例如,人们可能会发现获取下个月即将推出的音乐列表很有用,并使用它为每首歌曲创建日历事件。在快捷方式应用程序上访问此列表可以让他们执行此操作。

我创建了一个名为“列出所有未读音乐版本”的 Intent,并将其响应定义为包含每首歌曲信息的对象列表。问题是,当我转到快捷方式应用程序,使用此 Intent 创建一个新快捷方式并运行它时,它会打开我的应用程序而不是在后台运行。

我创建和配置意图的步骤

这是我在项目中配置意图所做的高级定义。下一节将有实际的源代码和屏幕截图。

  1. 创建了新的 SiriKit 意图定义文件。
  2. 创建了一个新意图。
    • 定义了其标题、说明、参数,并禁用了“意图符合 Siri 建议”复选框。
    • 将响应属性定义为数组(因为它将是歌曲列表),并将输出配置为此数组属性。
  3. 创建了一个新的 Intents 扩展,并禁用了“包含 UI 扩展”复选框。这里的想法是在后台处理用户请求并返回包含结果的列表 - 不需要 UI。
  4. 在 Intents Extension 目标中,使用第 2 步中创建的 Intent 名称在 Info.plist 中定义 IntentsSupported 数组。
  5. 使 IntentHandler 类实现为第 2 步中创建的 Intent 生成的协议(protocol)。

代码示例和屏幕截图

我的 SiriKit 意图定义文件和 GetUnreadReleases 意图:

enter image description here

GetUnreadReleases 意图响应:

enter image description here

意图扩展IntentHandler类:

import Intents

class IntentHandler: INExtension, GetUnreadReleasesIntentHandling {

func handle(intent: GetUnreadReleasesIntent, completion: @escaping (GetUnreadReleasesIntentResponse) -> Void) {
let response = GetUnreadReleasesIntentResponse(code: .success, userActivity: nil)
let release1 = IntentRelease(identifier: "1", display: "Teste 1")
release1.name = "Name test 1"
release1.artist = "Artist test 1"
response.releases = [release1]
completion(response)
}

func resolveMediaType(for intent: GetUnreadReleasesIntent, with completion: @escaping (IntentMediaTypeResolutionResult) -> Void) {
if intent.mediaType == .unknown {
completion(.needsValue())
} else {
completion(.success(with: intent.mediaType))
}
}

override func handler(for intent: INIntent) -> Any {
// This is the default implementation. If you want different objects to handle different intents,
// you can override this and return the handler you want for that particular intent.

return self
}

}

意图扩展 Info.plist 文件:

enter image description here

结论

因此,我希望此意图在后台运行,根据用户定义的参数组装歌曲列表,并返回此列表以用作快捷方式应用中其他操作的输入。

看起来以前版本的 Intents 编辑器 (Xcode < 11/iOS < 13.0) 有一个“支持后台执行”复选框,它就是这样做的,但我在 Xcode 11 上找不到它了。

最佳答案

感谢 Apple 开发者论坛的 edford,我才得以成功。在意图定义文件中,必须选中“意图符合 Siri 建议”复选框才能使后台执行正常工作。

关于ios - 在 Xcode 11 上,如何配置 Intent 在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59612316/

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