Open Measurement -Android SDK

5
(2)

Android OM SDK文档

这些是Android Open Measurement SDK的集成说明。如果要将现有集成移植到OM SDK的最新版本,请参阅迁移指南

支持的版本

OM SDK支持Android API 14,Android 4.01,Ice Cream Sandwich及更高版本

最初设定

在继续进行具体的广告格式说明之前,请执行以下设置步骤:

导入SDK

当然,第一步是将OM SDK添加到您的应用或广告SDK。要集成的SDK工件应该是在IAB门户上生成的命名空间生成的输出(请参阅IAB OMSDK快速入门入门文档)。您可以使用任何标准方法(例如模块导入)将此[.AAR]工件包含到Android Studio项目中,等等。

初始化SDK

您应该在应用或SDK生命周期中尽早实施这些步骤。

请注意,OM SDK只能在主UI线程上使用。初始化SDK,创建其对象和调用其方法时,请确保您位于主线程上。

1.激活SDK。

第一步是初始化OM SDK。通过传入SDK版本和应用程序的上下文来激活OM SDK:

boolean activated = Omid.activate(applicationContext);
if (!activated) {
  // SDK failed to activate. Handle appropriately.
}

注意:IllegalArgumentException如果参数为null ,则此方法调用将引发。

2.获取OM SDK JS库。

使用首选方法(Volley,Retrofit等)加载OM SDK JavaScript库。例如,使用Volley,我们检索资源并保存:

String OMID_JS_SERVICE_URL = context.getString(R.string.omid_js_service);

StringRequest stringRequest = new StringRequest(Request.Method.GET, OMID_JS_SERVICE_URL,
  new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        OMID_JS_SERVICE_CONTENT = response;
    }
  },
  new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {

    }
  });
RequestQueue queue = Volley.newRequestQueue(context);
queue.add(stringRequest);

我们建议您在初始化SDK之后立即执行此步骤,因为在创建任何跟踪会话之前,您将需要JS库可用。

请注意,只有在注入OM SDK JS库客户端时,才需要执行此步骤;如果仅使用WebView广告格式,则不一定是正确的。这是因为WebView广告格式(不是本地格式)允许注入服务器端。如果您确实是在服务器端注入JS库(即在广告响应本身中),则可以跳过此步骤。

请注意,在集成本机OM SDK时,必须使用相同或更高版本的OM SDK JavaScript-理想情况下,可以部署IAB Tech Lab的最新JavaScript补丁版本

3.确定您的集成。

创建一个Partner对象来标识您的集成。集成时,IAB技术实验室将为您分配一个唯一的合作伙伴名称,因此这是您在此处应使用的值。

版本字符串应以语义版本控制格式表示集成版本。对于广告SDK,此名称应与SDK的语义版本相同。对于应用发布者,此版本应与您的应用版本相同。

