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):
viewport [Rect]
: reprezentuje geometrię ekranu urządzenia lub okna aplikacji w zależności od możliwości platformy.uiContainerGeometry [Rect]
: geometria renderowanego obiektuSandboxedSdkView
.alpha [float]
: przezroczystość renderowanego elementuSandboxedSdkView
.onScreenGeometry [Rect]
: podzbióruiContainerGeometry
, który jest nieprzycięte przez wyświetlenia rodzicielskie (doviewport
włącznie).occludedGeometry [Rect]
: częścionScreenGeometry
, które są blokowane przez jakiekolwiek widoki w hierarchii aplikacji. ZawieraRect
dla każdej kolizji, odpowiadającej 0, 1 lub większej liczbie wyświetleń aplikacji, które nakładają się naSandboxedSdkView onScreenGeometry
.
Wymagania
- Wartości
uiContainerGeometry
,onScreenGeometry
ioccludedGeometry
są wyrażane w przestrzeni współrzędnychviewport
. - 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 OMID i MRAID) 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.
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 klasySession
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ęcznejAdContainerInfo
od razu. Jeśli użytkownik zarejestruje się przed otwarciem sesji, zostanie wysłanyAdContainerInfo
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 klasieView
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 obiektAdContainerInfo
. 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 funkcjaSession.notifyResized()
jest wywoływana, aby poprosić pakiet SDK o zmiana rozmiaru reklamy, a w tym samym czasie jest też wywoływana funkcjaSessionObserver.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:
- Jakie sygnały widoczności Cię interesują, a nie zostały omówione w tym poradniku?
- 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?
- 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 danychsetTrustedPresentationCallback
? - Jak wykorzystujecie sygnały o widoczności? Pomóż nam zrozumieć Twoje przypadki użycia przez przesłać opinię, która odpowiada na te pytania.