我正在将我们的音乐服务应用程序与新的快捷方式功能集成在一起,并停留在奇怪的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)
}
}
}
}
答案 0 :(得分:0)
我与一位苹果工程师进行了交谈,他说INPlayMediaIntentHandling只能与.handleInApp意向响应结果代码一起使用。因此,我在应用程序主要目标中移动了意图处理程序逻辑,并通过AppDelegate的-application:handleIntent:completionHandler:
对其进行了调用一切正常,但Siri的AudioSession中断除外-她在启动后立即停止了我的媒体播放逻辑。苹果的那个工程师说这是一个iOS错误,苹果正在研究错误修复(也许是在12.1中,他们修复了它,我还没有检查)