アプリがバックグラウンドに移行すると Google Cast SDK が呼び出さGCKSessionManager.suspendSessionWithReason
れるため、解決策の 1 つは、このメソッドを別の実装に置き換えて、その理由を確認.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 では、セッションをバックグラウンドで維持する新しいオプションがあります。