Migra la app emisora de iOS desde el SDK de Cast v2 al framework de aplicaciones (CAF) de Cast

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:

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.