Следующая процедура позволяет преобразовать приложение отправителя iOS из Cast SDK v2 в отправитель CAF, основанный на синглтоне GCKCastContext .
Введение
- CAF Sender по-прежнему распространяется на сайте разработчика Google Cast и CocoaPods , например v2.
- Добавлены новые классы, которые несут ответственность за соблюдение контрольного списка дизайна Google Cast.
- CAF Sender предоставляет виджеты, соответствующие требованиям Cast UX; v2 не предоставлял никаких компонентов пользовательского интерфейса и требовал, чтобы вы реализовали эти виджеты.
- Дизайн CAF Sender соответствует дизайну Cast Android SDK.
- CAF Sender поддерживает биткод, например v2.
- Скрытые титры в CAF аналогичны v2.
Зависимости
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 также можно добавить в раскадровку.
Когда кто-то нажимает кнопку, автоматически открывается диалоговое окно Cast.
Управление устройством
В CAF управление устройствами в основном осуществляется инфраструктурой. Приложению-отправителю не нужно обрабатывать подключение к устройству и запуск приложения Web Receiver. Класс v2 GCKDeviceManager
устарел и не должен использоваться. Взаимодействие между отправителем и веб-получателем теперь представлено как «сеанс». Класс CAF GCKSessionManager
управляет жизненным циклом сеанса и автоматически запускает и останавливает сеансы в ответ на жесты пользователя: сеанс начинается, когда пользователь выбирает устройство трансляции в диалоговом окне трансляции, и завершается, когда пользователь нажимает кнопку «Остановить трансляцию» в диалоговом окне трансляции. или когда само приложение-отправитель завершает работу. Приложение-отправитель может быть уведомлено о событиях жизненного цикла сеанса путем регистрации GCKSessionManagerListener
с помощью GCKSessionManager
. Протокол GCKSessionManagerListener
определяет методы обратного вызова для всех событий жизненного цикла сеанса.
Класс GCKCastSession
представляет сеанс с устройством Cast. В классе есть методы для управления громкостью устройства и состояниями отключения звука, что ранее делалось в версии 2 с помощью методов GCKDeviceManager
.
В версии 2 протокол GCKDeviceManagerDelegate
предоставлял уведомления об изменениях состояния устройства, включая громкость, состояние отключения звука, состояние ожидания и т. д. В CAF уведомления об изменении состояния громкости/отключения звука доставляются с помощью методов обратного вызова в протоколе GCKSessionManagerListener
; эти слушатели зарегистрированы в GCKSessionManager
. Все остальные уведомления о состоянии устройства доставляются по протоколу GCKCastDeviceStatusListener
; эти слушатели зарегистрированы в GCKCastSession
.
Логика повторного подключения
Как и в версии 2, CAF пытается восстановить сетевые подключения, потерянные из-за временной потери сигнала WiFi или других сетевых ошибок. Теперь это делается на уровне сеанса; сеанс может войти в состояние «приостановлено», когда соединение потеряно, и вернется в состояние «подключено», когда соединение будет восстановлено. Платформа заботится о повторном подключении к приложению Web Receiver и повторном подключении любых каналов Cast как часть этого процесса.
Кроме того, CAF также добавляет автоматическое возобновление сеанса. Если приложение-отправитель переводится в фоновый режим или завершается (пролистыванием или из-за сбоя) во время сеанса Cast, инфраструктура попытается возобновить этот сеанс, когда приложение-отправитель вернется на передний план или перезапустится. ; это автоматически обрабатывается GCKSessionManager
, который выдает соответствующие обратные вызовы для любых зарегистрированных экземпляров GCKSessionManagerListener
.
Регистрация пользовательского канала
В v2 пользовательские каналы (реализованные с помощью подкласса GCKCastChannel
или GCKGenericChannel
и делегата) были зарегистрированы с помощью GCKDeviceManager
. Вместо этого в CAF пользовательские каналы регистрируются в экземпляре GCKCastSession
. Регистрация может быть выполнена в методе обратного вызова GCKSessionManagerListener
-[sessionManager:didStartCastSession:]
. Для мультимедийных приложений больше нет необходимости явно регистрировать GCKMediaControlChannel
; см. следующий раздел для более подробной информации.
Медиа-контроль
Класс v2 GCKMediaControlChannel
устарел и не должен использоваться. В CAF он заменен новым классом GCKRemoteMediaClient
, который обеспечивает эквивалентную функциональность в более удобном API. Нет необходимости явно инициализировать или регистрировать этот объект; платформа автоматически создаст экземпляр объекта и зарегистрирует базовый медиаканал во время начала сеанса, если подключаемое приложение веб-приемника поддерживает пространство имен мультимедиа.
Доступ к GCKRemoteMediaClient
можно получить с помощью свойства -[remoteMediaClient]
объекта GCKCastSession
.
В v2 все медиа-запросы, отправленные в GCKMediaControlChannel
, будут возвращать числовой идентификатор запроса, а методы в GCKMediaControlChannelDelegate
будут предоставлять этот идентификатор при отправке уведомлений о выполнении или сбое запроса.
В CAF все запросы мультимедиа, отправленные на GCKRemoteMediaClient
, будут возвращать объект GCKRequest
; этот объект имеет связанный протокол GCKRequestDelegate
, который можно использовать для отслеживания хода выполнения и возможного результата запроса.
GCKMediaControlChannel
v2 ; будет отправлять уведомления об изменениях в состоянии медиаплеера на веб-приемнике через GCKMediaControlChannelDelegate
. В CAF GCKRemoteMediaClient
предоставляет эквивалентные обратные вызовы через свой протокол GCKRemoteMediaClientListener
. Любое количество слушателей может быть зарегистрировано с помощью GCKRemoteMediaClient
, что позволяет нескольким компонентам-отправителям совместно использовать один экземпляр GCKRemoteMediaClient
, связанный с сеансом.
В версии 2 приложение-отправитель должно было взять на себя бремя синхронизации пользовательского интерфейса с состоянием медиаплеера в веб-приемнике. В CAF класс GCKUIMediaController
берет на себя большую часть этой ответственности; см . учебную документацию codelab для примеров того, как использовать этот компонент.
Вводный оверлей
Версия 2 не предоставляет вводного пользовательского интерфейса .
CAF добавляет класс GCKCastContext
с методом -[presentCastInstructionsViewControllerOnce]
, который приложение-отправитель может использовать для выделения кнопки Cast, когда она впервые отображается пользователям.
Мини-контроллер
В версии 2 вам необходимо реализовать мини-контроллер с нуля в приложении-отправителе.
В CAF платформа предоставляет панель управления GCKUIMiniMediaControlsViewController
, которую можно добавить в сцены, где вы хотите отображать постоянные элементы управления. Есть два способа добавить мини-контроллер в приложение-отправитель:
Позвольте инфраструктуре Cast управлять макетом мини-контроллера, обернув существующий контроллер представления
GCKUICastContainerViewController
и добавивGCKUIMiniMediaControlsViewController
внизу его представления.Добавьте мини-контроллер непосредственно в существующий контроллер представления, используя
-[createMiniMediaControlsViewController]
для создания экземпляраGCKUIMiniMediaControlsViewController
, а затем добавив его в контроллер представления контейнера в качестве подпредставления.
Расширенный контроллер
В v2 вам необходимо реализовать расширенный контроллер с нуля в приложении-отправителе.
CAF добавляет GCKUIMediaController
, который можно использовать для более простой реализации расширенного контроллера.
CAF добавляет предварительно созданный виджет расширенного контроллера GCKUIExpandedMediaControlsViewController
, который вы можете просто добавить в свое приложение. Вам больше не нужно реализовывать собственный расширенный контроллер с помощью GCKUIMediaController
.
Журнала отладки
GCKLogger
и GCKLoggerDelegate
из версии 2 переносятся в CAF с некоторыми изменениями и улучшениями.
Метод GCKLoggerDelegate
-[logFromFunction:message:]
устарел в пользу -[logMessage:fromFunction:]
.
Сообщения журнала Framework теперь можно фильтровать, создавая соответствующий экземпляр GCKLoggerFilter
и назначая его, устанавливая свойство -[filter]
синглтона GCKLogger
.
Примеры приложений
Мы рекомендуем ознакомиться с лабораториями кода и примерами приложений, написанных для CAF.