Esegui la migrazione dell'app mittente per iOS da Cast SDK v2 a Cast Application Framework (CAF)

La seguente procedura ti consente di convertire l'app mittente iOS dall'SDK Cast v2 al mittente CAF, basato sulla GCKCastContext singleton.

Introduzione

  • Il mittente CAF è ancora distribuito sito web per sviluppatori Google Cast e CocoaPods, ad esempio v2.
  • Sono stati aggiunti nuovi corsi che si assumono la responsabilità di rispettare l'elenco di controllo per la progettazione di Google Cast.
  • CAF Sender fornisce widget conformi ai requisiti di Cast UX. v2 non forniva componenti dell'interfaccia utente e richiedeva l'implementazione questi widget.
  • Il design di CAF Sender è coerente con il design dell'SDK Cast Android.
  • Il mittente CAF supporta il formato bitcode, come la versione 2.
  • Il sottotitolaggio codificato in CAF è simile alla versione 2.

Dipendenze

CAF Sender supporta iOS 8 e versioni successive.

Inizializzazione

In CAF, è richiesto un passaggio di inizializzazione esplicito per il framework Cast. Questo comporta l'inizializzazione GCKCastContext singleton, utilizzando un'appropriata GCKCastOptions per specificare l'ID applicazione Web ricevitore e qualsiasi altro le opzioni di CPU e memoria disponibili. Questa operazione viene solitamente eseguita in AppDelegate Metodo -[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 arrestato automaticamente dal quando l'app passa in primo piano e passa in background, rispettivamente. Le classi GCKDeviceScanner e GCKFilterCriteria della versione 2 sono è deprecato e non deve essere utilizzato.

Pulsante Trasmetti e finestra di dialogo Trasmetti

Nel CAF, il pulsante Trasmetti e la finestra di dialogo sono forniti dal framework. Cast per creare un'istanza e aggiungerlo alla barra di navigazione in questo modo:

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

Il pulsante Trasmetti può essere aggiunto anche allo storyboard.

Quando qualcuno tocca il pulsante, viene visualizzata automaticamente la finestra di dialogo Trasmetti.

Controllo del dispositivo

In CAF, il controllo dei dispositivi è gestito in gran parte dal framework. Il mittente non ha bisogno di gestire la connessione al dispositivo e l'avvio Applicazione WebRicevitore. Il corso v2 GCKDeviceManager è deprecato e dovrebbe non possono essere utilizzate. L'interazione tra mittente e destinatario web è ora rappresentata come "sessione". Il CAF GCKSessionManager gestisce il ciclo di vita delle sessioni avvia e interrompe automaticamente le sessioni in risposta ai gesti dell'utente: una sessione L'avvio viene avviato quando l'utente seleziona un dispositivo di trasmissione nella finestra di dialogo Trasmetti e viene terminato Quando l'utente tocca l'opzione "Interrompi trasmissione". nella finestra di dialogo Trasmetti o quando dall'app mittente. L'applicazione del mittente può ricevere una notifica degli eventi del ciclo di vita registrando un GCKSessionManagerListener con GCKSessionManager. La GCKSessionManagerListener definisce i metodi di callback per tutti gli eventi del ciclo di vita delle sessioni.

La GCKCastSession rappresenta una sessione con un dispositivo di trasmissione. Il corso offre metodi per controllare il volume del dispositivo e gli stati di disattivazione dell'audio, che erano fatto in precedenza nella versione 2 con metodi GCKDeviceManager

Nella versione 2, GCKDeviceManagerDelegate notifiche delle modifiche fornite dal protocollo allo stato del dispositivo, compresi volume, stato di disattivazione audio, stato di standby e così via. Nel CAF, le notifiche relative al cambio di stato/volume/audio vengono inviate tramite callback in GCKSessionManagerListener protocollo; questi listener sono registrati con GCKSessionManager. Tutte le altre notifiche sullo stato del dispositivo tramite un GCKCastDeviceStatusListener protocollo; questi listener sono registrati con GCKCastSession.

Logica di riconnessione

Come nella versione 2, CAF tenta di ristabilire le connessioni di rete persi a causa di una perdita temporanea del segnale Wi-Fi o di altri errori di rete. Questo è a livello di sessione; una sessione può inserire uno stato "sospesa" quando la connessione si interrompe e tornerà allo stato "connesso" stato quando e la connettività viene ripristinata. Il framework si occupa di riconnettersi Web Ricevitore e la riconnessione di eventuali canali di trasmissione nell'ambito di questa procedura.

