带有独立 WatchOS 应用程序的 Siri 表盘上的快捷方式/操作

Posted

技术标签:

【中文标题】带有独立 WatchOS 应用程序的 Siri 表盘上的快捷方式/操作【英文标题】:Shortcut/Action on Siri Watch Face with independent WatchOS app 【发布时间】:2021-02-05 13:30:26 【问题描述】:

我对制作应用程序比较陌生,甚至对独立手表应用程序也比较陌生。作为培训,我正在制作一个手表应用程序,我可以用它来记录我全天的饮水量。我创建了一个新的意图定义文件(参见图 1),在该文件上我检查了所有目标成员资格(应用程序、WatchKit 应用程序和 WatchKit 扩展)的标记。此外,目标成员资格类是 WatchKit 扩展的公共意图。

记录我的水时,我执行以下代码:

let intent = INManager.intent(drink: item)
INManager.donateShortcuts(withIntent: intent)

我的 IntentManager 看起来像这样:

import Foundation
import Intents

class IntentManager 
    
    func intent(drink: Drink) -> LogDrinkIntent 
        let intent = LogDrinkIntent()
        
        intent.uuid = drink.id.uuidString
        intent.name = drink.name
        intent.emoji = drink.emoji
        
        return intent
    
    
    func donateShortcuts(withIntent intent:INIntent) 
        var relevantShortcuts: [INRelevantShortcut] = []
        
        if let relevantShortcut = defaultRelevantShortcut(withIntent: intent) 
            relevantShortcuts.append(relevantShortcut)
        
        
        INRelevantShortcutStore.default.setRelevantShortcuts(relevantShortcuts)  (error) in
            if let error = error 
                print("Failed to set relevant shortcuts: \(error))")
             else 
                print("Relevant shortcuts set.")
            
        
    
    
    private func defaultRelevantShortcut(withIntent intent: INIntent) -> INRelevantShortcut? 
        if let shortcut = INShortcut(intent: intent) 
            let relevantShortcut = INRelevantShortcut(shortcut: shortcut)
            relevantShortcut.shortcutRole = .action
            
            let template = INDefaultCardTemplate(title: "Log Drink")
            relevantShortcut.watchTemplate = template

            print("Returning relevant shortcut.")
            
            return relevantShortcut
        
        
        return nil
    

记录饮品时,会打印确认Returning relevant shortcut.Relevant shortcuts set.。但是,Siri 表盘不会更新以包含指向我的操作的链接。我从this Medium article 获得了IntentManager 的代码。

非常感谢您的时间和帮助。我很难找到有关此功能的任何详细信息,而且 Apple 的文档质量较差。谢谢!如果您需要更多详细信息等,请随时询问。

图片 1

【问题讨论】:

【参考方案1】:

让我们从后面给马鞍:一般来说,你想使用Soup Chef。现在您可以将 Siri 建议分为两个子组,donated shortcuts 和 relevant shortcuts。

在您的“取水”记录应用程序的具体示例中,您应该将INIntent 捐赠给INIteraction。原因很简单:您的建议是由于用户在您的应用程序中执行的操作,而不是基于明显的相关性,因此您关于INRelevantShortcutStore 的段落是不必要的和/或应该替换为INInteraction .

重新表述我自己:问题是您将INRelevantShortcutStore 解析为捐赠,请参见此处:

func donateShortcuts(withIntent intent:INIntent) 
        var relevantShortcuts: [INRelevantShortcut] = []
        
        if let relevantShortcut = defaultRelevantShortcut(withIntent: intent) 
            relevantShortcuts.append(relevantShortcut)
        
        
        INRelevantShortcutStore.default.setRelevantShortcuts(relevantShortcuts)  (error) in
            if let error = error 
                print("Failed to set relevant shortcuts: \(error))")
             else 
                print("Relevant shortcuts set.")
            
        
    

...如上所述,在您的具体示例中,这不是 INIntent 的正确用法。

强烈建议通读Soup Chef,特别是donating shortcuts to Siri(你想做什么!)。 文档非常详细和解释性!

【讨论】:

由于您更好地了解您的应用程序应该做什么,即基于时间等,我无法用donated shortcuts 正确地编写一个完成的示例。虽然文档写得很好,因此我猜你在替换必要的INIntent 时不会有任何问题。 这太棒了!感谢您为我指明正确的方向。捐赠我的新 INInteraction 时出现错误,但这是另一个问题。

以上是关于带有独立 WatchOS 应用程序的 Siri 表盘上的快捷方式/操作的主要内容,如果未能解决你的问题,请参考以下文章

在独立的 watchOS 应用上实现核心数据

如何发布watchos独立应用?

如何在真实设备上安装独立的 watchOS 应用程序进行测试?

本地通知不适用于独立 WatchOS 应用程序

如何更改独立 watchOS 应用的显示名称?

WatchOS - App Store 未列出独立手表应用程序的本地化语言