Środowisko wykonawcze pakietu SDK narzuca ograniczenia dotyczące uruchamiania nowych działań przez pakiety SDK. Stanowi to wyzwanie dla formatów reklam pełnoekranowych, które zwykle wymagają uruchomienia osobnej aktywności w celu zwiększenia kontroli i wygody użytkowników. Aby rozwiązać ten problem, środowisko wykonawcze SDK wprowadza nowy mechanizm dla działań w piaskownicy.
Pakiety SDK wczytane w środowisku wykonawczym SDK nie mogą bezpośrednio definiować tagów <activity>
w swoim pliku manifestu ani inicjować własnych działań.
Zamiast tego wprowadzamy nowe działanie związane z zamiarem START_SANDBOXED_ACTIVITY
.
Pakiety SDK nie mogą też uruchamiać intencji z tym działaniem, ale mogą poprosić aplikację klienta o jej zainicjowanie. Następnie system tworzy aktywność zdefiniowaną przez platformę i przekazuje ją do pakietu SDK. Ta aktywność będzie działać w tym samym procesie co pakiet SDK.
Pakiet SDK może następnie użyć tej aktywności do implementacji reklamy pełnoekranowej i zarządzania nią.
Aktywność zapewniana przez platformę to standardowa android.app.Activity
, uruchamiana w ramach zadania aplikacji klienta.
Tworzenie aktywności w środowisku wykonawczym pakietu SDK
Istnieją 2 podstawowe metody tworzenia aktywności: za pomocą uproszczonych bibliotek aktywności Jetpacka lub bezpośrednio za pomocą interfejsów Platform API.
Zalecamy korzystanie z bibliotek aktywności, ponieważ upraszczają one tworzenie aktywności, abstrahując od złożoności leżącej u podłoża.
Biblioteki aktywności
Biblioteki aktywności mają wiele zalet:
- Ukrywanie wewnętrznych szczegółów rejestrowania modułów obsługi aktywności i udostępniania ich identyfikatorów aplikacjom klienta.
- Daje deweloperom większą kontrolę nad tym, jak pakiety SDK tworzą aktywności w ich aplikacjach, umożliwiając im określanie warunków (predykatów) do spełnienia.
- Utworzenie ujednoliconego sposobu definiowania interfejsów API, które uruchamiają działania, w pakietach SDK.
Istnieją 3 biblioteki aktywności: główna, klienta i dostawcy.
- Biblioteka podstawowa udostępnia interfejsy używane przez aplikacje klienta i biblioteki dostawców.
- Biblioteka dostawcy udostępnia interfejsy API dla pakietów SDK, które umożliwiają uruchamianie działań.
- Biblioteka klienta udostępnia interfejsy API, które umożliwiają aplikacjom klienta tworzenie inicjatora aktywności, którego pakiety SDK mogą używać do wysyłania aplikacji do uruchamiania aktywności.
Te biblioteki wprowadzają te interfejsy API:
SdkActivityLauncher
: Launcher aktywności umożliwia pakietom SDK obsługę uruchamiania aktywności z aplikacji klienta. Aplikacje klienta powinny utworzyć launcher i przekazać go jako parametr do interfejsów API pakietu SDK, które uruchamiają aktywności.<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean )
: funkcja rozszerzenia, którą aplikacja klienta może wywoływać z działań, aby tworzyć inicjatory.SdkActivityLauncher.launchSdkActivity(IBinder)
: metoda używana przez pakiet SDK do żądania uruchomienia aktywności przez aplikację.
Proces uruchamiania aktywności z bibliotekami aktywności wygląda tak:
- Pakiet SDK dodaje parametr typu
SdkActivityLauncher
do wszystkich interfejsów API, które uruchamiają aktywności. - Aplikacja klienta wywołuje funkcję
createSdkActivityLauncher
w jednym ze swoich działań, aby utworzyć program uruchamiający, który można przekazać pakietowi SDK podczas wywołań interfejsu API. - Pakiet SDK wywołuje funkcję
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)
i pobiera token identyfikatora. - Pakiet SDK wywołuje funkcję
launchSdkActivity
, aby uruchomić działanie.
Na diagramie poniżej widać proces w przypadku korzystania z bibliotek aktywności.
Interfejsy Platform API
Platforma udostępnia te interfejsy API, aby ułatwić tworzenie i zarządzanie działaniami w piaskownicy w środowisku wykonawczym SDK:
SdkSandboxActivityHandler
: obsługa aktywności służy do powiadamiania pakietu SDK o tworzeniu aktywności i jej rejestrowaniu przez ten pakiet.- Aby ułatwić rejestrowanie metod obsługi aktywności, pakiet SDK może używać tych metod w sekcji
SdkSandboxController
:.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: rejestruje instancjęSdkSandboxActivityHandler
, która zwraca identyfikatorIBinder
..unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: wyrejestrowanie zarejestrowanej instancjiSdkSandboxActivityHandler
za pomocą jej identyfikatora.
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder)
: wywoływana z aplikacji klienckiej, ta metoda powoduje tworzenie działań dla pakietu SDK. Aplikacja klienta musi jako parametry przekazać wybraną aktywność uruchamiającą i identyfikator modułu obsługi aktywności w SDK.
Aby rozpocząć działanie przy użyciu interfejsów API platformy, pakiety SDK muszą przestrzegać tej procedury:
- Pakiet SDK rejestruje moduł obsługi aktywności za pomocą udostępnionych interfejsów API i uzyskiwanie identyfikatora.
- Pakiet SDK udostępnia ten identyfikator aplikacji klienta.
- Aplikacja klienta wywołuje metodę uruchamiania aktywności w czasie działania pakietu SDK za pomocą interfejsu API platformy
startSdkSandboxActivity(Activity, IBinder)
, przekazując jako parametry wybraną początkową aktywność dla tej nowej aktywności i identyfikator modułu obsługi aktywności. - Platforma uruchamia aktywność i powiadamia pakiet SDK za pomocą wywołania zwrotnego w obiekcie Activity Handler (
SdkSandboxActivityHandler.onActivityCreated(Activity)
). - Pakiet SDK używa aktywności do wypełniania jej reklamą.
Korzystanie z interfejsów Platform API sprawia, że pakiet SDK odpowiada za udostępnienie identyfikatora SdkSandboxActivityHandler aplikacji klienta za pomocą interfejsów API w odpowiednim momencie oraz za udzielenie aplikacjiom klienta wskazówek dotyczących jego użycia.
W tym diagramie przepływu przykładowy pakiet SDK ma metodę launchActivity(AppCallback)
, która oczekuje wywołania zwrotnego (zdefiniowanego jako część interfejsu API pakietu SDK). Ta metoda wywołania zwrotnego jest używana przez pakiet SDK do udostępniania identyfikatora modułu Activity Handler (SdkSandboxActivityHandler
) aplikacji klienta.
Widoczność
W środowisku wykonawczym pakietu SDK reklamy zintegrowane z hierarchią widoków aplikacji klienta korzystają z kanałów pobocznych, aby renderować widoki pakietu SDK z procesu pakietu SDK do procesu aplikacji klienta.
Pakiet SDK nie może używać tych samych interfejsów View API, których używa poza środowiskiem uruchomienia pakietu SDK, aby określić, czy reklama jest widoczna dla użytkownika, ponieważ widok reklamy nie jest dołączony do okna aplikacji (widoczność reklamy).
Z kolei aktywność udostępniana przez platformę działa natywnie w ramach procesu środowiska wykonawczego pakietu SDK, co eliminuje potrzebę korzystania z kanałów dodatkowych i pozwala pakietom SDK używać standardowych interfejsów API Activity
i View
na Androida.
Z powodu tych różnych implementacji prowadzimy obecnie prace nad ujednoliceniem interfejsów, aby pobierać sygnały widoczności niezależnie od kontekstu wczytywania reklamy.
Lifecycle
ActivityHolder
przekazany do pakietu SDK przezSdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
implementujeLifecycleOwner
i może służyć do uzyskiwania informacji o Lifecycle.Event
.
Nawigacja wstecz
Metoda
ActivityHolder.getOnBackPressedDispatcher()
zwraca
OnBackPressedDispatcher
które można wykorzystać do rejestrowania instancji
OnBackPressedCallback
w celu obsługi nawigacji wstecz.