创建横幅和原生广告的方式是相同的,它们都是使用相同的 com.xy.sdk.View 来创建,只是属性值有所区别。

注意:这里 com.xy.sdk 是默认的包名。您在使用时,请替换为您在 cms 开发者面板中填写的包名。下同

通过 XML 创建横幅广告

在 Android 的 xml 布局文件中,在需要放置横幅广告的地方,插入以下代码即可:

android:id="@+id/banner_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:unit_size="banner_size"
app:unit_id="209A03F87BA3B4EB82BEC9E5F8B41383" />

其中 unit_size 设置为横幅广告的尺寸("banner_size"),unit_id 为横幅广告位的 id,注意不要填错。

通过 XML 创建原生广告

在 Android 的 xml 布局文件中,在需要放置原生广告的地方,插入以下代码即可:

android:id="@+id/native_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:unit_size="native_size"
app:unit_id="98738D91D3BB241458D3FAE5A5BF7D34" />

其中 unit_size 设置为原生广告的尺寸("native_size"),其中 unit_id 为横幅广告位的 id,注意不要填错。

其它属性

除了 unit_size,unit_id 属性之外,还有 2 个特别的属性: unit_width 和 unit_height。

这 2 个属性跟 unit_size 一样都是用来设置广告尺寸的。

对于原生广告 unit_size 还可以设置其它的一些预设枚举值:

native_2to1_size
native_3to2_size
native_16to9_size
native_4to3_size
native_1to1_size
native_11to4_size

如果上面这些预设值都不合适,你可以使用 unit_width 和 unit_height 来设置合适的广告宽高值。

unit_width 和 unit_height 的值为整数,没有单位。

native_size 是一个特殊的值,其它取值都是固定宽高比的,而 native_size 是自适应内容宽高的。如果您的广告宽高比尺寸是固定的,请不要使用 native_size 这个尺寸预设值。

获取对象

在 Java 代码中,通过:

com.xy.sdk.View bannerView = findViewById(R.id.banner_view);
com.xy.sdk.View nativeView = findViewById(R.id.native_view);

可以获取到该广告对象。

直接通过 Java 代码创建横幅、原生广告

import android.app.Activity;
import android.view.ViewGroup;
import android.os.Bundle;
import com.xy.sdk.Size;
import com.xy.sdk.View;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
...
public class MainActivity extends Activity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
ViewGroup container = findViewById(R.id.container);
...
View bannerView = new View(this);
bannerView.setSize(Size.BANNER);
container.addView(bannerView, MATCH_PARENT, WRAP_CONTENT);
bannerView.load("CA868C57C6D992A2DDAAB7EAEE63D18B");
View nativeView = new View(this);
nativeView.setSize(Size.NATIVE_3TO2);
container.addView(nativeView, MATCH_PARENT, WRAP_CONTENT);
nativeView.load("98738D91D3BB241458D3FAE5A5BF7D34");
...
}
...
}

资源回收

为了能够及时回收资源,在该广告对象所在的 Activity 对象中,加入以下方法:

@Override
protected void onDestroy() {
bannerView.destroy();
nativeView.destroy();
super.onDestroy();
}
@Override
protected void onPause() {
bannerView.pause();
nativeView.pause();
super.onPause();
}
@Override
protected void onResume() {
bannerView.resume();
nativeView.resume();
super.onResume();
}

如果不加以上语句,对于带有视频的原生广告,视频可能仍然会在后台播放而无法关闭。

setSize 方法

该方法与使用 XML 中的 app:unit_size, app:unit_width 和 app:unit_height 属性设置广告尺寸是等价的。

load 方法

该方法用于设置广告位 id,并且加载广告。该方法只能执行一次。

多次执行该方法时,只有第一次设置的广告位 id 有效,后面的设置无效,而且也不会重复加载广告。

另外,当通过 XML 的 app:unit_id 属性设置了广告位 id 的情况下,试图通过执行该方法来修改广告位 id 也是无效的。

