Migrar o app remetente do iOS do SDK do Cast v2 para o framework do aplicativo Cast (CAF, na sigla em inglês)

O procedimento a seguir permite converter o app remetente do iOS do SDK do Cast v2 para o remetente CAF, que é baseado no GCKCastContext singleton.

Introdução

  • O remetente CAF ainda é distribuído no Site do desenvolvedor do Google Cast e CocoaPods, como v2.
  • Foram adicionadas novas classes que assumem a responsabilidade de obedecer a lista de verificação de design do Google Cast.
  • O CAF Sender fornece widgets que obedecem aos requisitos do Cast UX. v2 não fornece nenhum componente de IU e exigia a implementação esses widgets.
  • O design do remetente do CAF é consistente com o do SDK do Cast para Android.
  • O remetente CAF oferece suporte a Bitcode, como v2.
  • As legendas descritivas no CAF são semelhantes à v2.

Dependências

O CAF Sender é compatível com o iOS versão 8 e mais recente.

Inicialização

No CAF, uma etapa de inicialização explícita é necessária para o framework do Cast. Isso envolve a inicialização da GCKCastContext Singleton, usando uma GCKCastOptions para especificar o ID do aplicativo do receptor da Web e quaisquer outras . Isso geralmente é feito no AppDelegate Método -[application:didFinishLaunchingWithOptions:]:

GCKCastOptions *options = [[GCKCastOptions alloc]
    initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];

Essa etapa não era necessária na v2.

Descoberta de dispositivos

No CAF, o processo de descoberta é iniciado e interrompido automaticamente pelo quando o app vai para o primeiro plano e vai para o segundo plano, respectivamente. As classes GCKDeviceScanner e GCKFilterCriteria da v2 são descontinuada e não deve ser usada.

Botão "Transmitir" e caixa de diálogo "Transmitir"

No CAF, o botão Transmitir e a caixa de diálogo são fornecidos pelo framework. O elenco botão pode ser instanciado e adicionado à barra de navegação da seguinte forma:

