Este guia mostra como implementar sua própria interface do usuário personalizada usando o SDK do IMA para HTML5. Para isso, é necessário desativar a interface padrão, configurar uma nova interface personalizada e, em seguida, preencha a nova interface com informações de anúncio obtidas na pelo SDK. Este guia se baseia no exemplo simples para HTML5.
Adicionar os elementos da interface ao DOM
Antes de escrever qualquer JavaScript, modifique o HTML e a folha de estilo para adicionar os novos elementos da interface para os botões Saiba mais, Pular anúncio e timer de contagem regressiva:
index.html
<div id="mainContainer">
<div id="content">
<video id="contentElement">
<source src="https://storage.googleapis.com/gvabox/media/samples/stock.mp4"></source>
</video>
</div>
<div id="adContainer"></div>
<div id="customUi">
<div id="adClick" class="customUIButton">Click me!</div>
<div id="skipButton" class="customUIButton"></div>
<div id="adCountdown"></div>
</div>
</div>Style.css
...
#customUI {
display: none;
text-align: center;
width: 100%;
height: 100%;
}
.customUIButton {
position: absolute;
right: 0px;
background-color: red;
}
#adClick {
top: 0px;
width: 100px;
height: 50px;
line-height: 3em;
cursor: pointer;
}
#skipButton {
top: 213px;
width: 150px;
height: 35px;
line-height: 2em;
display: none;
}
#adCountdown {
position: absolute;
left: 0px;
bottom: 10px;
width: 120px;
height: 20px;
background-color: red;
}
...
É possível estilizar sua interface de usuário de forma diferente, se você quiser. a interface acima é meramente uma exemplo.
Desativar a interface integrada
Comece dizendo ao SDK que você quer que ele desative a interface integrada.
ads.js
function onAdsManagerLoaded(adsManagerLoadedEvent) { const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.disableUi = true; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager( videoContent, adsRenderingSettings); ... }
Mostrar e ocultar a interface personalizada quando permitido
Alguns anúncios do Google, como anúncios do AdSense, não permitem uma interface do usuário personalizada e sempre
para renderizar a própria interface. Na folha de estilo acima da interface personalizada div está
ficam ocultos por padrão. Exibir somente quando o anúncio em reprodução estiver ocultando seu
e ocultar a interface personalizada após cada anúncio, caso o anúncio seguinte não
permitir uma interface personalizada:
ads.js
let mainContainerDiv, currentAd, customUiDiv; ... function setUpIMA() { customUiDiv = document.getElementById('customUi'); mainContainerDiv = document.getElementById('mainContainer'); mainContainerDiv.addEventListener('click', () => { // Need this to resume ads after clickthrough. adsManager.resume(); }); ... } function onAdsManagerLoaded(adsManagerLoadedEvent) { ... adsManager.addEventListener( google.ima.AdEvent.Type.SKIPPED, onAdEvent); } function onAdEvent(adEvent) { switch(adEvent.type) { ... case google.ima.AdEvent.Type.STARTED: currentAd = adEvent.getAd(); if (currentAd.isUiDisabled()) { showCustomUi(); } break; case google.ima.AdEvent.Type.COMPLETE: case google.ima.AdEvent.Type.SKIPPED: hideCustomUi(); break; } } function showCustomUi() { customUiDiv.style.display = 'block'; } function hideCustomUi() { customUiDiv.style.display = 'none'; }
Adicionar lógica ao botão Saiba mais
O primeiro componente de interface que você precisa conectar é o botão Saiba mais. Esse elemento notifica o SDK ao receber um clique:
ads.js
let clickDiv;
...
function setUpIma() {
...
clickDiv = document.getElementById('adClick');
clickDiv.addEventListener('click', (e) => {
// Prevent this from propagating to the customUi div. That would cause the ad to
// resume immediately after the user clicks it, and we want it to pause.
e.stopPropagation();
adsManager.clicked();
});
...
}Adicionar lógica ao timer de contagem regressiva
Em seguida, conecte o timer de contagem regressiva usado na pesquisa do tempo restante em anúncios.
ads.js
let countdownDiv, uiUpdateInterval; ... function setUpIma() { ... countdownDiv = document.getElementById('adCountdown'); ... } function showCustomUi() { uiUpdateInterval = setInterval(updateUi, 100); customUiDiv.style.display = 'block'; } function hideCustomUi() { if (uiUpdateInterval) { clearInterval(uiUpdateInterval); } customUiDiv.style.display = 'none'; } function updateUi() { updateCountdown(); } function updateCountdown() { let countdownText = 'Ad '; const adPodInfo = currentAd.getAdPodInfo(); const totalAds = adPodInfo.getTotalAds(); if (totalAds > 1) { const position = adPodInfo.getAdPosition(); countdownText += position + ' of ' + totalAds; } const remainingTime = Math.ceil(adsManager.getRemainingTime()); countdownText += ' (' + remainingTime + 's)'; countdownDiv.innerText = countdownText; }
Adicionar lógica ao botão Skip Ad.
Por fim, configure o botão Skip Ad (Pular anúncio). Esse botão só é exibido para anúncios puláveis e seu contador regressivo deve atingir 0 antes de ser ativado para permitir que o usuário pule um anúncio.
ads.js
let skipDiv; // Set this infinitely high to fail early <=0 checks. let timeTillSkip = Number.POSITIVE_INFINITY; ... function setUpIma() { ... skipButton = document.getElementById('skipButton'); skipButton.addEventListener('click', (e) => { // Prevent this from propagating to the customUi div. That would cause the ad to // resume immediately after the user clicks it, and we want it to pause. e.stopPropagation(); if (timeTillSkip <= 0) { adsManager.skip(); } }); ... } function showCustomUi() { if (currentAd.isSkippable()) { skipButton.innerText = ''; skipButton.style.display = 'block'; } else { skipButton.style.display = 'none'; } ... } function updateUi() { updateCountdown(); if (currentAd.isSkippable()) { updateSkip(); } } function updateSkip() { const currentTime = currentAd.getDuration() - adsManager.getRemainingTime(); timeTillSkip = Math.ceil(currentAd.getSkipTimeOffset() - currentTime); if (timeTillSkip > 0) { skipButton.innerText = "Skip this ad in " + timeTillSkip + '...'; skipButton.style.cursor = 'default'; } else { skipButton.innerText = "Skip ad"; skipButton.style.cursor = 'pointer'; } }
Solução de problemas
- Você tem uma tag de exemplo que desabilite a interface de anúncios?
- Você pode copiar o URL deste exemplo de tag e cole na implementação do IMA.
- Não consigo desativar a interface padrão.
- Verifique se você definiu
adsRenderingSettings.disableUicomotruee a transmitimos paragetAdsManager. Verifique sead.isUiDisabled()retornatrue. Além disso, é preciso ativar sua rede no Ad Manager para desativar interface de anúncio. Se esse recurso estiver ativado, o VAST terá umExtensionque parece como: Se ainda estiver com problemas, verifique com seu gerente de contas para confirmar se estão habilitados. Alguns tipos de anúncios exigem uma interface específica. que esses anúncios retornam com um valor<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension>
<UiHideable>de 0. Se você encontrar isso, sua equipe de tráfego precisará fazer alterações para garantir que esses tipos de anúncios não sejam veiculados.