La seguente procedura consente di convertire l'app del mittente iOS dall'SDK Cast v2 in Mittente CAF, basato sul singleton GCKCastContext.
Introduzione
- Mittente CAF è ancora distribuito sul sito web dello sviluppatore di Google Cast e su CocoaPods, come v2.
- Sono stati aggiunti nuovi corsi che si occupano della conformità con l'elenco di controllo per la progettazione di Google Cast.
- Mittente CAF fornisce widget conformi ai requisiti di Cast UX; la versione 2 non ha fornito alcun componente dell'interfaccia utente, pertanto è necessario implementarli.
- La progettazione del mittente CAF è coerente con la progettazione dell'SDK Cast Android.
- Mittente CAF supporta Bitcode, ad esempio v2.
- I sottotitoli codificati in CAF sono simili alla versione 2.
Dipendenze
Mittente CAF supporta iOS 8 e versioni successive.
Inizializzazione
In CAF è necessario un passaggio di inizializzazione esplicito per il framework di trasmissione. Questo comporta l'inizializzazione del singleton di GCKCastContext
, utilizzando un elemento GCKCastOptions
appropriato per specificare l'ID applicazione del ricevitore web e qualsiasi altra opzione globale. In genere, questa operazione viene eseguita nel metodo AppDelegate
-[application:didFinishLaunchingWithOptions:]
:
GCKCastOptions *options = [[GCKCastOptions alloc]
initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];
Questo passaggio non era necessario nella versione 2.
Rilevamento dispositivi
In CAF, il processo di rilevamento viene avviato e interrotto automaticamente dal framework quando l'app viene in primo piano e passa in background, rispettivamente. Le classi GCKDeviceScanner
e GCKFilterCriteria
della versione 2 sono deprecate e non devono essere utilizzate.
Pulsante Trasmetti e finestra di dialogo Trasmetti
In CAF, il pulsante e la finestra di dialogo Trasmetti sono forniti dal framework. È possibile creare un'istanza di questo pulsante e aggiungerla alla barra di navigazione come segue:
GCKUICastButton *castButton =
[[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithCustomView:castButton];
È anche possibile aggiungere il pulsante Trasmetti allo storyboard.
Quando qualcuno tocca il pulsante, si apre automaticamente la finestra di dialogo Trasmetti.
Controllo dei dispositivi
In CAF, il controllo dei dispositivi viene gestito principalmente dal framework. L'applicazione del mittente non deve gestire la connessione al dispositivo e avviare l'applicazione Ricevitore web. La classe v2
GCKDeviceManager
è deprecata e non deve essere utilizzata. L'interazione tra mittente e Ricevitore web è ora rappresentata come una "sessione". La classe CAF GCKSessionManager
gestisce il ciclo di vita della sessione e avvia e interrompe automaticamente le sessioni in risposta ai gesti dell'utente: una sessione viene avviata quando l'utente seleziona un dispositivo di trasmissione nella finestra di dialogo Trasmetti e termina quando l'utente tocca il pulsante "Interrompi trasmissione" nella finestra di dialogo Trasmetti o quando termina l'app mittente. L'applicazione del mittente può essere informata degli eventi del ciclo di vita delle sessioni registrando un GCKSessionManagerListener
con GCKSessionManager
.
Il protocollo GCKSessionManagerListener
definisce i metodi di callback per tutti gli eventi del ciclo di vita delle sessioni.
La classe GCKCastSession
rappresenta una sessione con un dispositivo di trasmissione. La classe ha metodi per controllare il volume del dispositivo e gli stati di disattivazione, che in precedenza erano stati eseguiti in v2 utilizzando i metodi su GCKDeviceManager
.
Nella versione 2, il protocollo GCKDeviceManagerDelegate
ha fornito notifiche sulle modifiche allo stato del dispositivo, tra cui volume, stato di disattivazione, stato di standby e così via.
In CAF, le notifiche di modifica del volume/disattivazione dello stato vengono inviate tramite metodi di callback nel protocollo GCKSessionManagerListener
; questi ascoltatori vengono registrati con GCKSessionManager
.
Tutte le notifiche sullo stato del dispositivo rimanenti vengono
inviate tramite un protocollo
GCKCastDeviceStatusListener
e questi ascoltatori vengono registrati con
GCKCastSession
.
Logica di riconnessione
Come per la versione 2, il CAF tenta di ristabilire le connessioni di rete perse a causa di una perdita temporanea di segnale Wi-Fi o di altri errori di rete. Questa operazione viene ora eseguita a livello di sessione; una sessione può entrare in uno stato "sospeso" quando la connessione viene interrotta e tornare a uno stato "connesso" quando viene ripristinata la connettività. Il framework si connette al collegamento all'applicazione Web Receiver e alla riconnessione di tutti i canali di trasmissione nell'ambito di questo processo.
Inoltre, CAF aggiunge anche la ripresa automatica delle sessioni. Se l'applicazione del mittente viene inviata in background o viene terminata (a scorrimento verso l'esterno o a causa di un arresto anomalo) mentre è in corso una sessione di trasmissione, il framework tenterà di riprenderla quando l'applicazione del mittente torna in primo piano o viene riavviata; questo viene gestito automaticamente dal GCKSessionManager
, che emetterà i callback appropriati su qualsiasi istanza GCKSessionManagerListener
registrata.
Registrazione personalizzata del canale
Nella versione 2, i canali personalizzati (implementati utilizzando una sottoclasse di GCKCastChannel
o un delegato GCKGenericChannel
e delegati) sono stati registrati presso GCKDeviceManager
.
In CAF, i canali personalizzati vengono registrati nell'istanza GCKCastSession
. La registrazione può essere effettuata nel metodo di callback
GCKSessionManagerListener
-[sessionManager:didStartCastSession:]
. Per le applicazioni multimediali, non è più necessario registrare esplicitamente GCKMediaControlChannel
. Per ulteriori dettagli, consulta la sezione seguente.
Controllo dei contenuti multimediali
La classe v2
GCKMediaControlChannel
è deprecata e non deve essere utilizzata. In CAF, viene sostituito dalla nuova classe GCKRemoteMediaClient
, che fornisce funzionalità equivalenti in un'API più comoda.
Non è necessario inizializzare o registrare esplicitamente questo oggetto; il framework crea automaticamente l'istanza dell'oggetto e registra il canale multimediale sottostante all'ora di inizio della sessione se l'applicazione Web Receiver connessa a Internet supporta lo spazio dei nomi dei contenuti multimediali.
È possibile accedere a GCKRemoteMediaClient
con la proprietà -[remoteMediaClient]
dell'oggetto GCKCastSession
.
Nella versione 2, tutte le richieste multimediali inviate a
GCKMediaControlChannel
restituiscono un ID richiesta numerico, mentre i metodi su
GCKMediaControlChannelDelegate
forniscono questo ID quando vengono inviate notifiche relative al completamento o alla mancata riuscita della richiesta.
In CAF, tutte le richieste multimediali inviate nell'oggetto GCKRemoteMediaClient
restituiranno un oggetto GCKRequest
; questo oggetto ha un protocollo GCKRequestDelegate
associato, che può essere utilizzato per monitorare l'avanzamento e l'eventuale risultato della richiesta.
La v2
GCKMediaControlChannel
;
invia notifiche relative alle modifiche nello stato del media player sul Ricevitore web
tramite
GCKMediaControlChannelDelegate
.
In CAF, GCKRemoteMediaClient
fornisce callback equivalenti tramite il protocollo GCKRemoteMediaClientListener
. È possibile registrare un numero qualsiasi di ascoltatori con GCKRemoteMediaClient
, che consente a più componenti mittenti di condividere la singola istanza di GCKRemoteMediaClient
associata alla sessione.
Nella versione 2, l'applicazione del mittente ha dovuto assumersi il carico di mantenere l'interfaccia utente sincronizzata con lo stato del lettore multimediale sul ricevitore Web. In CAF, la classe
GCKUIMediaController
si assume la maggior parte di questa responsabilità; consulta la documentazione del
tutorial codelab
per esempi su come utilizzare questo componente.
Overlay introduttivo
La versione 2 non fornisce un'UI di overlay introduttiva.
CAF aggiunge la classe
GCKCastContext
con un metodo
-[presentCastInstructionsViewControllerOnce]
che un'app del mittente può utilizzare per evidenziare il pulsante Trasmetti quando viene mostrato per la prima
volta agli utenti.
Mini controller
Nella versione 2 devi implementare un controller da zero nell'app del mittente.
In CAF, il framework fornisce una barra di controllo, GCKUIMiniMediaControlsViewController
, che puoi aggiungere alle scene in cui vuoi mostrare i controlli permanenti. Esistono due modi per aggiungere il mini controller a un'app di invio:
Lascia che il framework Cast gestisca il layout del mini controller aggiungendo
GCKUICastContainerViewController
il controller di visualizzazione esistente e aggiungendoGCKUIMiniMediaControlsViewController
nella parte inferiore della vista.Aggiungi il mini controller direttamente al controller di visualizzazione esistente utilizzando
-[createMiniMediaControlsViewController]
per creare un'istanzaGCKUIMiniMediaControlsViewController
e aggiungendola al controller della vista container come visualizzazione secondaria.
Controller espanso
Nella versione 2, devi implementare un controller espanso da zero nell'app del mittente.
CAF aggiunge
GCKUIMediaController
,
che puoi utilizzare per implementare più facilmente un controller espanso.
CAF aggiunge un widget controller espanso predefinito
GCKUIExpandedMediaControlsViewController
che puoi semplicemente aggiungere alla tua app. Non devi più implementare un controller espanso personalizzato
utilizzando GCKUIMediaController
.
Logging del debug
Le classi GCKLogger
e GCKLoggerDelegate
di v2 vengono trasferite in CAF, con alcune modifiche e miglioramenti.
Il metodo GCKLoggerDelegate
-[logFromFunction:message:]
è stato ritirato a favore di -[logMessage:fromFunction:]
.
Ora i messaggi di log del framework possono essere filtrati creando un'istanza GCKLoggerFilter
appropriata e assegnandola impostando la proprietà -[filter]
del singleton GCKLogger
.
Esempi di app
Consigliamo di esaminare i codelab e le app di esempio scritte per il CAF.