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ć tego samego Sprawdzaj interfejsy API używane poza środowiskiem wykonawczym pakietu SDK, aby określić, czy reklama widoczne dla użytkownika, ponieważ wyświetlenie reklamy nie jest połączone z tagiem okno. Obejmuje to interfejsy View API dla Androida, takie jak getLocationOnScreen, getLocationInWindow lub getVisibility, które nie zwracają oczekiwanej wartości. .

Obsługa pomiaru widoczności reklam jest jednym z podstawowych wymagań dotyczących środowiska wykonawczego SDK. Celem tego projektu jest zapewnienie obsługi Open Measurement i podobnych usług pomiarowych. Rozwiązania opisane w tym artykule mogą też mieć zastosowanie do interfejsów Attribution Reporting API. Zachęcamy do przesyłania opinii na temat tej oferty.

Możliwości

Ta konstrukcja ma pomagać pakietom SDK do wyświetlania reklam lub partnerom świadczącym usługi pomiarowe w obliczaniu te dane o widoczności (nazwy są tymczasowe i mogą ulec zmianie):

Grafika przedstawiająca współdziałanie komponentów środowiska wykonawczego SDK w zakresie widoczności
Omówienie widoczności środowiska wykonawczego SDK.
  • viewport [Rect]: reprezentuje geometrię ekranu urządzenia lub okna aplikacji w zależności od możliwości platformy.
  • uiContainerGeometry [Rect]: geometria renderowanego obiektu SandboxedSdkView.
  • alpha [float]: przezroczystość renderowanego elementu SandboxedSdkView.
  • onScreenGeometry [Rect]: podzbiór uiContainerGeometry, który jest nieprzycięte przez wyświetlenia rodzicielskie (do viewport włącznie).
  • occludedGeometry [Rect]: części onScreenGeometry, które są blokowane przez jakiekolwiek widoki w hierarchii aplikacji. Zawiera Rect dla każdej kolizji, odpowiadającej 0, 1 lub większej liczbie wyświetleń aplikacji, które nakładają się na SandboxedSdkView onScreenGeometry.

Wymagania

  • Wartości uiContainerGeometry, onScreenGeometryoccludedGeometry są wyrażane w przestrzeni współrzędnych viewport.
  • Raportowanie zmian widoczności odbywa się z minimalnym opóźnieniem.
  • Widoczność można mierzyć przez cały czas wyświetlania reklamy, od jej pierwszego do ostatniego wyświetlenia.

Propozycja projektu

Ta oferta opiera się na sposobie działania prezentacji interfejsu za pomocą interfejsu klienta biblioteki interfejsu dostawcy. Rozszerzymy biblioteki interfejsu, aby pakiet SDK mógł zarejestrować co najmniej jednego obserwatora sesji interfejsu użytkownika. Obserwator otrzyma o widoczności we wszystkich istotnych zdarzeniach, które modyfikują typy danych w możliwości. Pakiety SDK do pomiarów w czasie działania pakietu SDK (implementacje OMIDMRAID) mogą dołączać tego obserwatora do sesji interfejsu użytkownika, aby informacje te mogły być wysyłane bezpośrednio do tych pakietów. Partnerzy ds. pomiarów mogą łączyć informacje uzyskane z bibliotek interfejsu użytkownika z danymi o dostępnym już wcześniej treści (np. przy użyciu skryptów pomiarowych wstrzykiwanych do kreacji reklamy), aby generować zdarzenia widoczności treści w JavaScript.

Kontroluj przepływ informacji o widoczności.
Kontrola przepływu danych w celu zapewnienia widoczności.

Biblioteka klienta rejestruje zmiany w interfejsie reklamy za pomocą detektorów zdarzeń, takich jak jako ViewTreeObserver. Jeśli wykryje, że interfejs reklamy zmienił się w sposób, który może wpłynąć na pomiar widoczności, biblioteka klienta sprawdza, Ostatnie powiadomienie zostało wysłane do obserwatora. Jeśli czas ostatniej aktualizacji przekracza dozwoloną wartość opóźnienia (można ją skonfigurować w pakiecie SDK, maksymalnie do 200 ms na urządzeniach mobilnych), tworzony jest nowy obiekt AdContainerInfo, a obserwator otrzymuje powiadomienie. Ten model oparty na zdarzeniach jest lepszy dla zdrowia systemu niż metoda pollingu stosowana obecnie przez większość implementacji OMID na Androidzie.

Interfejs API