Inoltre, CAF aggiunge anche la ripresa automatica delle sessioni. Se il mittente l'applicazione viene inviata in background o terminata (scorrimento all'esterno o a causa di un arresto anomalo) mentre è in corso una sessione di trasmissione, il framework e tentare di riprendere la sessione quando l'applicazione del mittente torna in primo piano o riavviati; questa operazione viene gestita automaticamente GCKSessionManager, che emetterà i callback appropriati su qualsiasi registrato GCKSessionManagerListener di Compute Engine.

Registrazione a canali personalizzati

Nella versione 2, i canali personalizzati (implementati mediante un GCKCastChannel o una sottoclasse GCKGenericChannel e delegato) sono stati registrati presso GCKDeviceManager Nel CAF, i canali personalizzati vengono invece registrati con GCKCastSession in esecuzione in un'istanza Compute Engine. La registrazione può essere effettuata nella GCKSessionManagerListener -[sessionManager:didStartCastSession:] di callback di Google. Per le applicazioni multimediali, non è più necessario specificare registra il GCKMediaControlChannel consulta la sezione che segue per ulteriori dettagli.

Controllo dei contenuti multimediali

Il corso v2 GCKMediaControlChannel è deprecato e non deve essere utilizzato. In CAF, viene sostituito dal nuovo GCKRemoteMediaClient , che fornisce funzionalità equivalenti in un'API più comoda. Non è necessario inizializzare o registrare esplicitamente questo oggetto. il il framework creerà automaticamente un'istanza dell'oggetto e registrerà i dati sottostanti canale multimediale all'ora di inizio della sessione se l'applicazione WebRicevitore viene connessa lo spazio dei nomi dei media.

La GCKRemoteMediaClient è accessibile con -[remoteMediaClient] proprietà del GCKCastSession .

Nella versione 2, tutte le richieste di contenuti multimediali emesse nella GCKMediaControlChannel restituisce un ID richiesta numerico, mentre i metodi GCKMediaControlChannelDelegate deve fornire questo ID quando invii notifiche sul completamento della richiesta errore.

Nel CAF, tutte le richieste di contenuti multimediali emesse il GCKRemoteMediaClient restituirà un GCKRequest object; all'oggetto è associato GCKRequestDelegate protocollo che possono essere utilizzate per monitorare l'avanzamento e l'esito finale della richiesta.

La versione 2 GCKMediaControlChannel invia notifiche relative ai cambiamenti dello stato del media player sul ricevitore web tramite GCKMediaControlChannelDelegate. Nel CAF, il parametro GCKRemoteMediaClient fornisce callback equivalenti tramite GCKRemoteMediaClientListener protocollo. È possibile registrare un numero qualsiasi di listener con il GCKRemoteMediaClient, che consente a più componenti di mittenti di condividere singola istanza di GCKRemoteMediaClient associata alla sessione.

Nella versione v2, l'applicazione del mittente doveva assumersi l'onere di mantenere l'utente sincronizzata con lo stato del media player sul ricevitore web. Nel CAF, il corso GCKUIMediaController si assume gran parte di questa responsabilità; vedi il tutorial codelab documentazione per esempi sull'utilizzo di questo componente.

Overlay introduttivo

V2 non fornisce UI overlay introduttivo.

Il 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 mini controller da zero nella dell'app del mittente.

In CAF, il framework fornisce una barra di controllo, GCKUIMiniMediaControlsViewController, che puoi aggiungere alle scene in cui vuoi mostrare i i controlli di sicurezza. Esistono due modi per aggiungere il mini controller a un'app mittente:

Controller espanso

Nella versione v2, devi implementare un controller espanso da zero l'app del mittente.

Aggiunte CAF GCKUIMediaController, che potresti usare per implementare più facilmente un controller espanso.

CAF aggiunge un widget controller espanso predefinito GCKUIExpandedMediaControlsViewController che puoi aggiungere alla tua app. Non devi più implementare un'espansione personalizzata un controller utilizzando GCKUIMediaController.

Logging del debug

La GCKLogger e GCKLoggerDelegate vengono trasferite in CAF, con alcuni miglioramenti e modifiche.

La GCKLoggerDelegate Il metodo -[logFromFunction:message:] ha è stato ritirato a favore di -[logMessage:fromFunction:].

I messaggi di log del framework ora possono essere filtrati costruendo un messaggio GCKLoggerFilter all'istanza e assegnandole impostando -[filter] della proprietà GCKLogger singleton.

App di esempio

Ti consigliamo di esaminare le codelab e app di esempio scritte per CAF.