当应用程序进入后台时Google Cast SDK 调用GCKSessionManager.suspendSessionWithReason
时,一种解决方案是将此方法替换为不同的实现,以检查原因是否存在.AppBackgrounded
,然后实际上忽略该调用。
然后,当应用程序进入后台时,SDK 不会立即终止会话,但它仍会在稍后暂停会话。然而,会话可以从后台模式重新启动——但这需要大量时间,并且从用户的角度来看,这种延迟是负面的。此外,在几秒钟没有“与之交谈”后,会话会定期再次暂停。
任何更好的解决方案仍然非常感谢。
extension GCKSessionManager {
static func ignoreAppBackgroundModeChange() {
let oldMethod = class_getInstanceMethod(GCKSessionManager.self, #selector(GCKSessionManager.suspendSessionWithReason))
let newMethod = class_getInstanceMethod(GCKSessionManager.self, #selector(GCKSessionManager.suspendSessionWithReasonIgnoringAppBackgrounded))
method_exchangeImplementations(oldMethod, newMethod)
}
func suspendSessionWithReasonIgnoringAppBackgrounded(reason: GCKConnectionSuspendReason) -> Bool {
guard reason != .AppBackgrounded else { return false }
return suspendSessionWithReason(reason)
}
}
我们现在需要做的就是调用GCKSessionManager.ignoreAppBackgroundModeChange()
.
编辑:
从最新的 Google Cast SDK 开始,它有一个新选项可以让会话在后台保持活动状态。