Menedżer wyboru reklam

public class AdSelectionManager
extends Object

java.lang.Object
android.adservices.adselection.AdSelectionManager,


AdSelection Manager udostępnia interfejsy API dla aplikacji i pakietów SDK do wyświetlania reklam, które pozwalają uruchamiać procesy wyboru reklam raportują wyświetlenia.

Podsumowanie

Metody publiczne

static AdSelectionManager get(Context context)

Fabryczna metoda tworzenia instancji AdSelectionManager.

void getAdSelectionData(GetAdSelectionDataRequest request, Executor executor, OutcomeReceiver<GetAdSelectionDataOutcomeException> receiver)

Zbiera z urządzenia dane o niestandardowych odbiorcach.

TestAdSelectionManager getTestAdSelectionManager()
void persistAdSelectionResult(PersistAdSelectionResultRequest request, Executor executor, OutcomeReceiver<AdSelectionOutcomeException> receiver)

Zachowuje wyniki wyboru reklamy po stronie serwera.

void reportEvent(ReportEventRequest request, Executor executor, OutcomeReceiver<ObjectException> receiver)

Powiadamia usługę o nowym zdarzeniu reklamowym do zgłoszenia dotyczącym reklamy wybranej przez uruchomienia procesu wyboru reklamy przez: adSelectionId.

void reportImpression(ReportImpressionRequest request, Executor executor, OutcomeReceiver<ObjectException> receiver)

Powiadamia usługę o nowym wyświetleniu do zgłoszenia dotyczącym reklamy wybranej przez uruchomienia procesu wyboru reklamy przez: adSelectionId.

void selectAds(AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig, Executor executor, OutcomeReceiver<AdSelectionOutcomeException> receiver)

Wybiera reklamę z wyników wcześniej uruchomionych opcji reklam.

void selectAds(AdSelectionConfig adSelectionConfig, Executor executor, OutcomeReceiver<AdSelectionOutcomeException> receiver)

Uruchamia proces wyboru reklamy na urządzeniu, aby wybrać reklamę remarketingową dla dzwoniącego. aplikacji.

void updateAdCounterHistogram(UpdateAdCounterHistogramRequest updateAdCounterHistogramRequest, Executor executor, OutcomeReceiver<ObjectException> outcomeReceiver)

Aktualizuje histogramy licznika reklamy, która została wcześniej wybrana przez wywołanie funkcji selectAds(android.adservices.adselection.AdSelectionConfig, java.util.concurrent.Executor, android.os.OutcomeReceiver).

Metody dziedziczone

Metody publiczne

odbierz

public static AdSelectionManager get (Context context)

Fabryczna metoda tworzenia instancji AdSelectionManager.

Parametry
context Context: element Context, którego należy użyć Ta wartość nie może być null.

Zwroty
AdSelectionManager Instancja AdSelectionManager Ta wartość nie może być typu null.

getAdSelectionData

public void getAdSelectionData (GetAdSelectionDataRequest request, 
                Executor executor, 
                OutcomeReceiver<GetAdSelectionDataOutcomeException> receiver)

Zbiera z urządzenia dane o niestandardowych odbiorcach. Zwraca skompresowany i zaszyfrowany obiekt blob do wysłania z serwerów aukcji na potrzeby wyboru reklam. Więcej informacji znajdziesz na stronie Określanie stawek i objaśnienia usług aukcyjnych.

Aby można było zbierać reklamy niestandardowe kierowane na odbiorców, muszą one mieć parametr ad_render_id.

Na stronie AdSelectionManager#persistAdSelectionResult znajdziesz informacje o przetwarzaniu wyników: wybór reklamy jest realizowany po stronie serwera za pomocą obiektu blob wygenerowanego przez ten interfejs API.

Dane wyjściowe są przekazywane przez odbiorcę, który zwraca wartość GetAdSelectionDataOutcome w przypadku pomyślnego uruchomienia lub Exception zawiera typ zgłoszony wyjątek i odpowiedni komunikat o błędzie.

Zgłoszona zasada IllegalArgumentException jest spowodowana przez nieprawidłowy argument wejściowy. interfejsu API na potrzeby wyboru reklamy.