GCKUICastButton *castButton =
    [[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
    [[UIBarButtonItem alloc] initWithCustomView:castButton];

O botão Transmitir também pode ser adicionado ao storyboard.

Quando alguém toca no botão, a caixa de diálogo "Transmitir" aparece automaticamente.

Controle do dispositivo

No CAF, o controle do dispositivo é principalmente processado pelo framework. O remetente aplicativo não precisa lidar com a conexão com o dispositivo e a inicialização do aplicativo receptor da Web. A classe v2 GCKDeviceManager foi descontinuada e deve não pode ser usado. A interação entre o remetente e o receptor da Web agora é representada como um "sessão". O CAF GCKSessionManager processa o ciclo de vida da sessão e inicia e interrompe automaticamente sessões em resposta a gestos do usuário: uma sessão é iniciado quando o usuário seleciona um dispositivo de transmissão na caixa de diálogo "Transmitir" e é encerrado quando o usuário toca em "Parar transmissão" na caixa de diálogo "Transmitir" ou quando o o app do remetente é encerrado. O aplicativo remetente pode ser notificado sobre a sessão eventos de ciclo de vida registrando um GCKSessionManagerListener com o GCKSessionManager A GCKSessionManagerListener define métodos de callback para todos os eventos de ciclo de vida da sessão.

A GCKCastSession representa uma sessão com um dispositivo de transmissão. A classe tem métodos para controlar o volume do dispositivo e os estados de desativação de som, o que anteriormente na v2 usando métodos GCKDeviceManager

Na v2, o GCKDeviceManagerDelegate notificações de alterações fornecidas por protocolo ao estado do dispositivo, incluindo o volume, o estado silenciado, o status de espera etc. No CAF, as notificações de mudança de estado de volume/silenciar são entregues por callback na classe GCKSessionManagerListener protocolo esses listeners são registrados GCKSessionManager Todas as notificações de estado do dispositivo restantes exibidas por meio de GCKCastDeviceStatusListener protocolo esses listeners são registrados GCKCastSession

Lógica de reconexão

Assim como na v2, o CAF tenta restabelecer conexões de rede que forem perdidos devido à perda temporária do sinal Wi-Fi ou a outros erros de rede. Isso agora é no nível da sessão. uma sessão pode entrar em um estado "suspenso" quando for perdida e voltará para a conta "conectado" quando a conectividade for restaurada. O framework faz a reconexão Receptor da Web e reconexão de qualquer canal de transmissão como parte desse processo.

Além disso, o CAF também adiciona a retomada automática da sessão. Se o remetente aplicativo seja enviado para o segundo plano ou encerrado (deslizando a tela ou devido a uma falha) enquanto uma sessão de transmissão está em andamento, o framework tentará retomar a sessão quando o aplicativo remetente retornar ao primeiro plano ou for reiniciado; isso é tratado automaticamente GCKSessionManager, que emitirá as chamadas de retorno apropriadas em todas as instâncias GCKSessionManagerListener instâncias.

Registro de canal personalizado

Na v2, os canais personalizados (implementados usando um GCKCastChannel subclasse ou uma GCKGenericChannel e delegado) foram registrados no GCKDeviceManager. No CAF, os canais personalizados são registrados no GCKCastSession instância. O registro pode ser feito GCKSessionManagerListener -[sessionManager:didStartCastSession:] método de callback. Para aplicativos de mídia, não é mais necessário registrar o GCKMediaControlChannel consulte a próxima seção para mais detalhes.

Controle de mídia

A classe v2 GCKMediaControlChannel foi descontinuado e não deve ser usado. No CAF, ele foi substituído pelo novo GCKRemoteMediaClient , que oferece funcionalidade equivalente em uma API mais conveniente. Não é necessário inicializar ou registrar explicitamente esse objeto. as o framework instancia automaticamente o objeto e registra os canal de mídia no horário de início da sessão se o aplicativo receptor da Web que está sendo conectado oferece suporte ao namespace de mídia.

A GCKRemoteMediaClient podem ser acessados com o -[remoteMediaClient] do elemento GCKCastSession objeto.

Na v2, todas as solicitações de mídia emitidas no GCKMediaControlChannel retornaria um ID de solicitação numérico, e os métodos do GCKMediaControlChannelDelegate forneceria esse ID ao enviar notificações sobre a conclusão da solicitação ou falha.

No CAF, todas as solicitações de mídia emitidas no GCKRemoteMediaClient vai retornar GCKRequest object; este objeto tem uma associação GCKRequestDelegate protocolo que pode ser usado para acompanhar o progresso e o resultado da solicitação.

A v2 GCKMediaControlChannel enviaria notificações sobre mudanças no estado do player de mídia no receptor por meio do GCKMediaControlChannelDelegate No CAF, a GCKRemoteMediaClient fornece callbacks equivalentes por meio de seu GCKRemoteMediaClientListener protocolo. Qualquer número de listeners pode ser registrado com o GCKRemoteMediaClient, que permite que vários componentes do remetente compartilhem o única instância de GCKRemoteMediaClient associada à sessão.

Na v2, o aplicativo remetente precisava manter o usuário responsável em sincronia com o estado do player de mídia no receptor da Web. No CAF, a classe GCKUIMediaController assume a maior parte dessa responsabilidade. consulte tutorial do codelab documentação para exemplos de como usar esse componente.

Sobreposição introdutória

A V2 não fornece um interface de sobreposição introdutória.

O CAF adiciona uma classe GCKCastContext com um método -[presentCastInstructionsViewControllerOnce] que um app remetente pode usar para destacar o botão Transmitir quando ele for exibido pela primeira vez aos usuários.

Minicontrole

Na v2, você precisa implementar um minicontrole do zero no app remetente.

No CAF, o framework fornece uma barra de controle, GCKUIMiniMediaControlsViewController, que pode ser adicionada às cenas em que você quer mostrar controles de segurança. Há duas maneiras de adicionar o minicontrole a um app remetente:

Controle expandido

Na v2, você precisa implementar um controle expandido do zero em app remetente.

Adições do CAF GCKUIMediaController, que você pode usar para implementar mais facilmente um controle expandido.

O CAF adiciona um widget de controle expandido pré-criado GCKUIExpandedMediaControlsViewController que você pode simplesmente adicionar ao seu aplicativo. Não é mais necessário implementar usando GCKUIMediaController.

Registros de depuração

A GCKLogger e GCKLoggerDelegate As classes da v2 são transferidas para o CAF, com algumas mudanças e melhorias.

A GCKLoggerDelegate O método -[logFromFunction:message:] tem foi descontinuada e trocada por -[logMessage:fromFunction:].

As mensagens de registro do framework agora podem ser filtradas com a criação de um GCKLoggerFilter instância e atribuindo-a definindo o -[filter] do Singleton de GCKLogger.

Apps de exemplo

Recomendamos consultar a codelabs e apps de exemplo (link em inglês) escritos para CAF.