Propozycja projektu widoczności środowiska wykonawczego SDK

Pakiety SDK do wyświetlania reklam w środowisku wykonawczym SDK nie mają dostępu do hierarchii widoków wydawcy. Zamiast tego pakiety SDK w środowisku wykonawczym mają własne widoki. Pakiet SDK nie może używać tych samych interfejsów API widoku danych co poza środowiskiem wykonawczym SDK do określenia, czy reklama jest widoczna dla użytkownika, ponieważ widok reklamy nie jest dołączony do okna aplikacji. Obejmuje to interfejsy API widoku danych Androida, takie jak getLocationOnScreen, getLocationInWindow czy getVisibility, które nie zwracają oczekiwanych wartości.

Obsługa pomiaru widoczności reklam jest jednym z podstawowych wymagań środowiska wykonawczego pakietu SDK. Ten projekt ma na celu zapewnienie wsparcia dla OpenMeasurement i podobnych usług pomiarowych. Opisane tu rozwiązania mogą też mieć zastosowanie do interfejsów Attribution Reporting API. Zachęcamy do przesyłania opinii na temat tej oferty.

Możliwości

Nowy projekt ma na celu umożliwienie dostawcom pakietów SDK do wyświetlania reklam lub partnerom świadczącym usługi pomiaru obliczanie tych danych o widoczności (nazwy są tymczasowe i mogą ulec zmianie):

Grafika obrazująca współdziałanie komponentów komponentu Widoczność środowiska wykonawczego SDK
Omówienie widoczności środowiska wykonawczego SDK.
  • viewport [Rect]: reprezentuje ekran urządzenia lub geometrię okna aplikacji w zależności od możliwości platformy.
  • uiContainerGeometry [Rect]: geometria renderowanego obiektu SandboxedSdkView.
  • alpha [float]: przezroczystość renderowanego obiektu SandboxedSdkView.
  • onScreenGeometry [Rect]: podzbiór elementu uiContainerGeometry, który nie jest ograniczony przez wyświetlenia elementu nadrzędnego (do wartości viewport włącznie).
  • occludedGeometry [Rect]: części obiektu onScreenGeometry zasłaniane przez widoki w hierarchii aplikacji. Zawiera element Rect w przypadku każdego przesłaniania, odpowiadający 0, 1 lub większej liczbie wyświetleń aplikacji, które przecinają się z elementem SandboxedSdkView onScreenGeometry.

Wymagania

  • Wartości uiContainerGeometry, onScreenGeometry i occludedGeometry są wyrażone w przestrzeni współrzędnych viewport.
  • Raportowanie zmian widoczności odbywa się z minimalnym opóźnieniem.
  • Widoczność można mierzyć przez cały cykl życia wyświetlenia reklamy – od pierwszego do ostatniego wyświetlenia.

Propozycja projektu

Ta oferta bazuje na tym, jak prezentacja interfejsu działa z wykorzystaniem bibliotek interfejsu klienta i dostawcy. Rozszerzymy biblioteki interfejsu użytkownika, aby umożliwić pakietowi SDK zarejestrowanie co najmniej 1 obserwatora sesji UI. Obserwator będzie otrzymywać informacje o widoczności za każdym razem, gdy wykryte zostaną odpowiednie zdarzenia modyfikujące typy danych w sekcji capabilities. Pakiety SDK do pomiaru skuteczności w środowisku wykonawczym pakietu SDK (implementacje OMID i MRAID) mogą dołączyć tego obserwatora do sesji interfejsu, co umożliwia bezpośrednie przesyłanie do niego informacji. Partnerzy świadczący usługi pomiarowe mogą łączyć informacje uzyskane z bibliotek interfejsu z danymi o dostępnych już treściach (np. podczas korzystania ze skryptów pomiarowych wstrzykiwanych w kreacji), aby generować zdarzenia widoczności JavaScriptu.

Kontroluj widoczność kreacji.
Kontrola nad widocznością.

Biblioteka klienta nasłuchuje zmian w interfejsie reklamy, korzystając z detektorów zdarzeń, np. ViewTreeObserver. Gdy ustali, że interfejs reklamy zmienił się w sposób, który może wpływać na pomiar widoczności, biblioteka klienta sprawdza, kiedy zostało wysłane do obserwatora ostatnie powiadomienie. Jeśli ostatnia aktualizacja przekracza dozwolony czas oczekiwania (które można skonfigurować w pakiecie SDK, co najmniej 200 ms na urządzeniu mobilnym), tworzony jest nowy obiekt AdContainerInfo, a do obserwatora wysyłane jest powiadomienie. Ten model oparty na zdarzeniach lepiej sprawdza się w kondycji systemu niż odpytywanie wykonywane w większości obecnych implementacji OMID na Androidzie.

API