Jeśli IllegalStateException zostanie wywołany z komunikatem o błędzie „Failure of AdSelection services.”, jest to spowodowane wewnętrzną awarią usługi wyboru reklamy.

Żądanie TimeoutException jest wywoływane po przekroczeniu limitu czasu. podczas określania stawek, oceniania lub ogólnego wyboru reklamy w celu znalezienia zwycięskiej reklamy.

Rzut LimitExceededException powoduje, że pakiet wywołujący przekracza dozwolone limity szybkości i jest ograniczane.

Jeśli SecurityException jest odrzucony, przyczyną jest brak autoryzacji rozmówcy lub prośba o przyznanie uprawnień.
Wymagane AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE

Parametry
request GetAdSelectionDataRequest: ta wartość nie może być typu null.

executor Executor: ta wartość nie może być typu null. Za pomocą tego interfejsu są wysyłane zdarzenia wywołania zwrotnego i detektora Executor, co pozwala łatwo kontrolować, który wątek jest . Aby wysyłać zdarzenia przez wątek główny aplikacji, możesz użyć Context.getMainExecutor() W przeciwnym razie podaj Executor, który wysyła do odpowiedniego wątku.

receiver OutcomeReceiver: ta wartość nie może być typu null.

getTestAdSelectionManager

public TestAdSelectionManager getTestAdSelectionManager ()

Zwroty
TestAdSelectionManager Ta wartość nie może być typu null.

Element trwały

public void persistAdSelectionResult (PersistAdSelectionResultRequest request, 
                Executor executor, 
                OutcomeReceiver<AdSelectionOutcomeException> receiver)

Zachowuje wyniki wyboru reklamy po stronie serwera. Więcej informacji znajdziesz na stronie Określanie stawek i usługi aukcyjnej

Instrukcje generowania zaszyfrowanego obiektu blob znajdziesz w AdSelectionManager#getAdSelectionData uruchomić wybór reklamy po stronie serwera.

Dane wyjściowe są przekazywane przez odbiorcę, który zwraca AdSelectionOutcome dla udanego uruchomienia lub Exception zawiera typ zgłoszonego wyjątku i z odpowiednim komunikatem o błędzie.

Zgłoszona zasada IllegalArgumentException jest spowodowana przez nieprawidłowy argument wejściowy. interfejsu API na potrzeby wyboru reklamy.

Jeśli IllegalStateException zostanie wywołany z komunikatem o błędzie „Failure of AdSelection services.”, jest to spowodowane wewnętrzną awarią usługi wyboru reklamy.

Żądanie TimeoutException jest wywoływane po przekroczeniu limitu czasu. podczas określania stawek, oceniania lub ogólnego wyboru reklamy w celu znalezienia zwycięskiej reklamy.

Rzut LimitExceededException powoduje, że pakiet wywołujący przekracza dozwolone limity szybkości i jest ograniczane.

Jeśli SecurityException jest odrzucony, przyczyną jest brak autoryzacji rozmówcy lub prośba o przyznanie uprawnień.
Wymagane AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE

Parametry
request PersistAdSelectionResultRequest: ta wartość nie może być typu null.

executor Executor: ta wartość nie może być typu null. Za pomocą tego interfejsu są wysyłane zdarzenia wywołania zwrotnego i detektora Executor, co pozwala łatwo kontrolować, który wątek jest . Aby wysyłać zdarzenia przez wątek główny aplikacji, możesz użyć Context.getMainExecutor() W przeciwnym razie podaj Executor, który wysyła do odpowiedniego wątku.

receiver OutcomeReceiver: ta wartość nie może być typu null.

zdarzenie reporta

public void reportEvent (ReportEventRequest request, 
                Executor executor, 
                OutcomeReceiver<ObjectException> receiver)

Powiadamia usługę o nowym zdarzeniu reklamowym do zgłoszenia dotyczącym reklamy wybranej przez uruchomienia procesu wyboru reklamy przez: adSelectionId. Zdarzenie reklamowe to dowolne wystąpienie, które co się dzieje z reklamą powiązaną z parametrem adSelectionId. Nie ma gwarancji czas raportowania zdarzenia reklamowego. Raportowanie zdarzeń może być opóźnione i raporty mogą być w grupach.

