Esegui la migrazione dell'app Mittente iOS da Cast SDK v2 al Cast Application Framework (CAF)

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:

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.