【发布时间】:2019-03-07 11:30:57
【问题描述】:
我正在将我们的音乐服务应用程序与新的快捷方式功能集成在一起,并且遇到了奇怪的 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)
}
}
}
}
【问题讨论】:
-
请你分享你创建的代码,因为它会让人们更容易帮助你
-
我在这里也有同样的情况,尝试用 AVPlayer 播放音频流,几秒钟后流停止。我试过背景键允许播放背景音频,它工作了 2 分钟然后停止了。
-
题外话,在用户连接耳机后,Siri 是否会像文档 (developer.apple.com/documentation/sirikit/…) 中那样提出一些建议?我尝试了示例应用程序,但在运行/播放/关闭应用程序以及配对/连接耳机后没有任何反应。
标签: ios sirikit sirishortcuts