Show Menu
主题×

解决在广告之间出现 main:play 的问题

问题

在一些广告跟踪方案中,您可能会遇到在一个广告结束与另一个广告开始之间意外发生
main:play
调用的情况。如果广告完成调用与下一个广告开始调用之间的延迟超过 250 毫秒,则 Media SDK 将回退到发送
main:play
调用。如果这种回退到
main:play
的情况发生在前置广告时间,则内容开始量度可能会提前引入。
对于如上所述的广告空白,由于它与任何广告内容均不存在重叠,因此 Media SDK 会将其解读为主内容。Media SDK 上未引入任何广告信息,并且播放器处于播放状态。如果没有广告信息并且播放器处于播放状态,那么 Media SDK 会默认将出现的空白时长计入主内容的时长。VA SDK 不能将该播放时长计为无广告信息的时长。

识别

在使用 Adobe Debug 或网络数据包探查器(例如 Charles)时,如果您在前置广告时间看到按此顺序出现的以下心率调用:
  • 会话开始:
    s:event:type=start
    s:asset:type=main
  • 广告开始:
    s:event:type=start
    s:asset:type=ad
  • 广告播放:
    s:event:type=play
    s:asset:type=ad
  • 广告结束:
    s:event:type=complete
    s:asset:type=ad
  • 主内容播放:
    s:event:type=play
    s:asset:type=main
    (意外)
  • 广告开始:
    s:event:type=start
    s:asset:type=ad
  • 广告播放:
    s:event:type=play
    s:asset:type=ad
  • 广告结束:
    s:event:type=complete
    s:asset:type=ad
  • 主内容播放:
    s:event:type=play
    s:asset:type=main
    (预期)

解决办法

延迟触发广告完成调用。
在播放器内部处理此空白:延迟为第一个广告调用
trackEvent:AdComplete
,然后紧接着为第二个广告调用
trackEvent:AdStart
。当第一个广告完成后,应用程序应延迟调用
AdComplete
事件。请确保在广告时间为上一个广告调用
trackEvent:AdComplete
。如果播放器能识别出当前的广告资产是广告时间的最后一个广告,则可立即调用
trackEvent:AdComplete
。此解决办法将导致计入前一个广告单元的广告用时额外多出,多出的时间不会超过 1 秒。
在广告时间(包括前置广告)开始时:
  • 为广告时间创建
    adBreak
    对象实例;例如,
    adBreakObject
  • 调用
    trackEvent(MediaHeartbeat.Event.AdBreakStart, adBreakObject);
在每个广告资产开始时:
  • 调用
    trackEvent(MediaHeartbeat.Event.AdComplete);
    应仅在前一个广告未完成时调用此实例。请考虑使用布尔值维护前一个广告的“
    isinAd
    ”状态。
  • 为广告资产创建广告对象实例:例如,
    adObject
  • 填充广告元数据
    adCustomMetadata
  • 调用
    trackEvent(MediaHeartbeat.Event.AdStart, adObject, adCustomMetadata);
  • 调用
    trackPlay()
    (如果这是前置广告时间的第一个广告)。
在每个广告资产完成时:
  • 请勿进行调用
    如果应用程序知道该资产是广告时间的最后一个广告,请在此时调用
    trackEvent:AdComplete
    ,并在
    trackEvent:AdBreakComplete
    中跳过设置
    trackEvent:AdComplete
在广告跳过时:
  • 调用
    trackEvent(MediaHeartbeat.Event.AdSkip);
在广告时间完成时:
  • 调用
    trackEvent(MediaHeartbeat.Event.AdComplete);
    如果前面在上一次
    trackEvent:AdComplete
    调用中已经执行此步骤,那么可以跳过此调用。
  • 调用
    trackEvent(MediaHeartbeat.Event.AdBreakComplete);