Следующая процедура позволяет преобразовать приложение отправителя iOS из Cast SDK v2 в CAF Sender, основанное на синглтоне GCKCastContext .
Введение
- CAF Sender по-прежнему распространяется на сайте разработчиков Google Cast и CocoaPods , как и v2.
- Добавлены новые классы, которые берут на себя ответственность за соблюдение контрольного списка дизайна Google Cast.
- CAF Sender предоставляет виджеты, соответствующие требованиям Cast UX; Версия 2 не содержала никаких компонентов пользовательского интерфейса и требовала реализации этих виджетов.
- Дизайн CAF Sender соответствует дизайну Cast Android SDK.
- CAF Sender поддерживает биткод, например v2.
- Скрытые субтитры в CAF аналогичны версии 2.
Зависимости
CAF Sender поддерживает iOS версии 8 и более поздних версий.
Инициализация
В CAF для платформы Cast требуется явный шаг инициализации. Это включает в себя инициализацию синглтона GCKCastContext
с использованием соответствующего GCKCastOptions
для указания идентификатора приложения веб-приемника и любых других глобальных параметров. Обычно это делается с помощью метода AppDelegate
-[application:didFinishLaunchingWithOptions:]
:
GCKCastOptions *options = [[GCKCastOptions alloc]
initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];
Этот шаг не был необходим в v2.
Обнаружение устройств
В CAF процесс обнаружения запускается и останавливается платформой автоматически, когда приложение переходит на передний план и переходит в фоновый режим соответственно. Классы GCKDeviceScanner
и GCKFilterCriteria
из версии 2 устарели и не должны использоваться.
Кнопка трансляции и диалоговое окно трансляции
В CAF кнопка и диалоговое окно Cast предоставляются платформой. Кнопку Cast можно создать и добавить на панель навигации следующим образом:
GCKUICastButton *castButton =
[[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithCustomView:castButton];
Кнопку Cast также можно добавить в раскадровку.
Когда кто-то нажимает кнопку, автоматически открывается диалоговое окно трансляции.
Управление устройством
В CAF управление устройствами в основном осуществляется платформой. Приложению отправителя не требуется обрабатывать подключение к устройству и запускать приложение веб-приемника. Класс GCKDeviceManager
версии 2 устарел и не должен использоваться. Взаимодействие между отправителем и веб-получателем теперь представлено как «сеанс». Класс CAF GCKSessionManager
управляет жизненным циклом сеанса и автоматически запускает и останавливает сеансы в ответ на жесты пользователя: сеанс запускается, когда пользователь выбирает устройство трансляции в диалоговом окне трансляции, и завершается, когда пользователь нажимает кнопку «Остановить трансляцию» в диалоговом окне трансляции. диалоговое окно или когда само приложение-отправитель завершает работу. Приложение-отправитель может быть уведомлено о событиях жизненного цикла сеанса, зарегистрировав GCKSessionManagerListener
с помощью GCKSessionManager
. Протокол GCKSessionManagerListener
определяет методы обратного вызова для всех событий жизненного цикла сеанса.
Класс GCKCastSession
представляет сеанс с устройством Cast. В классе есть методы для управления громкостью устройства и состояниями отключения звука, что ранее было сделано в версии 2 с использованием методов GCKDeviceManager
.
В версии 2 протокол GCKDeviceManagerDelegate
предоставлял уведомления об изменениях состояния устройства, включая громкость, состояние отключения звука, состояние ожидания и т. д. В CAF уведомления об изменении состояния громкости/отключения звука доставляются с помощью методов обратного вызова в протоколе GCKSessionManagerListener
; эти прослушиватели зарегистрированы в GCKSessionManager
. Все остальные уведомления о состоянии устройства доставляются через протокол GCKCastDeviceStatusListener
; эти прослушиватели зарегистрированы в GCKCastSession
.
Логика переподключения
Как и в версии 2, CAF пытается восстановить сетевые соединения, потерянные из-за временной потери сигнала Wi-Fi или других сетевых ошибок. Теперь это делается на уровне сеанса; сеанс может перейти в «приостановленное» состояние при потере соединения и вернуться в «подключенное» состояние при восстановлении соединения. Платформа заботится о повторном подключении к приложению веб-приемника и повторном подключении любых каналов Cast в рамках этого процесса.
Кроме того, CAF также добавляет автоматическое возобновление сеанса. Если приложение-отправитель отправляется в фоновый режим или завершается (перелистыванием или из-за сбоя) во время сеанса трансляции, платформа попытается возобновить этот сеанс, когда приложение-отправитель вернется на передний план или перезапустится. ; это автоматически обрабатывается GCKSessionManager
, который выдает соответствующие обратные вызовы для всех зарегистрированных экземпляров GCKSessionManagerListener
.
Регистрация пользовательского канала
В версии 2 пользовательские каналы (реализованные с использованием либо подкласса GCKCastChannel
, либо GCKGenericChannel
и делегата) регистрировались с помощью GCKDeviceManager
. В CAF пользовательские каналы вместо этого регистрируются с помощью экземпляра GCKCastSession
. Регистрация может быть выполнена в методе обратного вызова GCKSessionManagerListener
-[sessionManager:didStartCastSession:]
. Для мультимедийных приложений больше нет необходимости явно регистрировать GCKMediaControlChannel
; более подробную информацию см. в следующем разделе.
Контроль СМИ
Класс v2 GCKMediaControlChannel
устарел и не должен использоваться. В CAF он заменен новым классом GCKRemoteMediaClient
, который обеспечивает эквивалентную функциональность в более удобном API. Нет необходимости явно инициализировать или регистрировать этот объект; платформа автоматически создаст экземпляр объекта и зарегистрирует базовый медиа-канал во время начала сеанса, если подключаемое приложение веб-приемника поддерживает пространство имен мультимедиа.
Доступ GCKRemoteMediaClient
можно получить с помощью свойства -[remoteMediaClient]
объекта GCKCastSession
.
В версии 2 все медиа-запросы, отправленные через GCKMediaControlChannel
, возвращали числовой идентификатор запроса, а методы GCKMediaControlChannelDelegate
предоставляли этот идентификатор при отправке уведомлений о завершении или сбое запроса.
В CAF все медиа-запросы, отправленные в GCKRemoteMediaClient
, возвращают объект GCKRequest
; с этим объектом связан протокол GCKRequestDelegate
, который можно использовать для отслеживания хода выполнения и конечного результата запроса.
GCKMediaControlChannel
v2; будет отправлять уведомления об изменениях состояния медиаплеера на веб-приемнике через GCKMediaControlChannelDelegate
. В CAF GCKRemoteMediaClient
предоставляет эквивалентные обратные вызовы через свой протокол GCKRemoteMediaClientListener
. В GCKRemoteMediaClient
можно зарегистрировать любое количество прослушивателей, что позволяет нескольким компонентам-отправителям совместно использовать один экземпляр GCKRemoteMediaClient
, связанный с сеансом.
В версии 2 приложение-отправитель должно было взять на себя бремя синхронизации пользовательского интерфейса с состоянием медиаплеера на веб-приемнике. В CAF большую часть этой ответственности берет на себя класс GCKUIMediaController
; примеры использования этого компонента см. в учебной документации по кодовой лаборатории .
Вводное наложение
V2 не предоставляет вводного пользовательского интерфейса .
CAF добавляет класс GCKCastContext
с методом -[presentCastInstructionsViewControllerOnce]
, который приложение-отправитель может использовать для выделения кнопки трансляции, когда она впервые отображается пользователям.
Мини-контроллер
В версии 2 вам необходимо с нуля реализовать мини-контроллер в приложении-отправителе.
В CAF платформа предоставляет панель управления GCKUIMiniMediaControlsViewController
, которую можно добавить в сцены, где вы хотите отображать постоянные элементы управления. Есть два способа добавить мини-контроллер в приложение-отправитель:
Позвольте платформе Cast управлять макетом мини-контроллера, обернув существующий контроллер представления
GCKUICastContainerViewController
и добавивGCKUIMiniMediaControlsViewController
внизу его представления.Добавьте мини-контроллер непосредственно в существующий контроллер представления, используя
-[createMiniMediaControlsViewController]
для создания экземпляраGCKUIMiniMediaControlsViewController
, а затем добавив его в контроллер представления контейнера в качестве подпредставления.
Расширенный контроллер
В версии 2 вам необходимо с нуля реализовать расширенный контроллер в приложении-отправителе.
CAF добавляет GCKUIMediaController
, который можно использовать для более простой реализации расширенного контроллера.
CAF добавляет предварительно созданный расширенный виджет контроллера GCKUIExpandedMediaControlsViewController
, который вы можете просто добавить в свое приложение. Вам больше не нужно реализовывать собственный расширенный контроллер с помощью GCKUIMediaController
.
Ведение журнала отладки
Классы GCKLogger
и GCKLoggerDelegate
из версии 2 перенесены в CAF с некоторыми изменениями и улучшениями.
Метод GCKLoggerDelegate
-[logFromFunction:message:]
устарел в пользу -[logMessage:fromFunction:]
.
Сообщения журнала платформы теперь можно фильтровать, создав соответствующий экземпляр GCKLoggerFilter
и назначив его, установив свойство -[filter]
синглтона GCKLogger
.
Примеры приложений
Мы рекомендуем просмотреть лаборатории кода и примеры приложений , написанных для CAF.