Reklamy audio

Pakiet IMA HTML5 SDK obsługuje reklamy audio o podobnej konfiguracji jak reklamy wideo, ale z kilkoma kluczowymi różnicami. Więcej informacji o każdym aspekcie konfiguracji IMA, który nie został omówiony w tym przewodniku, znajdziesz w przewodniku HTML5 dla początkujących.

Używanie tagu <audio> do odtwarzania treści

Konstruktor AdDisplayContainer przyjmuje drugi argument o nazwie videoElement, który IMA śledzi jako odtwarzacz treści. Ten argument może przyjmować tag <video> lub <audio>. W przypadku treści i reklam audio zalecamy użycie tagu <audio> do tworzenia tagu AdDisplayContainer. Jeśli masz treści wideo, możesz użyć tagu <video> do wyświetlania reklam audio i wideo:

index.html

<audio id="audio-player"></audio>
<div class="ad-container"></div>

ads.js

audioPlayer = document.getElementById('audio-player');
adContainer = document.getElementById('ad-container');
adDisplayContainer = new google.ima.AdDisplayContainer(adContainer,
audioPlayer);

Ukrywanie elementu AdDisplayContainer

Pakiet IMA HTML5 SDK nadal wymaga AdDisplayContainer, nawet jeśli reklamy lub treści nie zawierają części wyświetlania. Dlatego zalecamy ukrycie AdDisplayContainer. Przykład sposobu ukrywania elementu:

style.css

.ad-container {
  display: none;
}

Elementy sterujące niestandardowe

Ponieważ AdDisplayContainer jest ukryty, do obsługi odtwarzania podczas przerw na reklamy potrzebne są elementy sterujące niestandardowe. AdsManager zawiera metody, które można wykorzystać do implementacji tych niestandardowych ustawień:

Obsługa reklam możliwych do pominięcia

Ponieważ nie ma widocznego elementu AdDisplayContainer, pakiet IMA SDK nie może wyświetlić przycisku Pomiń reklamę. Aby obsługiwać reklamy możliwe do pominięcia, zastosuj te metody IMA:

Poniżej znajdziesz przykładowy kod, który pokazuje, jak to zrobić.

ads.js

Możesz skonfigurować funkcję updateSkippable, aby określić, czy i kiedy można pominąć reklamę. Ta funkcja powinna być wywoływana w przypadku każdego zdarzenia IMA.AD_PROGRESS Więcej informacji o konfigurowaniu detektorów zdarzeń IMA znajdziesz w przewodniku Wprowadzenie.

function onAdsManagerLoaded(adsManagerLoadedEvent) {
  adsManager = adsManagerLoadedEvent.getAdsManager(
    audioPlayer);

  ...

  adsManager.addEventListener(
    google.ima.AdEvent.Type.AD_PROGRESS,
    onAdEvent);

  ...

}

function onAdEvent(adEvent) {
  const ad = adEvent.getAd();
  if (ad) {
    currentAd = ad; // currentAd is defined outside of this functions scope.
  }
  switch (adEvent.type) {

    ...

    case google.ima.AdEvent.Type.AD_PROGRESS:
      // See https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/interface/google.ima.AdProgressData
      const adProgressData = adEvent.getAdData();

      updateSkippable(
        adProgressData.currentTime,
        currentAd.getSkipTimeOffset()
      );
      break;
    ...

  }
}

/**
   * Called when there may be a change in the skippable state.
   * @param {number} currentTime The current time of the
   * currently playing ad.
   * @param {number} skipTimeOffset The number of seconds of playback
   * before the ad becomes skippable. -1 is returned for non skippable
   * ads or if this is unavailable.
   */
  updateSkippable(currentTime, skipTimeOffset) {
    const isAdSkippable = skipTimeOffset !== -1;
    const isSkipCurrentlyAllowed = adsManager.getAdSkippableState();
    const timeTillSkipInSeconds = Math.ceil(skipTimeOffset - currentTime);
    updateSkipUI(
        isAdSkippable, isSkipCurrentlyAllowed, timeTillSkipInSeconds);
  }

W odróżnieniu od reklam wideo IMA nie może udostępniać przycisku pomijania reklam audio. Deweloperzy muszą dodać niestandardowe UI dla reklam możliwych do pominięcia. Można to zrobić za pomocą prostego tagu <button>. Funkcja updateSkipUI aktualizuje przycisk pomijania w zależności od tego, czy reklama jest możliwa do pominięcia, czy jest obecnie możliwa do pominięcia i ile czasu zostało do momentu, gdy stanie się możliwa do pominięcia. Korzysta ona z klasy '.hidden', która nie jest udostępniana przez IMA. Klasa .hidden dodaje display: none; do <button>.

/**
 * Updates the skip button UI.
 * @param {boolean} isAdSkippable if the current ad is a skippable ad.
 * @param {boolean} isSkipCurrentlyAllowed if the ad can be skipped now.
 * @param {number} timeTillSkipInSeconds time until the ad can be skipped in
 * seconds.
 */
updateSkipUI(isAdSkippable, isSkipCurrentlyAllowed, timeTillSkipInSeconds) {
  if (isAdSkippable) {
    skipButton.classList.remove('hidden');
    if (isSkipCurrentlyAllowed) {
      skipButton.textContent = 'Skip ad';
      skipButton.disabled = false;
    } else {
      skipButton.textContent = `Skip in ${timeTillSkipInSeconds} seconds`;
      skipButton.disabled = true;
    }
  } else {
    skipButton.classList.add('hidden');
  }
}

Na koniec ustaw listenera na kliknięcia przez użytkownika niestandardowego przycisku pomijania. Aby pominąć reklamy, wywołaj funkcję adsManager.skip().

skipButton.addEventListener('click', () => {
  adsManager.skip();
});

Oto główne zmiany, które należy wprowadzić, aby skonfigurować pakiet IMA SDK pod kątem reklam audio. Odpowiedzi na pytania dotyczące problemów z implementacją znajdziesz na forum technicznym IMA SDK.