Za pomocą ReportEventRequest#getKey() usługa pobierze reportingUri zarejestrowanego w registerAdBeacon. Więcej informacji o registerAdBeacon znajdziesz w dokumentacji firmy reportImpression(ReportImpressionRequest, Executor, OutcomeReceiver). Następnie usługa dołączy ciąg ReportEventRequest#getData() do treści żądania POST i wyślij prośbę. Treść żądania POST będzie zawierać parametr content-type o wartości text/plain, a dane będą przesyłane w trybie charset=UTF-8.

Dane wyjściowe są przekazywane przez odbiorcę, który zwraca pustą wartość Object dla udane uruchomienie lub Exception zawiera typ zgłoszonego wyjątku i parametr odpowiedni komunikat o błędzie.

Zgłoszona zasada IllegalArgumentException jest spowodowana przez nieprawidłowy argument wejściowy. odebrane przez interfejs API na potrzeby raportowania zdarzenia reklamowego.

Jeśli IllegalStateException zostanie wywołany z komunikatem o błędzie „Failure of AdSelection services.”, jest to spowodowane wewnętrzną awarią usługi wyboru reklamy.

Rzut LimitExceededException powoduje, że pakiet wywołujący przekracza dozwolone limity szybkości i jest ograniczane.

Jeśli SecurityException jest odrzucony, przyczyną jest brak autoryzacji rozmówcy lub prośba o przyznanie uprawnień.

Zdarzenia będą zgłaszane co najwyżej raz w ramach możliwie najlepszej obsługi.
Wymagane AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE

Parametry
request ReportEventRequest: ta wartość nie może być typu null.

executor Executor: ta wartość nie może być typu null.

receiver OutcomeReceiver: ta wartość nie może być typu null.

wyświetlenie raportu

public void reportImpression (ReportImpressionRequest request, 
                Executor executor, 
                OutcomeReceiver<ObjectException> receiver)

Powiadamia usługę o nowym wyświetleniu do zgłoszenia dotyczącym reklamy wybranej przez uruchomienia procesu wyboru reklamy przez: adSelectionId. Nie ma gwarancji, kiedy wyświetlenie. Raporty o wyświetleniach mogą być opóźnione i w grupach.

Aby obliczyć adres URL do raportowania zwycięskiego sprzedawcy, usługa pobiera kod JavaScript sprzedawcy funkcji logicznej z pola AdSelectionConfig#getDecisionLogicUri() znalezionego pod adresem ReportImpressionRequest.getAdSelectionConfig(). Następnie usługa wykonuje jedną z metod dostępnych w JS sprzedawcy o nazwie reportResult, udostępniając sygnały z urządzenia oraz ReportImpressionRequest#getAdSelectionConfig() jako parametry wejściowe.

Definicja funkcji reportResult to:

function reportResult(ad_selection_config, render_url, bid, contextual_signals) { return { 'status': status, 'results': {'signals_for_buyer': signals_for_buyer, 'reporting_url': reporting_url } }; }

Aby obliczyć URL raportowania zwycięskiego kupującego, usługa pobiera adres URL zwycięskiego kupującego. Logika JavaScript pobierana przez CustomAudience.getBiddingLogicUri() kupującego. Następnie usługa wykonuje jedną z funkcji dostępnych w pliku JS kupującego o nazwie reportWin, podając sygnały na urządzeniu, signals_for_buyer obliczone według parametru reportResult oraz szczegółowe z kolumny ReportImpressionRequest#getAdSelectionConfig() jako parametry wejściowe.

Definicja funkcji reportWin to:

function reportWin(ad_selection_signals, per_buyer_signals, signals_for_buyer, contextual_signals, custom_audience_reporting_signals) { return {'status': 0, 'results': {'reporting_url': reporting_url } }; }

Kupujący i sprzedawcy mogą się też zarejestrować, by otrzymywać raporty na temat zdarzeń reklamowych. W tym celu może wywołać funkcję registerAdBeacon udostępnianą przez platformę. reportWin i reportResult odpowiednio dla kupujących i sprzedawców.

Definicja funkcji registerBeacon to:

