2016-08-11 3 views
0

iOS 용 최신 Google Cast SDK (버전 3.1.1.10003)를 사용 중이며 Google Apps는 Google Cast 기기를 원격 제어합니다. 볼륨을 변경합니다. 우리 앱이 백그라운드로 갈 때도 그렇게해야합니다.앱이 백그라운드로 전환 될 때 GCKCastSession을 유지하는 방법

그러나 GCKSessionManager은 앱이 백그라운드로 전환 될 때 suspendSessionWithReason:을 호출합니다. 이것은 세션이 일시 중지되고 따라서 우리 앱이 더 이상 그것을 제어 할 수 없다고 말했습니다.

GCKSessionManager은 앱이 백그라운드로 이동할 때 세션을 일시 중지하지 못하게하려면 어떻게해야합니까?

편집 : : 아래 솔루션을 제공하고 있지만 재 연결시 상당한 지연이 발생하여 사용자에게 친숙하지 않습니다.

답변

2

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 전송 SDK로,이 백그라운드에서 살아 세션을 유지하는 새로운 옵션이 있습니다. 최신 SDK 세션에서

+0

는 이유 "GCKConnectionSuspendReasonNetworkNotReachable" 와 현재 항목의 완료에 장애물을 극복 어떤 방법을 중지됩니다? –