El siguiente procedimiento te permite convertir tu app emisora para iOS desde el SDK de Cast v2 a CAF Sender, que se basa en el GCKCastContext singleton.
Introducción
- El emisor de CAF se sigue distribuyendo en la Sitio web para desarrolladores de Google Cast y CocoaPods, como v2.
- Se agregaron nuevas clases que asumen la responsabilidad de cumplir con la lista de tareas de diseño de Google Cast.
- El remitente de CAF proporciona widgets que cumplen con los requisitos de UX de Cast. v2 no proporcionaba ningún componente de IU y tuviste que implementar estos widgets.
- El diseño del emisor de CAF es coherente con el diseño del SDK de Cast de Android.
- CAF Sender admite códigos de bits, como v2.
- Los subtítulos en CAF son similares a los de la versión 2.
Dependencias
CAF Sender es compatible con iOS 8 y versiones posteriores.
Inicialización
En CAF, se requiere un paso de inicialización explícito para el framework de Cast. Esta
consiste en inicializar el
GCKCastContext
singleton con un atributo
GCKCastOptions
para especificar el ID de aplicación del receptor web y cualquier otra
opciones de estado. Esto suele hacerse en AppDelegate
Método -[application:didFinishLaunchingWithOptions:]
:
GCKCastOptions *options = [[GCKCastOptions alloc]
initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];
Este paso no era necesario en la versión 2.
Cómo detectar dispositivos
En CAF, el proceso de detección se inicia y se detiene automáticamente
cuando la app pasa a primer plano y a segundo plano,
respectivamente. Las clases GCKDeviceScanner
y GCKFilterCriteria
de la v2 son las siguientes:
que es obsoleta y no debe usarse.
Botón para transmitir y diálogo de transmisión
En CAF, el framework proporciona el botón para transmitir y el diálogo. El elenco de este botón y se los puede agregar a la barra de navegación de la siguiente manera:
GCKUICastButton *castButton =
[[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithCustomView:castButton];
El botón para transmitir también se puede agregar al guion gráfico.
Cuando alguien presione el botón, se mostrará automáticamente el diálogo para transmitir.
Control de dispositivos
En CAF, el control de dispositivos lo controla en gran medida el framework. El remitente
no necesita controlar la conexión al dispositivo ni el inicio del
Aplicación receptora web. La clase v2
GCKDeviceManager
está obsoleto y debería
no debe usarse. La interacción entre el remitente y el receptor web ahora se representa como un
"sesión". CAF
GCKSessionManager
controla el ciclo de vida de la sesión y
inicia y detiene automáticamente las sesiones en respuesta a los gestos del usuario: una sesión
Se inicia cuando el usuario selecciona un dispositivo de transmisión en el diálogo de transmisión y finaliza.
Cuando el usuario presiona "Detener transmisión" en el cuadro de diálogo de transmisión o cuando
app emisora. Se puede notificar a la aplicación emisora sobre la sesión
eventos de ciclo de vida registrando un
GCKSessionManagerListener
con el
GCKSessionManager
El
GCKSessionManagerListener
protocolo define métodos de devolución de llamada para todos los eventos de ciclo de vida de la sesión.
El
GCKCastSession
representa una sesión con un dispositivo de transmisión. La clase
tiene métodos para controlar el volumen y los estados de silencio del dispositivo, que se
realizado anteriormente en la v2 con métodos en
GCKDeviceManager
En la versión 2,
GCKDeviceManagerDelegate
notificaciones de cambios proporcionadas por el protocolo
con respecto al estado del dispositivo, incluidos el volumen, el estado silenciado y el modo en espera, entre otros.
En CAF, las notificaciones sobre cambios de volumen o silencio se envían mediante devolución de llamada
métodos en la
GCKSessionManagerListener
el protocolo; estos objetos de escucha se registran con el
GCKSessionManager
Todas las notificaciones restantes sobre el estado del dispositivo
entregado a través de un
GCKCastDeviceStatusListener
el protocolo; estos objetos de escucha se registran con el
GCKCastSession
Lógica de reconexión
Al igual que con v2, el CAF intenta restablecer las conexiones de red que se pierden debido a una pérdida temporal de la señal de Wi-Fi o a otros errores de red. Ahora es se realiza a nivel de sesión; una sesión puede entrar en estado "suspendido" cuando el estado se pierde la conexión y vuelve a cambiar a una conexión “conectada” para indicar cuándo se restablece la conectividad. El framework se encarga de volver a conectarse al Aplicación receptora web y volver a conectar cualquier canal de transmisión como parte de este proceso.
Además, el CAF también agrega la reanudación automática de sesión. Si el remitente
la aplicación se envía a segundo plano o se cierra (al deslizar o
debido a una falla) mientras haya una sesión de transmisión en curso, el framework
intenta reanudar esa sesión cuando la aplicación emisora vuelve a la
se muestra en primer plano o si se reinicia esto se controla automáticamente
GCKSessionManager
:
lo que generará las devoluciones de llamada correspondientes en cualquier
GCKSessionManagerListener
individuales.
Registro de canales personalizados
En la v2, los canales personalizados (implementados mediante un
GCKCastChannel
subclase o una
GCKGenericChannel
y delegado) se registraron con el
GCKDeviceManager
En CAF, los canales personalizados se registran
GCKCastSession
instancia. El registro puede hacerse en
GCKSessionManagerListener
-[sessionManager:didStartCastSession:]
de devolución de llamada. Para las aplicaciones de medios, ya no es necesario explícitamente
registra el
GCKMediaControlChannel
consulta la siguiente sección para obtener más detalles.
Control multimedia
La clase v2
GCKMediaControlChannel
está obsoleto y no debe usarse. En CAF, se sustituye por el nuevo
GCKRemoteMediaClient
que proporciona una funcionalidad equivalente en una API más conveniente.
No es necesario inicializar o registrar de manera explícita este objeto. el
framework creará automáticamente una instancia del objeto y registrará
canal de medios a la hora de inicio de la sesión si se conecta la aplicación del receptor web
admite el espacio de nombres de medios.
El
GCKRemoteMediaClient
en la que se puede acceder
-[remoteMediaClient]
propiedad del
GCKCastSession
.
En la v2, todas las solicitudes de contenido multimedia emitidas en el
GCKMediaControlChannel
devolverá un ID de solicitud numérico, y los métodos
GCKMediaControlChannelDelegate
proporcionará este ID cuando envíes notificaciones sobre la finalización de la solicitud o
falla.
En CAF, todas las solicitudes de contenido multimedia emitidas en el
GCKRemoteMediaClient
devolverá un
GCKRequest
object; este objeto tiene un
GCKRequestDelegate
protocolo
que puede usarse para hacer un seguimiento del progreso y el resultado final de la solicitud.
La v2
GCKMediaControlChannel
le enviaría notificaciones sobre los cambios en el estado del reproductor multimedia en el receptor web
mediante el
GCKMediaControlChannelDelegate
En CAF, el
GCKRemoteMediaClient
proporciona devoluciones de llamadas equivalentes a través de sus
GCKRemoteMediaClientListener
protocolo. Cualquier cantidad de objetos de escucha puede registrarse con el
GCKRemoteMediaClient
, que permite que varios componentes del remitente compartan el
única instancia de GCKRemoteMediaClient
asociada con la sesión.
En la v2, la aplicación emisora tenía que encargarse
de mantener al usuario
sincronizada con el estado del reproductor multimedia en el receptor web. En CAF, la clase
GCKUIMediaController
asume la mayor parte de esta responsabilidad; consulta la
instructivo del codelab
en la documentación
para ver ejemplos de uso de este componente.
Superposición introductoria
V2 no proporciona IU de superposición introductoria.
CAF agrega la clase
GCKCastContext
con un método
-[presentCastInstructionsViewControllerOnce]
que una app emisora puede usar para destacar el botón para transmitir cuando se muestra por primera vez
para los usuarios.
Minicontrolador
En la v2, debes implementar un minicontrolador desde cero en el app del remitente.
En CAF, el framework proporciona una barra de control,
GCKUIMiniMediaControlsViewController
:
que puedes agregar a las escenas en las que quieres mostrar el estado
controles de seguridad. Hay dos formas de agregar el minicontrolador a una app emisora:
Deja que el framework de Cast administre el diseño del minicontrol uniendo tu controlador de vistas existente con el
GCKUICastContainerViewController
y agregar unaGCKUIMiniMediaControlsViewController
en la parte inferior de su vista.Agrega el minicontrolador directamente a tu controlador de vistas existente con
-[createMiniMediaControlsViewController]
para crear unGCKUIMiniMediaControlsViewController
y, luego, agregarla al controlador de vista del contenedor como una subvista.
Control expandido
En la v2, debes implementar un control expandido desde cero en la app emisora.
Incorporaciones de CAF
GCKUIMediaController
:
que podrías usar para implementar más fácilmente un control expandido.
CAF agrega un widget de controlador expandido previamente compilado
GCKUIExpandedMediaControlsViewController
que puedes agregar a tu app fácilmente. Ya no es necesario implementar una campaña
controlador con GCKUIMediaController
.
Registro de depuración
El
GCKLogger
y
GCKLoggerDelegate
de la v2 se transfieren a CAF, con algunos cambios y mejoras.
El
GCKLoggerDelegate
El método -[logFromFunction:message:]
tiene
dejó de estar disponible y se reemplazó por
-[logMessage:fromFunction:]
Los mensajes de registro del framework ahora se pueden filtrar construyendo un
GCKLoggerFilter
y asignarla estableciendo la
propiedad -[filter]
de
singleton GCKLogger
Apps de ejemplo
Te recomendamos que consultes los codelabs y apps de ejemplo escritas para CAF.