iOS Sender App vom Cast SDK Version 2 zum Cast Application Framework (CAF) migrieren

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:

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.