【问题标题】:Siri always responds 'Continue in the app' when starting workout with SiriKit使用 SiriKit 开始锻炼时,Siri 总是响应“在应用程序中继续”
【发布时间】:2016-09-19 10:51:17
【问题描述】:

我正在为我们的应用开发 SiriKit 意图扩展。我们正在使用锻炼扩展类型。问题是,我只是将所需的方法放入并始终传递.ready,但 Siri 总是响应,

抱歉,您必须在应用中继续。

我也尝试了其他回复(.failure.unspecified),但她仍然说要继续使用应用程序。我已经按照 Apple 提供的文档设置了我的 .plist 文件,但它仍然可能与此相关。

这是我的 Intents 代码:

class IntentHandler: INExtension, INStartWorkoutIntentHandling, INPauseWorkoutIntentHandling, INResumeWorkoutIntentHandling, INCancelWorkoutIntentHandling, INEndWorkoutIntentHandling {


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
}

func handle(startWorkout intent: INStartWorkoutIntent, completion: @escaping (INStartWorkoutIntentResponse) -> Void) {
    print("Starting Service")
    let activity = NSUserActivity(activityType: "start_service")
    let result = INStartWorkoutIntentResponse(code: .ready, userActivity: activity)
    completion(result)
}

func handle(endWorkout intent: INEndWorkoutIntent, completion: @escaping (INEndWorkoutIntentResponse) -> Void) {
    print("Ending Service")
    let result = INEndWorkoutIntentResponse(code: .ready, userActivity: nil)
    completion(result)
}

func handle(pauseWorkout intent: INPauseWorkoutIntent, completion: @escaping (INPauseWorkoutIntentResponse) -> Void) {
    print("Pausing Service")
    let result = INPauseWorkoutIntentResponse(code: .ready, userActivity: nil)
    completion(result)
}

func handle(cancelWorkout intent: INCancelWorkoutIntent, completion: @escaping (INCancelWorkoutIntentResponse) -> Void) {
    print("Cancel Service")
    let result = INCancelWorkoutIntentResponse(code: .ready, userActivity: nil)
    completion(result)
}

func handle(resumeWorkout intent: INResumeWorkoutIntent, completion: @escaping (INResumeWorkoutIntentResponse) -> Void) {
    print("Resume Service")
    let result = INResumeWorkoutIntentResponse(code: .ready, userActivity: nil)
    completion(result)
}
}

我尝试了一个处理开始锻炼意图的断点,它确实命中了函数。我还尝试将.ready 传递给 INMessageIntent,Siri 没有在应用程序中说打开就做出了回应。我想知道锻炼扩展是否总是如此。如果是,我仍然希望 Siri 显示我的 IntentsUI。

感谢您的回复。

【问题讨论】:

    标签: ios iphone swift sirikit intents-extension


    【解决方案1】:

    准备好在应用中开始锻炼后,您需要使用 .continueInApp 调用完成处理程序

    所以应该是这样的:

    public func handle(startWorkout intent: INStartWorkoutIntent, completion: @escaping (INStartWorkoutIntentResponse) -> Swift.Void) {
        let userActivity = NSUserActivity(activityType: NSStringFromClass(INStartWorkoutIntent.self))
        let response = INStartWorkoutIntentResponse(code: .continueInApp, userActivity: userActivity)
        completion(response)
    }
    

    查看文档:

    您的扩展程序已准备好将控制权转移到应用程序,以便可以开始锻炼。返回此代码后,SiriKit 会启动您的应用程序并将您在初始化时提供的 NSUserActivity 对象传递给它。 (如果您没有提供用户活动对象,SiriKit 会为您创建一个。)SiriKit 添加一个 INInteraction 对象,其中包含意图和您对用户活动对象的响应,然后再交付它。您的应用应使用用户活动对象中的信息来开始锻炼。

    【讨论】:

    • 好的,这行得通,但是如何让它显示我的 IntentsUI?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2019-11-23
    • 2019-04-14
    • 2021-11-28
    • 1970-01-01
    • 2017-02-16
    相关资源
    最近更新 更多