2016-08-11 7 views
0

Я использую последнюю версию Google Cast SDK для iOS (версия 3.1.1.10003), и наше приложение является удаленным управлением устройствами 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().

Edit:

В последней Google Cast SDK, он имеет новую возможность сохранить сессии в живых в фоновом режиме.

+0

в последней сессии SDK получает приостановлено по завершении текущего элемента с разумом «GCKConnectionSuspendReasonNetworkNotReachable» Любой путь преодоления этого препятствия? –

 Смежные вопросы

  • Нет связанных вопросов^_^