有没有办法检索INInteraction我的应用程序捐赠的交互列表 ( )?
我想避免重复代码,让这个列表有所帮助。
我正在实施 Siri Shortcut。我的目标是将功能的快捷方式添加到“设置”应用上的 SIRI 快捷方式。
为此,我需要先注册 NSUserActivity,然后处理来自应用程序委托的快捷方式调用。
问题是我不确定在哪里以及如何从我观看的教程中正确注册活动。
根据教程,我在视图控制器上添加了这段代码。
由于 self.userActivity 可从应用程序委托访问,我想知道是否可以在应用程序委托中添加以下代码。
func registerShortcut() {
if #available(iOS 12.0, *) {
let activity = NSUserActivity(activityType: "jp.co.mycompany.MyApp.openCamera")
activity.title = "Camera Shortcut"
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
self.userActivity = activity
self.userActivity?.becomeCurrent()
}
}
Run Code Online (Sandbox Code Playgroud)
在不控制调用注册码的次数的情况下,应用程序将在每次启动应用程序时调用注册码。多次调用注册会导致任何问题吗?
我使用 Apple 的 Siri Shortcuts 编写程序,我正在寻找 API 或任何可用于识别在后台播放的歌曲的方法。
有没有什么软件可以做到这一点?如果没有,有没有办法编写一个识别歌曲的快捷方式?
谢谢!
Siri 意图:是否可以要求用户在执行之前解锁 iPhone?我不希望 Intent 导致相应的 iOS 应用程序启动。
如果我取消选中“支持后台执行”框(如下所示),Siri 会要求解锁设备,但它也会启动应用程序,但我不希望这样。
我正在尝试将 Siri Shortcuts 集成到我的应用程序中。我正在尝试的概念是通过秘密密码确认获得我的卡的奖励积分。请在下面找到我为此所做的工作。
添加了名为 say Rewards 的新自定义意图。
定义了标题。启用确认的字幕和参数(accType,pin)。Pin 将单独发送给用户。
//
// RewardsIntentHandler.swift
// SiriIntentExt
//
import UIKit
import Intents
class RewardsIntentHandler: NSObject, RewardsIntentHandling {
func resolveAccType(for intent:RewardsIntent, with completion: @escaping ([INStringResolutionResult]) -> Void) {
guard let accType = intent.accType else {
completion([INStringResolutionResult.needsValue()])
return
}
completion([INStringResolutionResult.success(with: accType)])
}
func resolvePin(for intent:RewardsIntent, with completion: @escaping ([INIntegerResolutionResult]) -> Void) {
guard let verifyPin = intent.pin else {
completion([INIntegerResolutionResult.needsValue()]) …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用Intents Extensions创建了自己的快捷方式操作。他们完美地执行了后台操作。
对于某些操作,我试图使intent扩展在“快捷方式”中运行并执行功能时打开主(容器)应用程序。
我在使用NSUserActivity时遇到了麻烦,我不确定这是一个SwiftUI项目,还是我实现它的方式(或两者兼而有之)。
我已经在我的info.plist(“ com.me.project.activityName”)中将NSUserActivity名称注册为NSUserActivityType。
我已将以下代码添加到我的AppDelegate中。
我在意图扩展内初始化了一个新的NSUserActivity,其类型与在info.plist中声明的类型相同。
我也尝试过在应用程序中声明活动(我认为我不需要这样做吗?)
我正在运行:iOS(iPhone XS,Beta 6)macOS 10.15 Catalina(Beta 5)Xcode 11.0(Beta 5)
我的AppDelegate中有这个:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == "com.me.project.activityName" {
if let url = URL(string: "https://www.google.com") {
UIApplication.shared.open(url)
}
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
这是我的意图扩展内:
let openApp = intent.launchApp?.boolValue ?? false
if openApp {
let UA = NSUserActivity(activityType: "com.me.project.activityName")
UA.title = "Dummy title"
completion(UserActivityTestIntentResponse(code: .continueInApp, userActivity: UA))
} …Run Code Online (Sandbox Code Playgroud) 假设我已经FooIntent在.intentdefinition文件中定义了一个名为 的自定义意图。
它有一个bar类型Decimal为的单个参数,其中:
-User can supply value in Siri and Shortcuts app是活动的。
-Default Value是0。
其自动生成的类定义现在如下所示:
public class FooIntent: INIntent {
@NSManaged public var bar: NSNumber?
}
Run Code Online (Sandbox Code Playgroud)
如果我构造 a FooIntent,设置bar为nil,并将其传递给 a INUIAddVoiceShortcutViewController:
let intent = FooIntent()
intent.bar = nil
intent.suggestedInvocationPhrase = "Do foo"
let shortcut = INShortcut(intent: intent)
let viewController = INUIAddVoiceShortcutViewController(shortcut: shortcut!)
viewController.delegate = self
window?.rootViewController?.present(viewController, animated: true, completion: nil) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SwiftUI 和 Siri 在 iOS 上实现语音交互。我只是想找到使用单个字符串参数的快捷方式。我对这个框架非常陌生,并且一直被困住。以下是我尝试过的:
目前,我的设置具有上述所有内容,我可以创建快捷方式,该快捷方式显示在快捷方式应用程序上。然而,它被卡住了,我什至不知道如何调试它。如果我尝试语音,Siri 会抱怨出了问题。如果我尝试单击快捷方式,它也会被卡住。下面你可以看到它是如何被卡住的图像,停止按钮几乎完成了。
我试图在处理回调时简单地在用户默认值中设置一个字符串。无需对处理程序进行特殊检查。
关于实施的一些要点:
onContinueUserActivity,但我找不到类似的意图(我知道我们需要参数意图)。suggestedInvocationPhrase。我应该在这里分享任何其他细节或重要的代码吗?我不确定,所以我现在只是分享了 github 链接。
我无法将一些基本的 SiriKit 操作添加到 macOS Monterey 中的 macOS 应用程序中。为了测试这一点,我创建了一个新项目,使其成为带有 Storyboard 的 macOS 应用程序。然后我添加了一个意图定义文件,并添加了一个基本意图,没有输入/输出。我将意图名称添加到目标“常规”配置中的“支持的意图”中。
当我构建并运行应用程序时,快捷方式不会显示在 Apple Shortcuts 应用程序中。我尝试在“签名和功能”中查找“Siri”功能,但它没有列出(与新的 iOS 应用程序相比)。
我不确定我在这里缺少什么。希望得到一些帮助。
顺便说一句,我在 macOS Monterey RC 上使用 Xcode 13.1。
这就是我的自定义意图的样子。
我正在更改应用程序意图定义,但当我尝试将更改后的意图用作快捷方式中的操作时,这些更改不会反映在快捷方式应用程序中。
尝试运行快捷方式会出现异常:
[执行] Perform() 返回未在方法签名中声明的类型
AppIntents/PerformActionExecutorTask.swift:78:致命错误:perform() 返回的类型未在方法签名中声明
有没有办法强制重新加载快捷方式应用程序以获得新意图,或者我是否缺少一些更基本的东西?