【问题标题】:How can I use Siri Shortcuts to show a specific page in my app?如何使用 Siri 快捷方式在我的应用程序中显示特定页面?
【发布时间】:2018-11-15 03:54:54
【问题描述】:

我想深入研究 Shortcuts 技术。所以这里有一些问题:

  • 可以在任何类型的应用程序中使用 Siri 快捷方式吗?因为 SiriKit 只适用于旅游、聊天等。
  • 现在使用快捷方式。我可以通过 Siri 跳转到我的应用显示特定页面吗?

【问题讨论】:

    标签: ios siri sirikit ios12


    【解决方案1】:

    Siri 快捷方式可以在任何类型的应用程序中使用吗?只因为 SiriKit 从事旅游、聊天等工作。

    是的,任何。它们不依赖于任何特定域。它们是定制的。

    现在使用快捷方式。我可以通过以下方式跳转到显示特定页面的应用吗 Siri?

    是的。


    下面的代码显示了如何通过 Siri 显示特定页面的最简单方法,它被称为 “捐赠快捷方式”,通过 NSUserActivity。但是您可以通过定义自定义INIntent 来实现相同的目的。

    第 1 步:

    Info.plistNSUserActivityTypes 下添加活动类型字符串:com.app.viewPage

    第 2 步:

    创建活动:

    let viewPageActivityType = "com.app.viewPage"
    
    let viewPageActivity: NSUserActivity = {
        let userActivity = NSUserActivity(activityType: viewPageActivityType)
        userActivity.title = "View Page"
        userActivity.suggestedInvocationPhrase = "View Page"
        userActivity.isEligibleForSearch = true
        userActivity.isEligibleForPrediction = true
        return userActivity
    }()
    

    然后将其添加到您的视图控制器中:

    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            userActivity = viewPageActivity
        }
    }
    

    第 3 步:

    UIApplicationDelegate 方法中处理(如果用户按下快捷方式,或通过语音从 Siri 激活,该方法将被调用):

    public func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    
        if userActivity.activityType == viewPageActivityType {
            print("open the `ViewController` here")
            return true
        }
        return false
    }
    

    用户打开ViewController一次后,可能会在锁屏和搜索建议中得到建议。他们还可以前往Settings -> Siri & Search -> My Shortcuts 定义自定义短语以使用语音执行操作。

    要对此进行调试,请确保使用设备(而不是模拟器)。然后去Settings -> Developer -> Enable "Display Recent Shortcuts" and "Display Donations on Lock Screen"

    这方面有很多很棒的资源:

    【讨论】:

    • 你的回答对我帮助很大
    • 谢谢,我看了 SoupChef 演示,但我有一个问题?在项目中找不到OrderSoupIntent文件。而且这个OrderSoupIntent,有一个OrderSoupIntentHandling协议,不知道是谁调用了这个协议方法。
    • @Corbin 文件是从Intents.intentdefinition 文件自动生成的。 “OrderSoup”自定义意图自动生成一个类+协议。这可以通过 Xcode 右侧面板中的“自定义类”下的“身份检查器”进行自定义。您可以搜索使用OrderSoupIntentHandling 的位置。它用于SoupChefIntents 目标、IntentHandler 类/文件。
    • 我发现'OrderSoupIntentHandler'类只写了NewWordIntentHandling协议方法的实现。所以我有一个问题?在哪里设置委托?我用oc,但我不知道怎么写xxx。 delegate = self。如果我只写NewWordIntentHandling协议,这个方法是不能调用的。因为我没有设置delegate。
    • 这对我来说真的很好用。但是怎么可能以这种方式添加多个活动呢?
    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2019-03-13
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多