Solicitar e mostrar anúncios puláveis com o SDK da DAI do CAF é uma tarefa complexa, porque exige que a combinação de remetentes e receptores em uso possa ser exibida e interagir com um botão "Pular".
O SDK fará os esforços automáticos para detectar se o receptor atual pode renderizar e interagir diretamente com um botão "Pular". No entanto, o editor precisa determinar se algum dos remetentes anexados pode exibir anúncios puláveis alternando o atributo imaRequestData.senderCanSkip
.
Em todas as amostras do SDK da DAI do CAF, o remetenteCanSkip é transmitido diretamente do remetente, como parte do objeto de mídia. Essa é uma implementação simplificada que funciona bem para um único remetente. No entanto, em aplicativos reais, um receptor CAF pode ser anexado a vários apps de remetente, e o remetente que enfileira um arquivo de mídia pode não estar mais conectado quando esse objeto de mídia é carregado e a solicitação de stream é feita.
Um receptor mais avançado pode acompanhar quais tipos de remetentes afiliados oferecem suporte a serem ignorados e quais não são. Além disso, é possível verificar no momento do carregamento se algum remetente com recurso de pular está anexado no momento.
Exemplo (remetente único):
...
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;
};
...
Exemplo (suporte a vários remetentes):
...
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;
};
...
Por fim, os editores são responsáveis pela experiência dos usuários. Como é possível desconectar todos os remetentes puláveis quando a solicitação de stream é feita e quando o anúncio é exibido, anexe um gerenciador ao evento STARTED
para verificar se um anúncio é pulável e os remetentes e os receptores não são compatíveis com a possibilidade de pular. Esse gerenciador pode pular automaticamente esses anúncios, se eles aparecerem. No entanto, essa implementação avançada está além do escopo da compatibilidade com a DAI do CAF.
Por padrão, se ocorrer um caso extremo, o usuário ainda poderá tecnicamente iniciar uma ação de pular, conectando primeiro um remetente com suporte à possibilidade de pular e, em seguida, clicando no botão "Pular".