Przenoszenie aplikacji nadawcy z iOS z pakietu SDK Cast w wersji 2 do platformy przesyłania aplikacji (CAF)

Poniższa procedura umożliwia przekonwertowanie aplikacji nadawcy na iOS z pakietu SDK SDK w wersji 2 na aplikację wysyłającą CAF, która działa na podstawie pojedynczego tokena GCKCastContext.

Wprowadzenie

  • Program do przesyłania plików CAF jest nadal rozpowszechniany na stronie dla programistów Google Cast oraz w CocoaPods, np. w wersji 2.
  • Dodaliśmy nowe klasy, które odpowiadają za zgodność z listą kontrolną projektu Google Cast.
  • Nadawca CAF udostępnia widżety zgodne z wymaganiami Cast UX. Wersja 2 nie zawiera żadnych komponentów interfejsu użytkownika i wymaga implementacji tych widżetów.
  • Projekt nadawcy CF jest zgodny z projektem Cast Android SDK.
  • Nadawca CAF obsługuje kodowanie bitowe, np. v2.
  • Napisy w CAF są podobne do napisów w wersji 2.

Zależności

Funkcja CAF Sender obsługuje system iOS w wersji 8 i nowszych.

Zdarzenie inicjujące

W CAF wymagany jest jawny etap inicjowania platformy przesyłania. Wiąże się to z inicjowaniem pojedynczego tokena GCKCastContext z wykorzystaniem odpowiedniego elementu GCKCastOptions do określenia identyfikatora aplikacji Web odbiornik oraz innych opcji globalnych. Zwykle odbywa się to w metodzie AppDelegate -[application:didFinishLaunchingWithOptions:]:

GCKCastOptions *options = [[GCKCastOptions alloc]
    initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];

Ten krok nie był wymagany w wersji 2.

Wykrywanie urządzeń

W CAF proces wykrywania jest uruchamiany i zatrzymywany automatycznie przez ramkę, gdy aplikacja działa na pierwszym planie i odpowiednio działa w tle. Klasy GCKDeviceScanner i GCKFilterCriteria z wersji 2 nie są używane i nie należy ich używać.

Przycisk Cast i okno przesyłania

W CFF przycisk i okno przesyłania są dostarczane przez platformę. Możesz go utworzyć i dodać do paska nawigacyjnego w ten sposób:

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

Do scenorysu można też dodać przycisk Cast.

Gdy ktoś go kliknie, automatycznie pojawi się okno przesyłania.

Sterowanie urządzeniem

W CAF sterowanie urządzeniami odbywa się w większości za pomocą platformy. Aplikacja nadawcy nie musi łączyć się z urządzeniem i uruchamiać aplikacji internetowej. Klasa v2 GCKDeviceManager została wycofana i nie powinna być używana. Interakcja między nadawcą i odbiornikiem sieciowym jest teraz reprezentowana jako „sesja”. Klasa CAF GCKSessionManager obsługuje cykl życia sesji i automatycznie rozpoczyna i zatrzymuje sesje w odpowiedzi na gesty użytkownika. Sesja rozpoczyna się, gdy użytkownik wybierze urządzenie przesyłające w oknie przesyłania, a kończy się, gdy użytkownik kliknie przycisk „Zatrzymaj przesyłanie” w oknie przesyłania lub zamknie aplikację. Aplikacja nadawcy może otrzymywać powiadomienia o zdarzeniach cyklu życia sesji, rejestrując interfejs GCKSessionManagerListener za pomocą GCKSessionManager. Protokół GCKSessionManagerListener definiuje metody wywołania zwrotnego dla wszystkich zdarzeń cyklu życia sesji.

Klasa GCKCastSession reprezentuje sesję z urządzeniem przesyłającym. Klasa ma metody do sterowania głośnością i stanami wyciszenia urządzeń, co było wcześniej wykonywane w wersji 2 przy użyciu metod w narzędziu GCKDeviceManager.

W wersji 2 protokół GCKDeviceManagerDelegate zapewniał powiadomienia o zmianach stanu urządzenia, w tym o głośności, trybie wyciszenia, stanie gotowości itp. W CAF powiadomienia o zmianie stanu/wyciszenia są dostarczane za pomocą metod wywołań zwrotnych w protokole GCKSessionManagerListener. Te detektory są zarejestrowane w GCKSessionManager. Wszystkie pozostałe powiadomienia o stanie urządzenia są wysyłane za pomocą protokołu GCKCastDeviceStatusListener. Te detektory są zarejestrowane w GCKCastSession.

Logika ponownego połączenia

Tak jak w wersji 2, CAF próbuje ponownie nawiązać połączenia sieciowe utracone z powodu tymczasowej utraty sygnału Wi-Fi lub innych błędów sieci. Tę czynność można teraz wykonać na poziomie sesji. Po utracie połączenia sesja może zostać zawieszona. Po odzyskaniu połączenia stan połączenia zmieni się z powrotem na „Połączono”. W ramach tego procesu platforma ponownie połączy się z aplikacją Web odbiornika i ponownie połączy kanały przesyłania.