Do biblioteki privacysandbox.ui.core zostaną dodane te elementy:

  • SessionObserver: zwykle implementowany przez pakiet SDK do pomiarów, dołączony do sesji zwracanej przez pakiet SDK za pomocą pliku privacysandbox.ui. Ten interfejs umożliwi też pakietowi SDK do pomiarów akceptowanie pewnych kategorii sygnałów o widoczności. To z kolei umożliwia bibliotece klienta interfejsu gromadzenie tylko sygnałów, którymi interesuje się obserwator, co jest lepsze dla ogólnego stanu systemu.
  • registerObserver(): ta metoda została dodana do klasy Session i umożliwia zarejestrowanie obserwatora każdemu, kto ma dostęp do sesji. Jeśli obserwator zostanie zarejestrowany po otwarciu sesji interfejsu, zostanie od razu wysłany AdContainerInfo z pamięci podręcznej. Jeśli zostały zarejestrowane przed otwarciem sesji, po jej otwarciu zostaną wysłane AdContainerInfo.
  • AdContainerInfo: klasa z metodami pobierającymi, która umożliwia obserwatorowi uzyskiwanie informacji o kontenerze reklam tylko do odczytu w przypadku typów danych wymienionych w sekcji dotyczącej możliwości powyżej. Wartości zwracane przez te metody pobierania będą odpowiadać, gdy tylko jest to możliwe, wartościom zwracanym przez funkcje pobierania danych w funkcji View i jej podklasach. Jeśli kontener reklamy został utworzony za pomocą Jetpack Compose, spowoduje to wyświetlenie jego semantycznych właściwości. Ta klasa może służyć do obliczania zdarzeń MRAID i OMID związanych z widocznością.
  • SessionObserverotifyAdContainerChanged(): służy do powiadamiania obserwatora o każdej zmianie widoczności. Przekazuje obiekt AdContainerInfo. Ta wartość jest wywoływana za każdym razem, gdy zostaną wykryte zdarzenia wpływające na typy danych wymienione w sekcji „Możliwości”. Uwaga: ta metoda może być wywoływana razem z metodami w sesji. Na przykład żądanie Session.notifyResized() jest wywoływane, aby pakiet SDK zmieniał rozmiar reklamy, a w tym przypadku polecenie SessionObserver.notifyAdContainerChanged() jest również wywoływane.
  • SessionObserverotifySessionClosed(): powiadamia obserwatora, że sesja została zamknięta.

Przyszłe ulepszenia

Każdy kod uruchomiony w procesie aplikacji, w tym kod z biblioteki privacysandbox.ui.client, może zostać zmodyfikowany w przypadku przejęcia aplikacji. Dlatego każda logika zbierania sygnałów uruchamiana w procesie aplikacji jest podatna na manipulacje jej kodem. Dotyczy to również kodu pakietu SDK wdrożonego przed udostępnieniem Piaskownicy prywatności, która działa w procesie aplikacji. W rezultacie zbieranie sygnałów przez bibliotekę UI nie pogarsza stanu bezpieczeństwa.

Poza tym kod w środowisku wykonawczym pakietu SDK może korzystać z interfejsu API platformy o nazwie setTrustedPresentationCallback, który daje mu większe gwarancje na podstawie struktury interfejsu reklamy. setTrustedPresentationCallbackDziała na poziomie Powierzchni i może ułatwiać stwierdzenie na temat powierzchni zawierającej interfejs reklamy, określając minimalne progi prezentacji, takie jak procent widocznych pikseli, czas na ekranie lub skala. Dane te można porównać z danymi o widoczności dostarczane przez bibliotekę klienta interfejsu użytkownika, jak opisano powyżej. Dane dostarczane przez platformę są bardziej wiarygodne, dlatego wszystkie zdarzenia z biblioteki interfejsu, których dane nie są zgodne z danymi z platformy, mogą zostać odrzucone. Jeśli na przykład detektor podany w funkcji setTrustedPresentationCallback zostanie wywołany z powiadomieniem, że na ekranie nie wyświetlają się żadne piksele interfejsu reklamy, a biblioteka interfejsu klienta pokazuje niezerową liczbę pikseli na ekranie, dane z tego drugiego elementu można odrzucić.

Pytania otwarte

Zachęcamy do opinii o tych kwestiach:

  1. Jakie sygnały o widoczności Cię interesują, a które nie zostały tu opisane?
  2. Obecna propozycja polega na aktualizowaniu widoczności nie rzadziej niż co 200 milisekund, o ile w interfejsie pojawi się znacząca zmiana. Czy taka częstotliwość jest dla Ciebie akceptowalna? Jeśli nie, jaką częstotliwość preferujesz?
  3. Czy wolisz samodzielnie analizować informacje z usługi setTrustedPresentationCallback czy wolisz, aby biblioteka interfejsu dostawcy pomijała dane z biblioteki interfejsu klienta, gdy nie są one zgodne z danymi w usłudze setTrustedPresentationCallback?
  4. Jak wykorzystujesz sygnały o widoczności? Pomóż nam zrozumieć Twoje przypadki użycia, przesyłając opinię z odpowiedziami na te pytania.