try {
  Partner partner = Partner.createPartner(PARTNER_NAME, PARTNER_SDK_OR_APP_VERSION);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

广告格式实施步骤

以下各节介绍了如何对各种广告格式实施衡量。他们假设您已经导入了库并实现了初始化代码。

WebView显示

以下步骤介绍了如何为WebView(HTML)广告创建跟踪会话。

1.初始化WebView。

初始化WebView,并在WebView中启用JavaScript:

WebView adView;
adView = (WebView) findViewById(R.id.webviewad);
adView.getSettings().setJavaScriptEnabled(true);

2.检索广告响应。 

照常检索广告响应。出于后续步骤的目的,广告响应应为HTML字符串。

String adResponseHtmlString = "<html>...</html>";

3.将OM SDK JS库注入广告响应中。 

检索广告响应HTML之后,将您在上一步中检索到的OM SDK JS库注入广告响应中,并将其加载到WebView中:

try {
  String htmlString = ScriptInjector.injectScriptContentIntoHtml(OMID_JS_SERVICE_CONTENT,
    adResponseHtml);
  adView.loadDataWithBaseURL("", htmlString, "text/html", "UTF-8", "");
} catch (IllegalArgumentException | IllegalStateException e) {
  e.printStackTrace();
}

注意,如初始化步骤2所述,如果已在服务器端注入JS服务库,则无需执行此步骤。

4.创建并配置广告会话。 

按照以下概述的步骤顺序创建会话。

注意:为了防止稍后启动会话时出现问题,必须等待WebView完成加载OM SDK JavaScript后再创建AdSession。早于创建会话可能导致无法向WebView内的验证脚本发送事件(印象等)信号。避免此问题的最简单方法是AdSession在webview回调中创建WebViewClient.onPageFinished()。或者,如果实现可以从WebView接收HTML5 DOMContentLoaded事件,则它可以AdSession在该事件的消息处理程序中创建。

// In an implementation of WebViewClient:
public void onPageFinished(WebView webView, String url) {
  if (adSession != null) return;

  /* Create the session.
   * Eliding the steps for brevity. Please reference for full steps below.
   */
  adSession = AdSession.createAdSession(adSessionConfiguration, context);
  adSession.registerAdView(webView);

  // Start the session
  adSession.start();
}

创建上下文

首先,创建一个上下文,该上下文引用您在设置步骤中创建的合作伙伴对象和广告的WebView:

try {
  String customReferenceData = "";
  String contentUrl = ... 
  AdSessionContext context = AdSessionContext.createHtmlAdSessionContext(partner, adView,
    contentUrl, customReferenceData);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

创建会话配置

OMID-1.3要求指定广告会话的广告素材类型和展示类型,以及负责用信号通知展示事件的层。对于WebView展示广告,通常是本机层。多媒体广告的mediaEventsOwner值应为Owner.NONE。我们将在后续步骤中了解事件的实际信号:

try {
  AdSessionConfiguration adSessionConfiguration =
    AdSessionConfiguration.createAdSessionConfiguration(CreativeType.HTML_DISPLAY, ImpressionType.BEGIN_TO_RENDER, 
    Owner.NATIVE, Owner.NONE, false);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

建立工作阶段

最后,创建会话本身:

try {
  adSession = AdSession.createAdSession(adSessionConfiguration, context);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

5.设置跟踪可见性的视图。 

设置视图

设置跟踪可见性的视图。对于WebView广告,这将是WebView本身。对于原生广告,这将是包含广告所有相关元素的原生视图:

try {
  adSession.registerAdView(adView);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

记录障碍物

如果有任何您认为属于广告的本机元素,例如关闭按钮,一些徽标文字或其他装饰,则应将它们注册为友好的障碍物,以防止它们计入广告的覆盖范围。这适用于视图层次结构中的所有祖先视图或对等视图(adView的所有子视图将自动视为广告的一部分):

try {
  adSession.addFriendlyObstruction(logoView);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

更新视图参考

如果由于全屏展开或类似原因在随后的时间视图发生了变化,则应始终将adView引用更新为当时合适的内容:

try {
  adSession.registerAdView(adView);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

6.开始会话。

开始会话尚未触发印象-它只是为跟踪做好准备。在调度任何事件之前启动会话很重要。

通常,您应该在完成上述步骤后立即开始会话:

adSession.start();

如上一步中所述,这应该在WebView加载之后发生。

7.发出已加载事件的信号。

理想情况下,这会在广告会话加载之初的广告会话中发生,但可以在展示之前将其发送

try {
  AdEvents adEvents = AdEvents.createAdEvents(adSession);
  adEvents.loaded();
} catch (IllegalArgumentException | IllegalStateException e) {
  e.printStackTrace();
}

8.发出印象事件信号。

通常,“印象”的定义是在广告呈现中使用的,因此,当您要调度事件时,很可能会出现这种情况。该事件仅应调度一次,并且尝试多次触发它是一个错误。

try {
  adEvents.impressionOccurred();
} catch (IllegalStateException e) {
  e.printStackTrace();
}

9.停止会话。

印象完成后停止会话,广告将被销毁。请注意,在您停止会话后,尝试重新启动它或在完成的会话上触发印象是错误的。

请注意,结束OMID广告会话会将消息发送到在集成提供的Web视图内运行的验证脚本。为了使验证脚本有足够的时间来处理sessionFinish事件,集成必须在结束会话后至少1.0秒内保持对Web视图的强引用。

adSession.finish();
adSession = null;

WebView视频

WebView Video的实现说明在许多方面与本机端的WebView Display相似。主要区别在于,WebView Video通常将需要在WebView内的JavaScript层内进行一些其他实现。这种额外的JavaScript配置可能会在您的广告服务器中大量执行,以便在您的应用或SDK收到广告响应时,将必要的组件嵌入到广告响应中。

以下实现说明假定JavaScript层负责这些操作:

  • 解析广告对负载测量脚本的响应
  • 印象登记
  • 播放进度通知

展示事件和播放进度也可以从本机层处理。您可以AdSessionConfiguration通过传递各个事件的适当所有者(本机或JavaScript)来指示在创建实例时负责事件处理的层 。如前所述,本指南假定您将在JavaScript层中实现上面引用的职责。如果您想要有关如何在本机层中执行相同操作的说明,请参考本机视频实施说明。

1.创建一个SessionClient。

在HTML广告响应中,请创建一个SessionClient。您将与SessionClient中的类进行交互以发信号通知事件并传递元数据:

var sessionClient;

try {
  sessionClient = OmidSessionClient[SESSION_CLIENT_VERSION];
} catch (e) {}

if (!sessionClient) {
  return;
}

const AdSession = sessionClient.AdSession;
const Partner = sessionClient.Partner;
const Context = sessionClient.Context;
const VerificationScriptResource = sessionClient.VerificationScriptResource;
const AdEvents = sessionClient.AdEvents;
const MediaEvents = sessionClient.MediaEvents;

2.检索广告响应。

请参阅WebView显示的此步骤。本指南假定广告响应将包含HTML(将呈现视频播放器)以及VAST组件。

3.将OM SDK JS库注入广告响应中。

请参阅WebView Display的此步骤

4.创建并配置广告会话。

请参阅WebView Display的此步骤

请注意,您将需要指定负责信令事件的层与用于WebView Display的层不同。通常,对于WebView视频,JavaScript层将同时发出印象和视频事件的信号。

与WebView显示一样,您应确保仅在收到WebView加载事件后才进行会话建立和创建。请参考WebView显示说明的这一步骤以获取更多详细信息。

此外,您应该为isolateVerificationScripts参数确定适当的值。true值的作用是将度量资源放置在无法访问视频广告元素的沙盒iframe中。如果指定false,它们将被放置在相同来源的iframe中。该FAQ有此设置进一步的细节。

try {
  // The creative and impression types will be defined by the javascript layer
  AdSessionConfiguration adSessionConfiguration =
    AdSessionConfiguration.createAdSessionConfiguration(CreativeType.DEFINED_BY_JAVASCRIPT, ImpressionType.DEFINED_BY_JAVASCRIPT, 
    Owner.JAVASCRIPT, Owner.JAVASCRIPT, false);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

5.设置跟踪可见性的视图。

请参阅WebView Display的此步骤

6.准备测量资源。 

以下说明假定广告响应完全按照4.1规范或在“扩展”节点中使用了VAST 4.1验证节点。确切的详细信息不在本文档的讨论范围之内,其他Tech Lab指南和文档也提供了详细信息。

如果您无法使用VAST或4.1节点,则必须找到另一种方法来将该信息嵌入广告响应中,并且可能需要与每个评估供应商一起确定加载标签的正确机制。

以这个4.1验证节点为例:

<Verification vendor="vendorKey">
  <JavaScriptResource apiFramework="omid">
    <![CDATA[https://measurement.domain.com/tag.js]]>
  </JavaScriptResource>
  <VerificationParameters>
    <![CDATA[{...}]]>
  </VerificationParameters>
</Verification>

首先创建一个数组,以保存您将在下一步中解析的一个或多个测量资源:

var resources = [];

然后,为广告响应中的每个Verification节点创建一个VerificationScriptResource实例,如下所示:

var vendorKey = ...; // parsed from "vendor" attribute
var params = ...;    // parsed from VerificationParameters as a string
var url = ...;       // parsed from JavaScriptResource
var resource = new VerificationScriptResource(url, vendorKey, params);
resources.add(resource);

请注意,vendorKey必须与vendorVerification节点中的属性匹配,以使OM SDK能够将VerificationParameters中的特定于展示的元数据传递给正确的验证脚本。

7.初始化JS广告会话。

接下来,创建JS广告会话,并传递您在上一步中从广告响应中解析的衡量资源。您将需要使用此会话实例,以便订阅本机会话开始事件以及加载资源。

创建会话

var partner = new Partner(PARTNER_NAME, PARTNER_SDK_OR_APP_VERSION);
var context = new Context(partner, resources);
var adSession = new AdSession(context);

请注意,Partner此处的参数应与您在本机层中传递的参数匹配。

设置视频元素

为了确保正确地衡量广告,您应该在视频元素可用时提供参考。正确的步骤将取决于视频元素是在顶部窗口中还是在跨域iframe中。

顶部窗户

只需使用Context先前创建的对象提供视频元素参考:

const videoElement = document.getElementById(...);
context.setVideoElement(videoElement);
跨网域iframe

当视频元素位于跨域iframe中时,有两种可能的情况:

  1. Session和元件都是跨域iframe内。
  2. 您可以Session在顶部窗口以及跨域iframe中使用ad元素创建一个。

在第一种情况下,您应该使用预定义的类名称标记iframe omid-element。这将确保在顶层运行的OM SDK JS服务能够找到iframe。下一步是指示元素在iframe中的位置。这可以通过将元素的偏移量传递到Session您在iframe中创建的实例来完成:

// elementBounds is a rect {x, y, width, height} that indicates the position of the video element
// inside the iframe.
adSession.setElementBounds(elementBounds)

在第二种情况下,您应该将对iframe的引用传递给 顶层的SessionandContext实例:

const iframeElement = document.getElementById(...);
context.setSlotElement(iframeElement);

在iframe中,为iframe中的Session实例提供元素的偏移量:

adSession.setElementBounds(elementBounds)

创建事件发布者

此外,您还应该在此时创建事件通知对象,该对象将用于发出印象和回放事件的信号。

const adEvents = new AdEvents(adSession);
const mediaEvents = new MediaEvents(adSession);

8.开始会话。

在标记JS层中的任何事件之前,请在本机层中启动会话。

adSession.start();

9.注册广告加载事件。

加载视频后,向加载事件发送信号,并传递以下元数据:

adSession.registerSessionObserver((event) => {
  if (event.type === "sessionStart") {
    // setup code
    ...
    // Set the impression/creative type here.
    if (event.data.creativeType === 'definedByJavaScript') {
      adSession.setCreativeType('video');
    }
    if (event.data.impressionType === 'definedByJavaScript') {
      adSession.setImpressionType('beginToRender');
    }        
    // load event
    adEvents.loaded({ isSkippable: skippable, skipOffset:offsetForSkip, isAutoPlay: autoplay, position: position });
    // other event code
    ...
  } else if (event.type === "sessionError") {
    // handle error
  } else if (event.type === "sessionFinish") {
    // clean up
  }
});

请注意,我们在会话观察器回调中调度事件。这是为了确保在收到会话开始之前,我们不会调度任何事件。必须仅在会话开始事件之后分派JS层中的所有事件。您还应该检查事件类型,以确保正确处理每种事件类型。

10.发出印象事件信号。

准备就绪后,请使用在上一步中创建的事件对象来通知印象事件。表示印象的标准时间是在广告呈现时,也就是广告开始播放视频之前。如上一步所述,您还必须确保在收到会话开始事件之后才调度印象事件。

// this should be within the same callback as the load event from the previous step
adSession.registerSessionObserver((event) => {
  if (event.type === "sessionStart") {
    ...
    adEvents.impressionOccurred();
    ...
  } else if (event.type === "sessionError") {
    // handle error
  } else if (event.type === "sessionFinish") {
    // clean up
  }
})

请注意,由于我们将JavaScript层指定为展示事件所有者,因此我们是从JavaScript而不是本机层发出该事件的信号。

11.信号播放进度事件。

随着回放的进行,为回放进度事件调度通知。您至少应酌情发出以下事件的信号:

  • 开始
  • 四分之一[25%]
  • 中点[50%]
  • 第三四分位[75%]
  • 完成[仅当广告达到100%时]
  • 暂停[用户启动]
  • 简历[用户发起]
  • bufferStart [由于缓冲而暂停播放]
  • bufferEnd [在缓冲后继续播放]
  • 播放器音量变化
  • 跳过[任何提早终止播放]

播放事件

监视视频播放以在适当的时间发出进度事件的信号(上面的参考项目符号列表)。通常,事件的时间与行业定义的标准VPAID和VAST相对应。

请注意,开始事件与其他事件有所不同,因为它需要广告的持续时间以及广告素材的数量。请确保在您调度此事件时有视频播放器持续时间可用。

if (!isNaN(player.duration)) {
  mediaEvents.start(player.duration, player.volume);
} else {
  // wait until duration is available to start
}

请注意,该mediaPlayerVolume参数应仅是播放器元素的音量。SDK会自动检测设备体积。播放器的音量应在0到1之间规范化。如果广告素材音量仅支持静音或取消静音,那么对mediaPlayerVolume参数使用以下内容就足够了:

  mediaEvents.start(player.duration, player.muted ? 0 : player.volume);

交易量

关于数量变化,您仅负责通知广告素材数量变化。请参阅mediaPlayerVolume以上部分中的注释。

mediaEvents.volumeChange(player.volume);

状态变更

最后,您还负责发出任何玩家状态变化的信号。如果播放器既可以扩展到全屏模式又可以退出全屏模式,则您将需要发出以下状态更改信号:

// entering fullscreen
mediaEvents.playerStateChange("fullscreen");

// exiting fullscreen
mediaEvents.playerStateChange("normal");

原生显示

为了清楚起见,当我们提到本机显示时,我们指的是非WebView展示广告格式,其中广告的组成部分是本机(非HTML)UI元素。

1.检索广告响应。

照常检索广告响应。对于原生广告,广告响应通常可以采用JSON的形式,其中包括一些元数据和指向广告资产的URL。

2.准备测量资源。

从概念上讲,此处的步骤与“本地视频”的同一步骤相似。与视频不同,没有可用于显示的标准广告响应格式,因此您必须找到另一种方法来确定哪些测量资源应跟踪给定的广告展示,但是在任何情况下,您很可能将这些信息作为广告的一部分返回。一种或另一种方式的广告响应。

3.创建和配置广告会话

按照以下步骤序列创建会话:

创建上下文

首先,创建一个上下文,该上下文引用您在设置步骤中创建的合作伙伴对象和广告的本机视图:

String customReferenceData = "";
String contentUrl = ... 
try {
  AdSessionContext adSessionContext = AdSessionContext.createNativeAdSessionContext(partner,
    OMID_JS_SERVICE_CONTENT, verificationScriptResources, contentUrl, customReferenceData);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

创建会话配置

OMID-1.3要求指定广告会话的广告素材类型和展示类型,以及负责用信号通知展示事件的层。对于原生展示广告,这是原生层。多媒体广告的mediaEventsOwner值应为Owner.NONE。

try {
  AdSessionConfiguration adSessionConfiguration =
    AdSessionConfiguration.createAdSessionConfiguration(CreativeType.NATIVE_DISPLAY, ImpressionType.BEGIN_TO_RENDER, 
    Owner.NATIVE, Owner.NONE, false);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

建立工作阶段

最后,创建会话本身:

try {
  adSession = AdSession.createAdSession(adSessionConfiguration, adSessionContext);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

4.设置跟踪可见性的视图。

请参阅WebView显示的这一部分

5.开始会议

开始会话尚未触发印象-它只是为跟踪做好准备。在调度任何事件之前启动会话很重要。

通常,您应该在完成上述步骤后立即开始会话:

adSession.start();

6.发出已加载事件的信号。

理想情况下,这会在广告会话加载之初的广告会话中发生,但可以在展示之前将其发送

try {
  AdEvents adEvents = AdEvents.createAdEvents(adSession);
  adEvents.loaded();
} catch (IllegalArgumentException | IllegalStateException e) {
  e.printStackTrace();
}

7.发出印象事件信号。

通常,“印象”的定义是在广告呈现中使用的,因此,当您要调度事件时,很可能会出现这种情况。该事件仅应调度一次,并且尝试多次触发它是一个错误。请注意,仅应在开始会话后执行此操作。

try {
  adEvents.impressionOccurred();
} catch (IllegalStateException e) {
  e.printStackTrace();
}

7.停止会话。

印象完成后停止会话,广告将被销毁。请注意,在您停止会话后,尝试重新启动它或在完成的会话上触发印象是错误的。

adSession.finish();
adSession = null;

本机视频 

请按照以下说明正确跟踪本地视频广告。

1.检索广告响应。

照常检索广告响应。通常,这将是VAST文档。

2.准备测量资源。 

在此步骤中,您将确定应使用哪些评估资源来跟踪广告。总体而言,这些说明与WebView视频说明的这一步骤相似。与以前一样,我们将假定广告响应包含一个或多个VAST 4.1中指定的Verification节点。

首先,我们创建一个数组来保存脚本:

List<VerificationScriptResource> verificationScriptResources = new ArrayList<>();

然后解析每个Verification节点,并将相关联的节点添加VerificationScriptResource到资源数组中:

final String url = ...;
final String vendorKey = ...;
final String params = ...;
try {
  VerificationScriptResource verificationScriptResource =
    VerificationScriptResource.createVerificationScriptResourceWithoutParameters(vendorKey,
      url, params);
  verificationScriptResources.add(verificationScriptResource);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

3.创建并配置广告会话。

请参阅机显示实施说明的这一步骤

请注意,您将要指定与本机显示所提供的示例不同的媒体事件所有者。

try {
  AdSessionConfiguration adSessionConfiguration =
    AdSessionConfiguration.createAdSessionConfiguration(CreativeType.VIDEO, ImpressionType.BEGIN_TO_RENDER, 
    Owner.NATIVE, Owner.NATIVE, false);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
}

4.设置跟踪可见性的视图。

请参阅WebView Display的此步骤

5.创建事件发布者实例。

您将使用这些实例来发出印象和播放事件的信号,因此创建它们后,您将要保留它们。

try {
  AdEvents adEvents = AdEvents.createAdEvents(adSession);
  MediaEvents mediaEvents = MediaEvents.createMediaEvents(adSession);
} catch (IllegalArgumentException | IllegalStateException e) {
  e.printStackTrace();
}

6.开始会话。

如前所述,发信号通知会话开始尚未触发印象。这样只会为会话做准备。您将希望这样做尽可能接近完成前面的步骤。

adSession.start();

7.注册广告加载事件。

调度已加载的事件,以表明广告已加载并可以播放。最好的做法是仅在会话开始后才触发此事件(以及所有其他事件)。

final VastProperties vProps = VastProperties.createVastPropertiesForSkippableMedia(...);
try {
  adEvents.loaded(vProps);
} catch (Exception e) {
}

8.注册印象。

发出印象开始的信号。通常,这应该在广告开始播放之前发生。

try {
  adEvents.impressionOccurred();
} catch (IllegalArgumentException | IllegalStateException e) {
  e.printStackTrace();
}

9.信号播放进度事件。

随着回放的进行,为回放进度事件调度通知。您至少应酌情发出以下事件的信号:

  • 开始
  • 四分之一[25%]
  • 中点[50%]
  • 第三四分位[75%]
  • 完成[仅当广告达到100%时]
  • 暂停[用户启动]
  • 简历[用户发起]
  • bufferStart [由于缓冲而暂停播放]
  • bufferEnd [在缓冲后继续播放]
  • 播放器音量变化
  • 跳过[任何提早终止播放]

播放事件

监视视频播放以在适当的时间发出进度事件的信号(上面的参考项目符号列表)。通常,事件的时间与行业定义的标准VPAID和VAST相对应。

请注意,开始事件与其他事件有所不同,因为它需要广告的持续时间以及广告素材的数量:

try {
  mediaEvents.start(getDuration(), PLAYER_VOLUME_0_TO_1);
} catch (IllegalStateException e) {
  e.printStackTrace();
}

交易量

SDK会自动检测设备体积。关于数量变化,您仅负责通知广告素材数量变化:

try {
  mediaEvents.volumeChange(PLAYER_VOLUME_0_TO_1);
} catch (IllegalArgumentException | IllegalStateException ex) {
  ex.printStackTrace();
}

状态变更

最后,您还负责发出任何玩家状态变化的信号。如果播放器既可以扩展到全屏模式又可以退出全屏模式,则您将需要发出以下状态更改信号:

// enter fullscreen
mediaEvents.playerStateChange(PlayerState.FULLSCREEN);

// exit fullscreen
mediaEvents.playerStateChange(PlayerState.NORMAL);
}

请注意,应适当处理上述方法中的异常情况。

10.停止会话。

在广告播放完成或终止时停止会话。

adSession.finish();
adSession = null;

音频广告 

音频广告的设置类似于相应的视频广告,但有少量例外…

  • CreativeType应该设置为AUDIO
  • 某些ImpressionType值(例如VIEWABLE,ONE_PIXEL)不适用
  • volumeChange事件很关键,每当播放器音量发生变化时,集成代码应发送该事件(SDK自动检测到系统音量发生变化)
  • 提醒一下,仅应使用新的OMID-1.3 API

验证OM SDK实施

验证步骤是集成过程的重要组成部分。请按照此处的说明进行操作。

分发

本节针对的是广告SDK,这些SDK将在集成OM SDK之后希望分发它们的SDK,以便在其发布者网络中进行评估。尽管广告SDK很可能选择将OM SDK作为单独的组件进行分发,但是与将OM SDK嵌入其中相比,这通常会提供较差的可用性。以下说明详细说明了如何在可能的情况下嵌入OM SDK。请注意,OM SDK确实使用了命名空间,因此可以将其独立包含在单个应用程序的多个广告SDK中,而不会出现问题。

常问问题

常见问题解答在这里

这篇文章有用吗?

平均评分 5 / 5. 投票数: 2

到目前为止还没有投票!成为第一位评论此文章。

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

分类:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据