function registerAdBeacon(beacons), gdzie beacons to zapis ciągu tekstowego do pary ciągów znaków

W przypadku każdego zdarzenia reklamowego kupujący/sprzedawca, którego dotyczą raporty, powinien dodać do argumentu beacons parę event_key: event_reporting_uri, gdzie event_key to identyfikator tego konkretnego zdarzenia. Ta wartość (event_key) powinna być zgodna z ReportEventRequest#getKey(), gdy pakiet SDK wywołuje reportEvent(ReportEventRequest, Executor, OutcomeReceiver). Ponadto każdy element event_reporting_uri powinien zostać prawidłowo przeanalizowany do postaci Uri. Ten będzie wartością Uri przesłaną przy wywołaniu reportEvent(ReportEventRequest, Executor, OutcomeReceiver) przez pakiet SDK.

Gdy kupujący/sprzedawca doda wszystkie pary, dla których chce otrzymywać zdarzenia, może wywołaj registerAdBeacon(beacons), gdzie beacons to nazwa dyktowania i dodało pary.

registerAdBeacon wysyła TypeError w tych sytuacjach:

  1. Funkcja registerAdBeacon jest wywoływana więcej niż raz. Jeśli ten błąd jest wykrywany w reportWin/reportResult, zostanie zarejestrowany oryginalny zestaw par
  2. registerAdBeacon nie ma dokładnie 1 argumentu dyktowania.
  3. Zawartość 1 argumentu Dyktafon nie zawiera wszystkich par String: String.

Dane wyjściowe są przekazywane przez funkcję receiver, która zwraca pustą wartość Object dla udanego uruchomienia lub Exception zawiera typ zgłoszonego wyjątku i z odpowiednim komunikatem o błędzie.

Zgłoszona funkcja IllegalArgumentException jest spowodowana przez nieprawidłowy argument wejściowy interfejsu API w celu zgłoszenia wyświetlenia.

Jeśli IllegalStateException zostanie wywołany z komunikatem o błędzie „Failure of AdSelection services.”, jest to spowodowane wewnętrzną awarią usługi wyboru reklamy.

Rzut LimitExceededException powoduje, że pakiet wywołujący przekracza dozwolone limity szybkości i jest ograniczane.

Jeśli SecurityException jest odrzucony, przyczyną jest brak autoryzacji rozmówcy lub prośba o przyznanie uprawnień.

Wyświetlenia są raportowane co najwyżej raz w ramach możliwie najlepszej obsługi.
Wymagane AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE

Parametry
request ReportImpressionRequest: ta wartość nie może być typu null.

executor Executor: ta wartość nie może być typu null.

receiver OutcomeReceiver: ta wartość nie może być typu null.

selectAds

public void selectAds (AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig, 
                Executor executor, 
                OutcomeReceiver<AdSelectionOutcomeException> receiver)

Wybiera reklamę z wyników wcześniej uruchomionych wyborów dotyczących reklamy.

Dane wejściowe adSelectionFromOutcomesConfig są dostarczane przez pakiet SDK Google Ads, a obiekt AdSelectionFromOutcomesConfig jest przekazywany za pomocą wywołania Binder. Z tego powodu łączny rozmiar tych obiektów jest ograniczony do ograniczeń IPC Androida. Nieudane przeniesienie AdSelectionFromOutcomesConfig trafia TransactionTooLargeException.

Dane wyjściowe są przekazywane przez odbiorcę, który zwraca AdSelectionOutcome dla udanego uruchomienia lub Exception zawiera typ zgłoszonego wyjątku i z odpowiednim komunikatem o błędzie.

