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:
Pozwól systemowi Cast zarządzać układem minikontrolera, dodając istniejący kontroler widoku do interfejsu
GCKUICastContainerViewController
i dodającGCKUIMiniMediaControlsViewController
u dołu widoku.Dodaj minikontroler bezpośrednio do istniejącego kontrolera widoku danych za pomocą polecenia
-[createMiniMediaControlsViewController]
, aby utworzyć instancjęGCKUIMiniMediaControlsViewController
, a potem dodaj go do kontrolera widoku kontenera jako widoku podrzędnego.
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.