load 方法还有一个重载版本,重载版本的第一个参数跟上面的方法一致,第二个参数表示是否自动显示,如果您需要提前加载,延迟显示,可以调用该方法时,设置改参数的值为 false,则广告加载完之后,不会自动显示,当调用 show 或者 render 方法时才会显示,显示之前可以通过 isLoaded 方法来判断是否已经加载完毕,但通常你不需要调用它,因为在 show 和 render 方法内部有同样的判断,除非您需要在 if 语句的 else 语句中有其它的操作。

show 和 render 方法的异同点

show 和 render 方法都应该在 onLoaded 事件发生之后调用才会有效,在此之前调用是无效的。

它们两个的作用都是在广告加载之后,开发者可以手动控制广告的显示。但它们之间是有区别的。

show 方法在展示广告之后,会自动进行展示上报。而 render 方法不会自动进行展示上报。

show 方法会在展示广告之前检查广告视图是否处于可见状态,只有当处于可见状态时,show 方法才会进行广告展示并上报。而 render 方法不会做该检查,而是直接将广告内容显示在广告视图中。

render 方法因为不会进行展示上报,因此,开发者需要手动调用 impressionReport 方法进行展示上报。

impressionReport 方法

impressionReport 方法应该在 onRendered 事件发生之后调用才会有效,在此之前调用是无效的。

impressionReport 方法是与 render 方法对应的,如果不使用 render 方法,也不要使用 impressionReport 方法进行手动展示上报。

开发者不论在何种情况下,对 impressionReport 方法进行调用,都会进行展示上报,即使在广告处于不可见状态时也会进行展示上报,该方法不会在客户端对展示上报进行过滤,但是会将跟广告可见状态相关的各种数据上报给服务器,如果服务器发现展示上报时广告处于不可见状态,会判定为无效展示,如果无效展示过多,会判定为作弊行为。

开发者使用该方法时,请按照正确的步骤进行,否则,后果自负。

横幅广告轮转显示

默认情况下,广告不会自动轮转显示,如果需要对横幅广告开启自动轮转显示,可以使用 setCarouselModeEnabled 方法开启该功能,这样横幅广告就会根据后台设置的轮转时间(15秒或30秒),进行自动轮转显示了。

横幅广告轮转动画

默认情况下,横幅广告是直接显示出来的,如果需要在广告轮转时,有一个滑入滑出的动画效果,可以使用 setAnimationEnabled 方法开启该功能。

原生广告视频控制

对于原生广告可以通过 getVideoController 方法返回一个 VideoController 对象。

hasVideo 方法

如果原生广告中包含视频,该方法返回 true,否则返回 false。

play 方法

如果原生广告中包含视频,可以使用该方法开始视频播放。

pause 方法

如果原生广告中包含视频,可以使用该方法暂停视频播放。

mute 方法

如果原生广告中包含视频,可以通过该方法控制视频是否静音。设置为 true 为静音,设置为 false 取消静音。

isPlaying 方法

用来判断视频是否处于播放状态。

isEnded 方法

用来判断视频是否已播放完毕。

getMetadata 方法

如果原生广告中包含视频,通过该方法可以返回该视频的元信息。

注意:只有当视频元信息加载完毕之后,该方法才能返回有效值,否则,返回 null。

原生模板样式

原生广告的样式通常需要跟用户 app 的风格一致,因此,我们对原生广告提供了自定义 HTML 模板功能(实际上我们对所有类型的广告都提供了自定义 HTML 模板功能,只是其它类型的广告,即使不使用该功能也基本能满足需求)。因此,当您使用原生广告时,最好是按照自己 app 的风格来定制自己专用的模板。尤其是原生视频广告,默认模板使用的是 HTML 默认的视频控制栏,其美观度欠佳,您很可能需要自己定制样式才能满足需求。

如果您有好的样式,也可以推荐给我们,如果您推荐的样式能够满足大多数用户需求的话,我们会考虑更新默认的模板。