Dane wejściowe adSelectionFromOutcomesConfig zawierają:

  • Seller musi być zarejestrowanym AdTechIdentifier. W przeciwnym razie: IllegalStateException zostanie rzucony.
  • Funkcja List of ad selection ids powinna istnieć i pochodzić z selectAds(AdSelectionConfig, Executor, OutcomeReceiver) wywołań pochodzących z tej samej aplikacji. W przeciwnym razie IllegalArgumentException do weryfikacji danych wejściowych spowoduje wyświetlenie reklamy naruszającej zasady identyfikatory wyboru.
  • Selection logic URI, który może być zgodny z protokołem HTTPS lub wstępnie utworzonym wyborem reklamy schematy.

    Jeśli identyfikator URI jest zgodny ze schematem HTTPS, host powinien być zgodny ze schematem seller. W przeciwnym razie żądanie IllegalArgumentException zostanie odrzucone.

    Gotowe identyfikatory URI pozwalają zastąpić ogólną, gotową logikę wymaganą przez Skrypty JavaScript do usługi selectOutcome. Powinien następować gotowy identyfikator URI tego punktu końcowego:

    • ad-selection-prebuilt://ad-selection-from-outcomes/<name>?<script-generation-parameters>

    W przypadku przekazania nieobsługiwanego gotowego identyfikatora URI lub wyłączenia gotowej funkcji identyfikatora URI przez usługa to IllegalArgumentException.

    Pomocne informacje znajdziesz tutaj: AdSelectionFromOutcomesConfig.Builder#setSelectionLogicUri <name> i wymagane <script-generation-parameters>.

Zgłoszona zasada IllegalArgumentException jest spowodowana przez nieprawidłowy argument wejściowy. interfejsu API na potrzeby wyboru reklamy.

Jeśli IllegalStateException zostanie wywołany z komunikatem o błędzie „Failure of AdSelection services.”, jest to spowodowane wewnętrzną awarią usługi wyboru reklamy.

Żądanie TimeoutException jest wywoływane po przekroczeniu limitu czasu. podczas określania stawek, oceniania lub ogólnego wyboru reklamy w celu znalezienia zwycięskiej reklamy.

Rzut LimitExceededException powoduje, że pakiet wywołujący przekracza dozwolone limity szybkości i jest ograniczane.

Jeśli SecurityException jest odrzucony, przyczyną jest brak autoryzacji rozmówcy lub prośba o przyznanie uprawnień.
Wymagane AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE

Parametry
adSelectionFromOutcomesConfig AdSelectionFromOutcomesConfig: ta wartość nie może być typu null.

executor Executor: ta wartość nie może być typu null. Za pomocą tego interfejsu są wysyłane zdarzenia wywołania zwrotnego i detektora Executor, co pozwala łatwo kontrolować, który wątek jest . Aby wysyłać zdarzenia przez wątek główny aplikacji, możesz użyć Context.getMainExecutor() W przeciwnym razie podaj Executor, który wysyła do odpowiedniego wątku.

receiver OutcomeReceiver: ta wartość nie może być typu null.

selectAds

Dodano na poziomie API 34.
public void selectAds (AdSelectionConfig adSelectionConfig, 
                Executor executor, 
                OutcomeReceiver<AdSelectionOutcomeException> receiver)

Uruchamia proces wyboru reklamy na urządzeniu, aby wybrać reklamę remarketingową dla dzwoniącego. aplikacji.

Dane wejściowe adSelectionConfig są dostarczane przez pakiet SDK Google Ads, a obiekt AdSelectionConfig jest przekazywany za pomocą wywołania Binder. Z tego powodu łączny rozmiar tych obiektów jest powiązana z ograniczeniami IPC Androida. Jeśli nie uda się przenieść domeny AdSelectionConfig, wyświetli się TransactionTooLargeException.

Dane wejściowe adSelectionConfig zawierają element Decision Logic Uri, który może następować Może to być schemat HTTPS lub jeden z gotowych schematów wyboru reklamy.

Jeśli identyfikator URI jest zgodny ze schematem HTTPS, host powinien być zgodny ze schematem seller. W przeciwnym razie IllegalArgumentException zostanie odrzucony.

Gotowe identyfikatory URI pozwalają zastąpić ogólną, gotową logikę wymaganą przez Skrypty JavaScript do usługi scoreAds. Powinien następować gotowy identyfikator URI tego punktu końcowego:

  • ad-selection-prebuilt://ad-selection/<name>?<script-generation-parameters>

W przypadku przekazania nieobsługiwanego gotowego identyfikatora URI lub wyłączenia gotowej funkcji identyfikatora URI przez usługa to IllegalArgumentException.

Sprawdź AdSelectionConfig.Builder#setDecisionLogicUri, aby sprawdzić obsługiwane <name> i wymagane <script-generation-parameters>.

