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:
Permita que o framework do Google Cast gerencie o layout do minicontrole encapsulando seu controlador de visualizações existente com o
GCKUICastContainerViewController
e adicionar umGCKUIMiniMediaControlsViewController
na parte inferior de sua visualização.Adicione o minicontrole diretamente a seu controlador de visualização existente usando o
-[createMiniMediaControlsViewController]
para criarGCKUIMiniMediaControlsViewController
e adicioná-la ao controlador de visualizações do contêiner como uma subvisualização.
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.