0

更新:
经过大量研究,我改为问这个问题。它触及了问题的核心。在 android 上的 react native 中使用 Google IMA webview 时未显示


我们正在使用react-native-video来使用 android 上的 exoplayer 来显示带有添加的视频。问题是,当广告可跳过时,exoplayer 不显示跳过按钮。要解决这个问题,我们需要知道广告是否可跳过并显示自定义跳过按钮。这就是我卡住的地方。如果不更改 exoplayer ima-extention 的源代码,我将无法访问此信息。

首选的解决方案是更改ImaAdsLoader **.onAdEvent() 以在加载添加公开已加载的广告时广播事件。然后监视播放进度并显示/隐藏自定义跳过按钮。

有没有办法在不更改 ima 扩展代码的情况下获取信息?

 @Override
  public void onAdEvent(AdEvent adEvent) {
    AdEventType adEventType = adEvent.getType();
    boolean isLogAdEvent = adEventType == AdEventType.LOG;
    if (DEBUG || isLogAdEvent) {
      Log.w(TAG, "onAdEvent: " + adEventType);
      if (isLogAdEvent) {
        for (Map.Entry<String, String> entry : adEvent.getAdData().entrySet()) {
          Log.w(TAG, "  " + entry.getKey() + ": " + entry.getValue());
        }
      }
    }
    if (adsManager == null) {
      Log.w(TAG, "Dropping ad event after release: " + adEvent);
      return;
    }
    Ad ad = adEvent.getAd();
    switch (adEvent.getType()) {
      case LOADED:

        //This line is what I need
        eventListener.onAdLoaded(ad);   

        // The ad position is not always accurate when using preloading. See [Internal: b/62613240].
        AdPodInfo adPodInfo = ad.getAdPodInfo();
        int podIndex = adPodInfo.getPodIndex();
        adGroupIndex = podIndex == -1 ? adPlaybackState.adGroupCount - 1 : podIndex;
        int adPosition = adPodInfo.getAdPosition();
        int adCountInAdGroup = adPodInfo.getTotalAds();
        adsManager.start();
        if (DEBUG) {
          Log.d(TAG, "Loaded ad " + adPosition + " of " + adCountInAdGroup + " in ad group "
              + adGroupIndex);
        }
        adPlaybackState.setAdCount(adGroupIndex, adCountInAdGroup);
        updateAdPlaybackState();
        break;
      case CONTENT_PAUSE_REQUESTED:
        // After CONTENT_PAUSE_REQUESTED, IMA will playAd/pauseAd/stopAd to show one or more ads
        // before sending CONTENT_RESUME_REQUESTED.
        imaPausedContent = true;
        pauseContentInternal();
        break;
      case STARTED:
        if (ad.isSkippable()) {
          focusSkipButton();
        }
        break;
      case TAPPED:
        if (eventListener != null) {
          eventListener.onAdTapped();
        }
        break;
      case CLICKED:
        if (eventListener != null) {
          eventListener.onAdClicked();
        }
        break;
      case CONTENT_RESUME_REQUESTED:
        imaPausedContent = false;
        resumeContentInternal();
        break;
      case ALL_ADS_COMPLETED:
        // Do nothing. The ads manager will be released when the source is released.
      default:
        break;
    }
  }
4

0 回答 0