我想用SiriKit开始锻炼.开始锻炼需要从app扩展程序打开主应用程序.
Apple为INStartWorkoutIntentHandling处理程序提供的样板是
func handle(startWorkout startWorkoutIntent: INStartWorkoutIntent, completion: (INStartWorkoutIntentResponse) -> Void) {
let userActivity = NSUserActivity(activityType: NSStringFromClass(INStartWorkoutIntent))
let response = INStartWorkoutIntentResponse(code: .success, userActivity: userActivity)
completion(response)
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能从这里打开自己的应用程序?像myapp://workout?action=start&name=pushups 这样的回答似乎没有相关性,因为我没有这个扩展类型UIViewController的extensionContext属性.
最后一个相关位:对于其他操作(暂停,结束)我宁愿不打开主应用程序,而只是暂停在主应用程序中运行的锻炼.我可以使用类似的自定义URL来暂停它,但这会打开应用程序,这是一个额外的不必要的步骤.有什么好方法告诉主应用程序在不打开应用程序的情况下从INExtension中采取特定操作?
摘要
尝试编写代码,INSendPaymentIntent但无法区分具有相似名字的联系人。Siri 似乎在之后就开始循环INPersonResolutionResult.disambiguation(with: matchedContacts)
代码背后的想法
我最初选择使用联系人的名字来搜索联系人,因为INPerson如果用户仅指定名字,则使用显示名称会返回与查询匹配的第一个联系人。(即“向凯文支付 50 美元”将自动选择凯文·培根而不是凯文·史派西)。
不幸的是,使用给定的名字会使 Siri 陷入循环,要求用户一遍又一遍地指定联系人......
问题
有没有办法使用联系人的名字搜索联系人而不会让 Siri 陷入循环?
代码
func resolvePayee(forSendPayment intent: INSendPaymentIntent, with completion: (INPersonResolutionResult) -> Void) {
if let payee = intent.payee {
var resolutionResult: INPersonResolutionResult?
var matchedContacts: [INPerson] = []
let predicate = CNContact.predicateForContacts(matchingName: (payee.nameComponents?.givenName)!)
do {
let searchContactsResult = try CNContactStore().unifiedContacts(matching: predicate, keysToFetch:[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactMiddleNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey, CNContactIdentifierKey])
for contact in searchContactsResult {
matchedContacts.append(createContact((contact.phoneNumbers.first?.value.stringValue)!, contact: contact))
}
} catch {
completion(INPersonResolutionResult.unsupported())
} …Run Code Online (Sandbox Code Playgroud) 当我使用新的Siri Intents将我的应用程序上传到iTunes Connect时,我收到一条消息:
Invalid Siri Support - No example phrase was provided for INSetMessageAttributeIntent in the "en" language
Invalid Siri Support - No example phrase was provided for INSendMessageIntent in the "en" language
Run Code Online (Sandbox Code Playgroud)
我AppIntentVocabulary.plist在主应用程序中创建了一个并对其进行了本地化,但每次上传时都会收到此问题.
文件是在错误的位置还是我将这些示例短语放在错误的位置?
谢谢
我正在开发一个允许Siri发送消息的应用程序.几天前,一切都运行良好,每当我说'发送消息使用'MyApp名称''它显示SiriUI,它正在正确处理命令.
但是几天后我得到了不同的行为!有时Siri打开我的应用程序,有时会说:"这是我在网上找到的'使用'myapp name'发送消息':",有时"我不明白"使用'myapp'发送消息,有时我得到我过去常常得到的正确行为.
当然,我的应用程序在设置> Siri> App支持中启用
这是一个非常奇怪的行为.我很抱歉,对不起.我可以说这个问题用我用来调试的两个不同的手机进行验证,我试图在线下载一个示例项目(在github上),我遇到了同样的问题.我一直在使用我的专业资料,特别是"Xcode自动管理签名"已启用
有谁知道如何解决这个问题?
谢谢!
我想将 Siri 集成到我的应用程序中并使其执行特定操作,即:
1-打开特定视图
2-发送反馈
我搜索了这个功能,但没有找到有用的答案。
有人试过像这样使用 Siri 吗?
谢谢。
ios 不允许包含的应用程序和包含的扩展共享一个公共容器,因此 UserDefaults 是建议的解决方案。
我尝试将 UserDefaults 与 sirikit 意图处理程序一起使用,假设处理程序的行为如下:
在 IntentHandler.swift 内部
let shared = UserDefaults(suiteName:XXXXXXXX.group...)
shared?.set("saved value 1", forKey: "key1")
shared?.set("saved value 2", forKey: "key2")
shared?.set("saved value 3", forKey: "key3")
Run Code Online (Sandbox Code Playgroud)
viewDidLoad 中的 ViewController.swift 内部
let shared = UserDefaults(suiteName:XXXXXXXX.group...)
if let temp1 = shared?.string(forKey:"key1")
{
contentLabel.text = temp1
}
if let value = shared?.string(forKey: "key2")
{
valueLabel.text = value
}
if let key = shared?.string(forKey: "key3")
{
keyLabel.text = key
}
Run Code Online (Sandbox Code Playgroud)
我可以在 ipad 屏幕上看到与 key1 和 key2 相对应的字符串,但看不到与 key3 相对应的字符串,在代码中添加同步并没有帮助。 …
我正在使用 Siri 与电报的集成。我可以要求 Siri 使用电报向任何人发送消息,它会这样做。但是,如果我要求它使用 botname 向机器人发送消息,它会不断询问向谁发送消息,并且不选择向谁发送消息的机器人名称。
工作:“电报人名嗨”
不工作:“Telegram botname Hi”
这是否会发生,任何想法如何让它发挥作用。
我正在使用意图集成Sirikit,账单支付:
INPayBillIntentHandling(最近在iOS 10.3+ 中发布,2017 年 3 月 27 日)。
苹果文档在这里。
注意:我使用的是 Obj-C 语言、XCode 8.3、设备 iPhone 6S 和 iOS 10.3 和演示项目 iOS 部署目标是 iOS 10.3 并且在第一次询问权限时还启用了 Siri 并验证了在设置中,Siri已启用。
当我在设备上启动应用程序并说“使用 DemoApp 支付账单”时,Siri 说“我希望我可以,但 DemoApp 还没有为我设置”
请帮我。提前致谢!
到目前为止,我做了以下步骤:
1) 创建一个 Demo Xcode 项目
2) 在主应用程序功能中,启用 Siri。
3) 添加 Sirikit 扩展使用
文件 -> 新建 -> 添加目标 -> 意图扩展 -> 下一步 -> 添加产品名称并说完成
注意:我已禁用 Sirikit UI 扩展。
4) 在 Main AppDelegate 添加以下内容:
#import <Intents/Intents.h>
[INPreferences requestSiriAuthorization:^(INSiriAuthorizationStatus status) …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。
这就是我的自定义意图的样子。