Mit dem folgenden Verfahren können Sie die iOS-Absender-App vom Cast SDK Version 2 in den CAF-Absender umwandeln, der auf dem Singleton GCKCastContext basiert.
Einführung
- CAF Sender wird weiterhin auf der Website für Google Cast-Entwickler und CocoaPods wie v2 vertrieben.
- Es wurden neue Kurse hinzugefügt, die für die Einhaltung der Checkliste für das Design von Google Cast verantwortlich sind.
- Der CAF-Absender stellt Widgets bereit, die den Anforderungen der Cast-UX entsprechen. Version 2 hat keine UI-Komponenten bereitgestellt und erforderte die Implementierung dieser Widgets.
- Das CAF-Senderdesign entspricht dem Design des Cast Android SDK.
- CAF-Sender unterstützt Bitcode wie v2.
- Untertitel in CAF sind mit V2 vergleichbar.
Abhängigkeiten
CAF Sender unterstützt iOS-Version 8 und höher.
Initialisierung
In CAF ist für das Cast-Framework ein expliziter Initialisierungsschritt erforderlich. Dazu wird das Singleton GCKCastContext
initialisiert. Dazu wird eine Anwendungs-ID von Web Receiver und andere globale Optionen mit einem geeigneten GCKCastOptions
angegeben. Dazu wird normalerweise die Methode AppDelegate
-[application:didFinishLaunchingWithOptions:]
verwendet:
GCKCastOptions *options = [[GCKCastOptions alloc]
initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];
Dieser Schritt war in Version 2 nicht erforderlich.
Geräteerkennung
In CAF wird der Erkennungsprozess automatisch vom Framework gestartet und beendet, wenn die Anwendung in den Vordergrund gelangt bzw. in den Hintergrund wechselt. Die Klassen GCKDeviceScanner
und GCKFilterCriteria
aus v2 wurden verworfen und sollten nicht verwendet werden.
Cast-Symbol und Streaming-Dialogfeld
In CAF werden das Cast-Symbol und das Dialogfeld vom Framework zur Verfügung gestellt. Das Cast-Symbol kann folgendermaßen instanziiert und der Navigationsleiste hinzugefügt werden:
GCKUICastButton *castButton =
[[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithCustomView:castButton];
Das Cast-Symbol kann auch dem Storyboard hinzugefügt werden.
Wenn jemand auf die Schaltfläche tippt, wird das Cast-Dialogfeld automatisch eingeblendet.
Gerätesteuerung
In CAF wird die Gerätesteuerung größtenteils vom Framework übernommen. Die Absenderanwendung muss keine Verbindung zum Gerät herstellen und die Webempfängeranwendung starten. Die V2-Klasse GCKDeviceManager
wurde verworfen und sollte nicht verwendet werden. Die Interaktion zwischen Absender und Webempfänger wird jetzt als „Sitzung“ dargestellt. Die CAF-Klasse GCKSessionManager
verarbeitet den Sitzungslebenszyklus und startet und beendet Sitzungen automatisch als Reaktion auf Nutzergesten: Eine Sitzung wird gestartet, wenn der Nutzer ein Cast-Gerät im Cast-Dialogfeld auswählt und beendet wird, wenn der Nutzer im Streaming-Dialogfeld auf die Schaltfläche „Streaming beenden“ klickt oder die Sender-App selbst beendet wird. Die Absenderanwendung kann über Sitzungslebenszyklusereignisse benachrichtigt werden, indem ein GCKSessionManagerListener
bei GCKSessionManager
registriert wird.
Das Protokoll GCKSessionManagerListener
definiert Callback-Methoden für alle Ereignisse des Sitzungslebenszyklus.
Die Klasse GCKCastSession
stellt eine Sitzung mit einem Übertragungsgerät dar. Die Klasse hat Methoden zur Steuerung des Gerätevolumens und der Stummschaltungsmodi, die in Version 2 mit Methoden für GCKDeviceManager
ausgeführt wurden.
In v2 wurden über das GCKDeviceManagerDelegate
-Protokoll Benachrichtigungen über Änderungen am Gerätestatus wie Lautstärke, Stummschaltung oder Stand-by-Status gesendet.
In CAF werden Benachrichtigungen über Statusänderungen/Lautschaltungen über Callback-Methoden im Protokoll GCKSessionManagerListener
gesendet. Diese Listener sind beim GCKSessionManager
registriert.
Alle verbleibenden Gerätestatusbenachrichtigungen werden über ein GCKCastDeviceStatusListener
-Protokoll gesendet. Diese Listener werden beim GCKCastSession
registriert.
Logik für die erneute Verbindung
Wie bei V2 versucht CAF, Netzwerkverbindungen wiederherzustellen, die aufgrund eines vorübergehenden Verlusts des WLAN-Signals oder anderer Netzwerkfehler unterbrochen werden. Dies erfolgt jetzt auf Sitzungsebene. Eine Sitzung kann in den Status „Gesperrt“ versetzt werden, wenn die Verbindung unterbrochen wird, und wieder in den Status „Verbunden“ wechseln, wenn die Verbindung wiederhergestellt ist. Das Framework sorgt dafür, dass die Verbindung zur Web Receiver-Anwendung und Cast-Kanäle wieder hergestellt wird.
Zusätzlich bietet CAF auch eine automatische Sitzungswiederaufnahme. Wenn die Absenderanwendung im Hintergrund gesendet oder (durch einen Absturz) weggewischt wird, versucht das Framework, diese Sitzung fortzusetzen, wenn die Absenderanwendung in den Vordergrund zurückkehrt oder neu gestartet wird. Dies wird automatisch von der GCKSessionManager
abgewickelt, die die entsprechenden Callbacks auf allen registrierten GCKSessionManagerListener
-Instanzen ausgibt.
Benutzerdefinierte Kanalregistrierung
In v2 wurden benutzerdefinierte Channels (mit einer GCKCastChannel
-Unterklasse oder einem GCKGenericChannel
-Delegaten implementiert) mit der GCKDeviceManager
.
In CAF werden benutzerdefinierte Channels stattdessen bei der Instanz GCKCastSession
registriert. Die Registrierung kann über die Callback-Methode GCKSessionManagerListener
-[sessionManager:didStartCastSession:]
erfolgen. Für Medienanwendungen ist es nicht mehr erforderlich, GCKMediaControlChannel
explizit zu registrieren. Weitere Informationen finden Sie im folgenden Abschnitt.
Mediensteuerung
Die Klasse v2GCKMediaControlChannel
ist veraltet und sollte nicht verwendet werden. In CAF wird es durch die neue Klasse GCKRemoteMediaClient
ersetzt, die gleichwertige Funktionen in einer praktischeren API bietet.
Dieses Objekt muss nicht explizit initialisiert oder registriert werden. Das Framework instanziiert das Objekt automatisch und registriert den zugrunde liegenden Medienkanal zum Zeitpunkt des Sitzungsbeginns, wenn die Web Receiver-Anwendung, die mit dem Media-Namespace verbunden ist, den Medien-Namespace unterstützt.
Auf GCKRemoteMediaClient
kann mit dem Attribut -[remoteMediaClient]
des GCKCastSession
-Objekts zugegriffen werden.
In Version 2 geben alle Medienanfragen, die in GCKMediaControlChannel
ausgegeben werden, eine numerische Anfrage-ID zurück. Methoden in GCKMediaControlChannelDelegate
geben diese ID an, wenn Benachrichtigungen über den Abschluss oder die Anfrage einer Anfrage gesendet werden.
In CAF wird für alle Medienanfragen, die im GCKRemoteMediaClient
-Objekt ausgegeben werden, ein GCKRequest
-Objekt zurückgegeben. Mit diesem Objekt ist ein GCKRequestDelegate
-Protokoll verknüpft, mit dem der Fortschritt und das Ergebnis der Anfrage verfolgt werden können.
In Version 2 wurden GCKMediaControlChannel
gesendet. Über GCKMediaControlChannelDelegate
werden Benachrichtigungen zu Änderungen am Status des Mediaplayers im Webempfänger gesendet.
In CAF stellt GCKRemoteMediaClient
entsprechende Callbacks über das GCKRemoteMediaClientListener
-Protokoll bereit. Bei GCKRemoteMediaClient
kann eine beliebige Anzahl von Listenern registriert werden. Dadurch können mehrere Absenderkomponenten die einzelne Instanz von GCKRemoteMediaClient
teilen, die mit der Sitzung verknüpft ist.
In v2 musste die Absenderanwendung für die Synchronisierung der Benutzeroberfläche und den Status des Mediaplayers auf dem Webempfänger sorgen. In CAF übernimmt der Kurs GCKUIMediaController
die meiste Verantwortung. In der Codelab-Anleitung finden Sie Beispiele zur Verwendung dieser Komponente.
Einführungs-Overlay
V2 bietet keine einführende Overlay-Benutzeroberfläche.
CAF fügt die Klasse GCKCastContext
mit der Methode -[presentCastInstructionsViewControllerOnce]
hinzu, mit der eine Absender-App das Cast-Symbol hervorheben kann, wenn es Nutzern zum ersten Mal angezeigt wird.
Mini-Controller
In Version 2 müssen Sie einen Mini-Controller von Grund auf in der Absender-App implementieren.
In CAF bietet das Framework eine Steuerleiste GCKUIMiniMediaControlsViewController
, die Sie zu den Szenen hinzufügen können, in denen Sie die persistenten Steuerelemente anzeigen möchten. Es gibt zwei Möglichkeiten, den Mini-Controller einer Absender-App hinzuzufügen:
Lassen Sie das Layout des Mini-Controllers vom Cast-Framework verwalten. Fügen Sie dazu den vorhandenen Ansicht-Controller in den
GCKUICastContainerViewController
ein und fügen Sie am unteren Rand der Ansicht einenGCKUIMiniMediaControlsViewController
hinzu.Fügen Sie den Mini-Controller direkt zu Ihrem vorhandenen Ansicht-Controller hinzu. Erstellen Sie dazu mit
-[createMiniMediaControlsViewController]
eineGCKUIMiniMediaControlsViewController
-Instanz und fügen Sie sie dann als Unteransicht zum Container-Ansicht-Controller hinzu.
Maximierter Controller
In Version 2 müssen Sie einen erweiterten Controller von Grund auf in der Absenderanwendung implementieren.
CAF fügt GCKUIMediaController
hinzu, mit dem Sie einen erweiterten Controller einfacher implementieren können.
CAF fügt das vordefinierte erweiterte Controller-Widget GCKUIExpandedMediaControlsViewController
hinzu, das Sie einfach Ihrer Anwendung hinzufügen können. Es ist nicht mehr erforderlich, einen benutzerdefinierten erweiterten Controller mit GCKUIMediaController
zu implementieren.
Fehlerprotokollierung
Die Klassen GCKLogger
und GCKLoggerDelegate
aus v2 werden mit einigen Änderungen und Verbesserungen in CAF übernommen.
Die -[logFromFunction:message:]
-Methode GCKLoggerDelegate
wurde zugunsten von -[logMessage:fromFunction:]
eingestellt.
Framework-Lognachrichten können jetzt gefiltert werden. Erstellen Sie dazu eine geeignete GCKLoggerFilter
-Instanz und weisen Sie sie zu, indem Sie das Attribut -[filter]
des GCKLogger
-Singleton-Objekts festlegen.
Beispiel-Apps
Wir empfehlen Ihnen, sich die für CAF geschriebenen Codelabs und Beispielanwendungen anzusehen.