Wysyłanie żądań i wyświetlanie reklam możliwych do pominięcia za pomocą pakietu SDK CAF DAI jest dość skomplikowane, ponieważ wymaga określenia, czy używana kombinacja nadawców i odbiorców ma możliwość wyświetlenia przycisku pominięcia i wchodzenia z nim w interakcję.
Pakiet SDK będzie automatycznie starał się wykryć, czy bieżący odbiornik może bezpośrednio renderować przycisk pominięcia i wchodzić z nim w interakcję. Aby jednak określić, czy którykolwiek z dołączonych nadawców może wyświetlać reklamy możliwe do pominięcia, przełącz się w atrybucie imaRequestData.senderCanSkip
.
We wszystkich przykładach z pakietem SDK CAF DAI nadawcaCanSkip jest przekazywany bezpośrednio od nadawcy jako część obiektu multimedialnego. Jest to celowo uproszczona implementacja, która sprawdza się w przypadku pojedynczego nadawcy, ale w rzeczywistych aplikacjach odbiornik CAF może być podłączony do wielu aplikacji nadawcy. Nadawca, który umieszcza plik multimedialny w kolejce, może nie być już połączony, gdy obiekt multimedialny zostanie załadowany i zostanie wysłane żądanie strumienia.
Bardziej zaawansowany odbiorca może sprawdzić, które typy stowarzyszonych nadawców obsługują pomijanie, a które nie. Następnie sprawdzi podczas wczytywania, czy jacyś nadawcy z możliwością pominięcia są obecnie powiązani z odbiorcą.
Przykład (pojedynczy nadawca):
...
let getStreamRequest = (request) => {
const imaRequestData = request.media.customData;
let streamRequest = null;
if (imaRequestData.assetKey) {
// Live stream
streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
streamRequest.assetKey = imaRequestData.assetKey;
} else if (imaRequestData.contentSourceId) {
// VOD stream
streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
streamRequest.contentSourceId = imaRequestData.contentSourceId;
streamRequest.videoId = imaRequestData.videoId;
}
if (streamRequest && imarequestdata.ApiKey) {
streamRequest.ApiKey = imarequestdata.ApiKey;
}
if (streamRequest && imarequestdata.senderCanSkip) {
streamRequest.senderCanSkip = imaRequestData.senderCanSkip;
}
return streamRequest;
};
...
Przykład (obsługa wielu nadawców):
...
let getStreamRequest = (request) => {
const imaRequestData = request.media.customData;
let streamRequest = null;
if (imaRequestData.assetKey) {
// Live stream
streamRequest = new google.ima.cast.dai.api.LiveStreamRequest();
streamRequest.assetKey = imaRequestData.assetKey;
} else if (imaRequestData.contentSourceId) {
// VOD stream
streamRequest = new google.ima.cast.dai.api.VODStreamRequest();
streamRequest.contentSourceId = imaRequestData.contentSourceId;
streamRequest.videoId = imaRequestData.videoId;
}
if (streamRequest && imarequestdata.ApiKey) {
streamRequest.ApiKey = imarequestdata.ApiKey;
}
let senders = castContext.getSenders();
let senderCanSkip = (sender) => {
const skippableUserAgents = [
"iOS CastSDK",
"Android CastSDK"
];
// trim user agent to just include device
let userAgent = sender.userAgent.explode(',')[0];
return skippableUserAgents.includes(userAgent);
};
if (streamRequest && senders.some(senderCanSkip)) {
streamRequest.senderCanSkip = imarequestdata.senderCanSkip;
}
return streamRequest;
};
...
W końcu to wydawcy są odpowiedzialni za a ponieważ wszyscy nadawcy z możliwością pominięcia mogą odłączyć się między momentem przesłania żądania strumienia a odtworzeniem reklamy, warto dołączyć do zdarzenia STARTED
moduł obsługi, który będzie sprawdzać, czy reklamę można pominąć i czy nadawcy i odbiorca nie obsługują tej funkcji. Moduł obsługi może automatycznie pominąć takie reklamy, jeśli się pojawią. Tak zaawansowana implementacja wykracza jednak poza zakres obsługi dynamicznego wstawiania reklam (CAF DAI).
Domyślnie w takim przypadku użytkownik może zainicjować pominięcie, najpierw łącząc się z nadawcą, który obsługuje tę funkcję, a następnie klikając wyświetlony przycisk pominięcia.