Dane wyjściowe są przekazywane przez odbiorcę, który zwraca AdSelectionOutcome dla udanego uruchomienia lub Exception zawiera typ zgłoszonego wyjątku i z odpowiednim komunikatem o błędzie.

Zgłoszona zasada IllegalArgumentException jest spowodowana przez nieprawidłowy argument wejściowy. interfejsu API na potrzeby wyboru reklamy.

Jeśli IllegalStateException zostanie wywołany z komunikatem o błędzie „Failure of AdSelection services.”, jest to spowodowane wewnętrzną awarią usługi wyboru reklamy.

Żądanie TimeoutException jest wywoływane po przekroczeniu limitu czasu. podczas określania stawek, oceniania lub ogólnego wyboru reklamy w celu znalezienia zwycięskiej reklamy.

Rzut LimitExceededException powoduje, że pakiet wywołujący przekracza dozwolone limity szybkości i jest ograniczane.

Jeśli SecurityException jest odrzucony, przyczyną jest brak autoryzacji rozmówcy lub prośba o przyznanie uprawnień.
Wymagane AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE

Parametry
adSelectionConfig AdSelectionConfig: ta wartość nie może być typu null.

executor Executor: ta wartość nie może być typu null. Za pomocą tego interfejsu są wysyłane zdarzenia wywołania zwrotnego i detektora Executor, co pozwala łatwo kontrolować, który wątek jest . Aby wysyłać zdarzenia przez wątek główny aplikacji, możesz użyć Context.getMainExecutor() W przeciwnym razie podaj Executor, który wysyła do odpowiedniego wątku.

receiver OutcomeReceiver: ta wartość nie może być typu null.

updateHistogramAdCounterHistogram

public void updateAdCounterHistogram (UpdateAdCounterHistogramRequest updateAdCounterHistogramRequest, 
                Executor executor, 
                OutcomeReceiver<ObjectException> outcomeReceiver)

Aktualizuje histogramy licznika reklamy, która została wcześniej wybrana przez wywołanie funkcji selectAds(android.adservices.adselection.AdSelectionConfig, java.util.concurrent.Executor, android.os.OutcomeReceiver).

Histogramy licznika są używane podczas wyboru reklamy do filtrowania limitu wyświetleń na użytkownika reklamy kandydujące. Reklamy, których limity wyświetleń na użytkownika zostaną osiągnięte lub przekroczone, są usuwane z określania stawek podczas wyboru reklamy.

Histogramy liczników można aktualizować tylko w przypadku reklam określonych przez dany element adSelectionId zwrócony przez ostatnie wywołanie reklamy FLEDGE z tej samej aplikacji wywołującej.

Wartość SecurityException jest zwracana przez outcomeReceiver, jeśli:

  1. aplikacja nie zadeklarowała odpowiednich uprawnień w pliku manifestu lub
  2. aplikacja lub podmiot wskazany przez callerAdTechIdentifier nie są autoryzowane korzystanie z interfejsu API.
. Jeśli wywołanie nie, to IllegalStateException jest zwracany przez outcomeReceiver nie pochodzą z aplikacji z aktywnością na pierwszym planie.

Wartość LimitExceededException jest zwracana przez funkcję outcomeReceiver, jeśli wywołanie przekracza ograniczenie interfejsu API aplikacji wywołującej.

We wszystkich innych przypadkach błędu outcomeReceiver zwraca pustą wartość Object. Aby chronić prywatność użytkowników, błędy wewnętrzne nie będą wysyłane za pośrednictwem wyjątek.
Wymagane AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE

Parametry
updateAdCounterHistogramRequest UpdateAdCounterHistogramRequest: ta wartość nie może być typu null.

executor Executor: ta wartość nie może być typu null. Za pomocą tego interfejsu są wysyłane zdarzenia wywołania zwrotnego i detektora Executor, co pozwala łatwo kontrolować, który wątek jest . Aby wysyłać zdarzenia przez wątek główny aplikacji, możesz użyć Context.getMainExecutor() W przeciwnym razie podaj Executor, który wysyła do odpowiedniego wątku.

outcomeReceiver OutcomeReceiver: ta wartość nie może być typu null.