Solicitar e exibir anúncios puláveis com o SDK de DAI do CAF é uma tarefa um pouco complexa, porque exige identificar se a combinação de remetentes e destinatários em uso pode exibir e interagir com um botão "Pular".
O SDK fará o possível para detectar automaticamente se o receptor atual pode renderizar e interagir diretamente com o 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 de DAI do CAF, o resellerCanSkip é transmitido diretamente do remetente como parte do objeto de mídia. Essa é uma implementação propositalmente simplificada que funciona bem para um único remetente. No entanto, em aplicativos reais, um receptor de CAF pode ser anexado a vários aplicativos de remetente e o remetente que enfileira um arquivo de mídia pode não estar mais conectado quando esse objeto de mídia for carregado e a solicitação de stream for feita.
Um receptor mais avançado pode monitorar quais tipos de remetentes afiliados aceitam ou não pular e verifica no tempo de carregamento se algum remetente que permite pular estão atualmente anexados ao destinatário.
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;
};
...
Em última análise, os editores são responsáveis pelos recursos Além disso, como é possível que todos os remetentes puláveis se desvinculem entre o momento em que a solicitação de streaming é feita e o momento em que o anúncio é reproduzido, você pode anexar um gerenciador ao evento STARTED
para verificar se um anúncio é pulável e se os remetentes e o destinatário não oferecem suporte ao recurso pulável. Esse gerenciador poderá ignorar automaticamente esses anúncios, se eles aparecerem. No entanto, essa implementação avançada está além do escopo do suporte à DAI do CAF.
Por padrão, se esse caso extremo ocorrer, o usuário ainda poderá tecnicamente iniciar uma ação de pular. Para isso, primeiro conecte um remetente compatível com o recurso pulável e, em seguida, clique no botão "Pular" exibido.