ios - Siri Shortcut INPlayMediaIntent 2 分钟后停止播放
问题描述
我正在将我们的音乐服务应用程序与新的快捷方式功能集成在一起,并坚持使用奇怪的 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)
}
}
}
}
解决方案
我与一位苹果工程师进行了交谈,他说 INPlayMediaIntentHandling 只能与 .handleInApp 意图响应结果代码一起使用。因此,我将意图处理程序逻辑移动到应用程序主目标中,并通过 AppDelegate 的 -application:handleIntent:completionHandler 调用它:
一切都很好,除了来自 Siri 的 AudioSession 中断——她在启动后立即停止了我的媒体播放逻辑。那位来自 Apple 的工程师说这是一个 iOS 错误,Apple 正在修复错误(可能在 12.1 中他们修复了它,我还没有检查)
推荐阅读
- html - Django get_user_model 不使用 html 数据列表
- android - 当我运行“flutter build apk --release”时,flutter builder应用程序显示错误
- permissions - 您无权打开应用程序“Anaconda-Navigator”
- python - 无需创建项目的 Google Drive Python API
- python - Pyspark - 如何从存储在变量中的 xlsx 字节数据创建火花数据帧?
- c - C - 添加原始字节时的签名
- jenkins - 要求用户继续构建而不占用 Jenkins 中的节点
- c++ - 需要帮助来使用 sublime text 安装/使用 glfw for c++
- r - R:将1000列中的NA更改为另一列的值
- php - 我已经创建了 4 个表的视图,现在我想用 php 在 4 个表中插入不同的数据......有解决方案吗?