Siri快捷方式INPlayMediaIntent在2分钟后停止播放

时间:2018-10-02 10:35:22

标签: ios sirikit sirishortcuts

我正在将我们的音乐服务应用程序与新的快捷方式功能集成在一起,并停留在奇怪的SiriKit扩展行为上。我的INPlayMediaIntentHandling实现下载音乐曲目并开始使用AVPlayer播放它们,但是在每次启动120秒后扩展名以代码0退出(Xcode控制台说“程序以退出代码结束:0”)。我尝试搜索,但是Apple文档在该主题上为空,并且2018 WWDC会议仅包含有关此Intent的简短信息。

GitHub上有一个示例— https://github.com/beryu/SiriShortcutsSample 但使用Apple Music 30秒采样。我尝试将其与长mp3流一起使用,但其行为类似于我的应用,并在2分钟后停止。

有人成功实现了INPPlayMediaIntent吗?

IntentHandler代码

class IntentHandler: INExtension, INPlayMediaIntentHandling {

private var intentCompletion: Any?

@available(iOSApplicationExtension 12.0, *)
func handle(intent: INPlayMediaIntent, completion: @escaping (INPlayMediaIntentResponse) -> Void) {

    intentCompletion = completion
    switch intent.mediaContainer?.identifier {
    case ShortcutsMeta.FavouritesIdentifier: startFavourites()

    default: complete(.success);
    }
}

@available(iOSApplicationExtension 12.0, *)
private func complete(_ resultCode: INPlayMediaIntentResponseCode) {
    let userActivity = NSUserActivity(activityType: NSStringFromClass(INPlayMediaIntent.self))
    let response = INPlayMediaIntentResponse(code: resultCode, userActivity: userActivity)
    (intentCompletion as? ((INPlayMediaIntentResponse) -> Void))?(response)
    intentCompletion = nil
}

override func handler(for intent: INIntent) -> Any {
    return self
}

private func startFavourites() {
    let command = IntentCommand(type: .favourites)
    // this code loads track and calls AVPlayer to play it, then calls completion
    command.run{ [weak self] (result: Bool) in
        if #available(iOSApplicationExtension 12.0, *) {
            self?.complete(result ? .success : .failure)
        }
    }
}

}

1 个答案:

答案 0 :(得分:0)

我与一位苹果工程师进行了交谈,他说INPlayMediaIntentHandling只能与.handleInApp意向响应结果代码一起使用。因此,我在应用程序主要目标中移动了意图处理程序逻辑,并通过AppDelegate的-application:handleIntent:completionHandler:

对其进行了调用

一切正常,但Siri的AudioSession中断除外-她在启动后立即停止了我的媒体播放逻辑。苹果的那个工程师说这是一个iOS错误,苹果正在研究错误修复(也许是在12.1中,他们修复了它,我还没有检查)