Do biblioteki privacysandbox.ui.core zostanie dodane:

  • SessionObserver: zazwyczaj implementowany przez pakiet SDK do pomiarów, dołączany do sesji zwracanej przez pakiet SDK za pomocą interfejsu privacysandbox.ui. Ten interfejs umożliwi też pomiarowi SDK subskrybowanie określonych kategorii sygnałów widoczności. Dzięki temu biblioteka klienta UI może zbierać tylko sygnały, które są interesujące dla obserwatora, co jest korzystne dla ogólnego stanu zdrowia systemu.
  • registerObserver(): ta metoda została dodana do klasy Session i umożliwia zarejestrowanie obserwatora każdej osobie mającej dostęp do sesji. Jeśli obserwator jest zarejestrowane po otwarciu sesji interfejsu użytkownika, zostaną wysłane do pamięci podręcznej AdContainerInfo od razu. Jeśli użytkownik zarejestruje się przed otwarciem sesji, zostanie wysłany AdContainerInfo po otwarciu sesji.
  • AdContainerInfo: klasa z metodami pobierania, która umożliwia obserwatorowi uzyskać informacje o kontenerach reklam tylko do odczytu dla typów danych wymienionych w możliwości powyżej. Wartości zwracane przez te metody dostępu będą, w miarę możliwości, odpowiadać wartościom zwracanym przez metody zwracające obiekty Parcelable w klasie View i jej podklasach. Jeśli kontener reklam został utworzony przy użyciu Jetpack Compose ujawnia właściwości semantyczne kontenera. Tej klasy można używać do obliczania zdarzeń MRAID i OMID związanych z widocznością.
  • SessionObserverotifyAdContainerChanged(): służy do powiadamiania obserwatora za każdym razem, gdy widoczność ulegnie zmianie. Przekazuje obiekt AdContainerInfo. To jest jest wywoływana za każdym razem, gdy zostaną wykryte zdarzenia, które wpływają na typy danych wymienione w tabeli Możliwości. Uwaga: ta metoda może być wywoływana oprócz metod onSession. Na przykład funkcja Session.notifyResized() jest wywoływana, aby poprosić pakiet SDK o zmiana rozmiaru reklamy, a w tym samym czasie jest też wywoływana funkcja SessionObserver.notifyAdContainerChanged().
  • SessionObserverotifySessionClosed(): informuje obserwatora o zamknięciu sesji.

Planowane ulepszenia

W przypadku aplikacji z naruszeniem bezpieczeństwa można zmodyfikować dowolny kod działający w procesie aplikacji, w tym kod z biblioteki privacysandbox.ui.client. Dlatego każda logika zbierania sygnałów, która działa w procesie aplikacji, jest podatna na modyfikacje przez kod aplikacji. Dotyczy to również kodu pakietu SDK wdrożonych przed udostępnieniem Piaskownicy prywatności, która działa proces składania wniosku. W związku z tym zbieranie sygnałów przez bibliotekę interfejsu pogorszyć sytuację bezpieczeństwa.

Dodatkowo kod w środowisku wykonawczym SDK może używać interfejsu API platformy o nazwie setTrustedPresentationCallback, dzięki którym może uzyskać wyższe gwarancje podstawy prezentacji interfejsu reklam. setTrustedPresentationCallback działa na poziomie powierzchni i może pomóc w formułowaniu twierdzeń dotyczących powierzchni zawierającej interfejs reklamy przez określenie minimalnych progów wyświetlania, takich jak odsetek widocznych pikseli, czas wyświetlania na ekranie lub skala. Dane te można porównać z danymi o widoczności udostępnionymi przez bibliotekę klienta UI, o której mowa powyżej. Dane dostarczane przez platformę są bardziej wiarygodne, więc wszelkie zdarzenia z Biblioteka UI, której dane nie są zgodne z danymi pochodzącymi z platformy, można odrzucono. Jeśli na przykład detektor podał parametr Pole setTrustedPresentationCallback jest wywoływane z powiadomieniem, że brak pikseli interfejsu reklamy widać na ekranie, a biblioteka niezerowej liczby pikseli na ekranie, dane z tego drugiego mogą zostać odrzucone.

Pytania otwarte

Zachęcamy do przesłania opinii na temat tych kwestii:

  1. Jakie sygnały widoczności Cię interesują, a nie zostały omówione w tym poradniku?
  2. Obecnie proponujemy aktualizowanie widoczności nie rzadziej niż co 200 milisekund, o ile w interfejsie użytkownika występują istotne zmiany. Czy ta częstotliwość jest dla Ciebie odpowiednia? Jeśli nie, jak często chcesz otrzymywać te informacje?
  3. Czy wolisz analizować informacje z setTrustedPresentationCallback samodzielnie, czy chcesz, aby biblioteka interfejsu użytkownika dostawcy usuwała dane z biblioteki interfejsu użytkownika klienta, gdy nie pasują one do danych setTrustedPresentationCallback?
  4. Jak wykorzystujecie sygnały o widoczności? Pomóż nam zrozumieć Twoje przypadki użycia przez przesłać opinię, która odpowiada na te pytania.