广告规则

IMA Android SDK 支持完全自动化的广告播放列表。此功能 按照 Google Ad Manager 。它还大大简化了视频播放器代码 (包括前贴片广告、中贴片广告和后贴片广告)。

  • 在 Ad Manager 中投放广告时,可以指定各种广告规则 如“始终在内容开头处播放广告插播时间点”或“播放一个 每 30 分钟内容插播一分钟广告”。
  • 请求广告时,广告服务器可返回广告播放列表。SDK 会处理播放列表,并自动安排 。
  • 由于 Android 使用相同的视频播放器来播放广告和内容, 如果您打算实施广告规则,则必须保存 内容,然后在广告结束时跳转到该位置。 请务必在您的视频中实现 VideoAdPlayer 接口 。这样可确保在 Ad Manager 中指定的时间。
    private boolean playingContent = true;
    private int contentPosition = -1;
    private List callbacks =
        new ArrayList();
    
    @Override
    public void addCallback(VideoAdPlayerCallback callback) {
      callbacks.add(callback);
    }
    
    @Override
    public void removeCallback(VideoAdPlayerCallback callback) {
      callbacks.remove(callback);
    }
    
    public void loadContent() {
      playingContent = true;
      load(CONTENT_URL);
    }
    
    @Override
    public void loadAd(String mediaUrl) {
      playingContent = false;
      load(mediaUrl);
    }
    
    public void pauseContent() {
      savePosition();
      pause();
    }
    
    @Override
    public void pauseAd() {
      pause();
    }
    
    private void pause() {
      myVideoView.pause();
      for (VideoAdPlayerCallback callback : callbacks) {
        callback.onPause();
      }
    }
    
    public void resumeContent() {
      loadContent();
      if (contentPosition > 0) {
        restorePosition();
      }
      resume();
    }
    
    @Override
    public void resumeAd() {
      resume();
    }
    
    private void resume() {
      myVideoView.start();
      for (VideoAdPlayerCallback callback : callbacks) {
        callback.onResume();
      }
    }
    
    public void savePosition() {
      contentPosition = myVideoView.getCurrentPosition();
    }
    
    public void restorePosition() {
      myVideoView.seekTo(contentPosition);
    }
    
  • CONTENT_PAUSE_REQUESTEDCONTENT_RESUME_REQUESTED 事件用于在广告插播时间点播放时暂停和恢复内容。推荐 参阅相关的 API 文档 了解这些事件的详情。

注意:当内容播放完毕或 则在用户已停止播放时,请务必调用 AdsLoader.contentComplete ,以便向 SDK 表明内容已完成。SDK 然后播放后贴片广告插播时间点(如果已安排)。通过 当所有广告插播时间点触发时引发 ALL_ADS_COMPLETED 事件 已播放过的内容。另外请注意,内容跟踪会在 系统会调用 init(),并且您应始终调用 init() 然后再播放内容