Ponadto CAF dodaje też automatyczne wznawianie sesji. Jeśli aplikacja nadawcy jest wysyłana w tle lub kończona (przesunięta na bok lub z powodu awarii) podczas trwania sesji przesyłania, platforma spróbuje wznowić tę sesję, gdy aplikacja nadawcy powróci na pierwszy plan lub uruchomi się ponownie. Jest ona obsługiwana automatycznie przez metodę GCKSessionManager, która wysyła odpowiednie wywołania zwrotne we wszystkich zarejestrowanych instancjach GCKSessionManagerListener.

Rejestracja kanału niestandardowego

W wersji 2 kanały niestandardowe (zaimplementowane za pomocą podklasy GCKCastChannel lub GCKGenericChannel i przedstawiciela) zostały zarejestrowane w GCKDeviceManager. W CAF kanały niestandardowe są rejestrowane w instancji GCKCastSession. Rejestrację można przeprowadzić przy użyciu GCKSessionManagerListener -[sessionManager:didStartCastSession:] metody wywołania zwrotnego. W przypadku aplikacji do multimediów nie trzeba już rejestrować domeny GCKMediaControlChannel. Więcej informacji znajdziesz w sekcji poniżej.

Sterowanie multimediami

Klasa v2 GCKMediaControlChannel została wycofana i nie powinna być używana. W pliku CAF zastępuje nowa klasa GCKRemoteMediaClient, która zapewnia równoważną funkcjonalność w bardziej wygodnym interfejsie API. Nie trzeba inicjować ani rejestrować tego obiektu. Gdy platforma Web odbiornik jest podłączona do przestrzeni nazw multimediów, w momencie uruchamiania sesji następuje automatyczne utworzenie obiektu i zarejestrowanie bazowego kanału multimediów.

Dostęp do GCKRemoteMediaClient można uzyskać za pomocą właściwości -[remoteMediaClient] obiektu GCKCastSession.

W wersji 2 wszystkie żądania mediów wysłane w obrębie żądania GCKMediaControlChannel będą zwracać liczbowy identyfikator żądania, a metody w GCKMediaControlChannelDelegate będą go podawać podczas wysyłania powiadomień o nieukończonych lub nieudanych żądaniach.

W CAF wszystkie żądania mediów wysłane w obiekcie GCKRemoteMediaClient będą zwracać obiekt GCKRequest. Ten obiekt ma powiązany protokół GCKRequestDelegate, którego można używać do śledzenia postępu i ostatecznych wyników żądania.

Wersja 2 GCKMediaControlChannel wysyła powiadomienia o zmianach stanu odtwarzacza multimediów na odbiorniku przy użyciu GCKMediaControlChannelDelegate. W CAF GCKRemoteMediaClient udostępnia równoważne wywołania przez protokół GCKRemoteMediaClientListener. W usłudze GCKRemoteMediaClient można zarejestrować dowolną liczbę detektorów, co umożliwia wielu komponentom nadawcy udostępnianie pojedynczego wystąpienia GCKRemoteMediaClient powiązanego z sesją.

W wersji 2 aplikacja nadawcy musiała zadbać o to, aby interfejs użytkownika był synchronizowany ze stanem odtwarzacza multimediów na odbiorniku. W przypadku plików CAF klasa GCKUIMediaController przyjmuje większość tej odpowiedzialności. Zapoznaj się z dokumentacją samouczka z programowania, aby poznać przykłady korzystania z tego komponentu.

Nakładka z wprowadzeniem

Wersja 2 nie zawiera wstępnego interfejsu nakładki.

CAF dodaje klasę GCKCastContext z metodą -[presentCastInstructionsViewControllerOnce], której aplikacja nadawcy może używać do wyróżniania przycisku Cast przy jego pierwszym wyświetlaniu.

Minikontroler

W wersji 2 musisz wdrożyć minikontroler od zera w aplikacji nadawcy.

W CAF platforma zapewnia pasek sterowania GCKUIMiniMediaControlsViewController, który możesz dodać do scen, w których chcesz wyświetlać trwałe elementy sterujące. Minikontroler można dodać do aplikacji nadawcy na 2 sposoby:

Rozwinięty kontroler

W wersji 2 musisz wdrożyć rozwinięty kontroler od zera w aplikacji nadawcy.

CAF dodaje domenę GCKUIMediaController, która ułatwia implementację rozszerzonego kontrolera.

CAF dodaje gotowy widżet kontrolera GCKUIExpandedMediaControlsViewController, który można dodać do aplikacji. Nie musisz już implementować niestandardowego kontrolera rozwiniętego, używając GCKUIMediaController.

Logowanie debugowania

Klasy GCKLogger i GCKLoggerDelegate z wersji 2 zostały przeniesione do CAF, ale wprowadzono pewne zmiany i ulepszenia.

Metoda GCKLoggerDelegate -[logFromFunction:message:] została wycofana i zastąpiona przez -[logMessage:fromFunction:].

Komunikaty logu platformy można teraz filtrować, tworząc odpowiednią instancję GCKLoggerFilter i przypisując ją przez ustawienie właściwości -[filter] pojedynczego tokena GCKLogger.

Przykładowe aplikacje

Zalecamy zapoznanie się z ćwiczeniami z programowania i przykładowymi aplikacjami napisanymi na potrzeby CAF.