原生廣告
原生廣告是創(chuàng)建與應(yīng)用內(nèi)容融于一體的廣告形式,支持您自由定制界面。
添加原生廣告
原生廣告需要通過(guò)NativeAdLoader類(lèi)獲取。
1.構(gòu)建NativeAdLoader。
NativeAdLoader類(lèi)提供了NativeAdLoader.Builder類(lèi),可用于設(shè)置廣告位ID、設(shè)置自定義選項(xiàng)和構(gòu)建NativeAdLoader對(duì)象。
示例代碼如下所示:
// "testy63txaom86"為專(zhuān)用的測(cè)試廣告位ID,App正式發(fā)布時(shí)需要改為正式的廣告位ID
NativeAdLoader.Builder builder = new NativeAdLoader.Builder(this, "testy63txaom86");
builder.setNativeAdLoadedListener(new NativeAd.NativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
// 廣告獲取完成后調(diào)用
...
}
}).setAdListener(new AdListener() {
@Override
public void onAdFailed(int errorCode) {
// 廣告獲取失敗時(shí)調(diào)用
...
}
});
NativeAdLoader nativeAdLoader = builder.build();
當(dāng)獲取廣告成功后,SDK會(huì)調(diào)用NativeAd.NativeAdLoadedListener監(jiān)聽(tīng)器的onNativeAdLoaded()方法返回NativeAd對(duì)象。
當(dāng)獲取廣告失敗后,SDK會(huì)調(diào)用AdListener監(jiān)聽(tīng)器的onAdFailed()方法。
2.獲取廣告。
NativeAdLoader提供loadAd()和loadAds()兩種方法獲取廣告。
·loadAd()請(qǐng)求單個(gè)原生廣告。
AdParam是唯一的參數(shù),代碼如下所示:
nativeAdLoader.loadAd(new AdParam.Builder().build());
調(diào)用loadAd()后,SDK將對(duì)添加的監(jiān)聽(tīng)器方法進(jìn)行一次成功或失敗的回調(diào)。
·loadAds()請(qǐng)求多個(gè)原生廣告。
loadAds()請(qǐng)求有兩個(gè)參數(shù),除AdParam外,還有請(qǐng)求加載的廣告數(shù)量,最大為5。SDK返回的廣告數(shù)量將會(huì)小于等于所請(qǐng)求的廣告數(shù)量,并且廣告皆不相同。
代碼如下所示:
nativeAdLoader.loadAds(new AdParam.Builder().build(),5);
調(diào)用loadAds()后,監(jiān)聽(tīng)器將會(huì)根據(jù)返回的廣告?zhèn)€數(shù)進(jìn)行多次回調(diào)。請(qǐng)求多個(gè)廣告時(shí),可以在回調(diào)代碼中使用NativeAdLoader.isLoading()方法來(lái)判斷廣告是否已獲取完成。代碼如下所示:
// "testy63txaom86"為專(zhuān)用的測(cè)試廣告位ID,App正式發(fā)布時(shí)需要改為正式的廣告位ID
NativeAdLoader.Builder builder = new NativeAdLoader.Builder(this, "testy63txaom86");
NativeAdLoader nativeAdLoader = builder.setNativeAdLoadedListener(new NativeAd.NativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
if (nativeAdLoader.isLoading()) {
// nativeAdLoader仍在獲取廣告
...
} else {
// nativeAdLoader完成廣告獲取
...
}
}
}).build();
nativeAdLoader.loadAds(new AdParam.Builder().build(), 5);
說(shuō)明
再次使用NativeAdLoader獲取廣告前,請(qǐng)確保先前的請(qǐng)求已經(jīng)完成。
3.展示原生廣告。
獲取到廣告后在監(jiān)聽(tīng)器的回調(diào)方法中展示原生廣告,需要在每個(gè)廣告視圖的一角展示“為什么看到此廣告”的圖標(biāo)“i”或者“不再顯示該廣告”的圖標(biāo)“x”,并且必須展示廣告標(biāo)識(shí)。
以下是展示原生廣告的步驟:
a.定義原生廣告布局。
需要自定義一個(gè)布局用于展示NativeAd中的素材。
說(shuō)明
必須將NativeView作為原生廣告的根布局,否則會(huì)影響廣告收益。
對(duì)于使用RelativeLayout來(lái)展示素材視圖的原生廣告,其視圖層次結(jié)構(gòu)示例如下:
<com.huawei.hms.ads.nativead.NativeView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
... >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
... >
<!-- 多媒體視圖 -->
<com.huawei.hms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="75dp"
android:layout_height="50dp"
... />
<RelativeLayout
... >
<TextView
android:id="@+id/ad_title"
android:layout_width="match_parent"
android:layout_height="34dp"
... />
<!-- 其他素材 -->
...
</RelativeLayout>
<!-- 其他素材 -->
...
</RelativeLayout>
</com.huawei.hms.ads.nativead.NativeView>
b.注冊(cè)和填充素材視圖。
獲取到NativeView對(duì)象后,需要注冊(cè)和填充素材。
注冊(cè)和填充標(biāo)題、多媒體的示例代碼如下:
private void initNativeAdView(NativeAd nativeAd, NativeView nativeView) {
// 注冊(cè)和填充標(biāo)題素材視圖
nativeView.setTitleView(nativeView.findViewById(R.id.ad_title));
((TextView) nativeView.getTitleView()).setText(nativeAd.getTitle());
// 注冊(cè)和填充多媒體素材視圖
nativeView.setMediaView((MediaView) nativeView.findViewById(R.id.ad_media));
nativeView.getMediaView().setMediaContent(nativeAd.getMediaContent());
// 注冊(cè)和填充其他素材視圖
nativeView.setAdSourceView(nativeView.findViewById(R.id.ad_source));
nativeView.setCallToActionView(nativeView.findViewById(R.id.ad_call_to_action));
if (null != nativeAd.getAdSource()) {
((TextView) nativeView.getAdSourceView()).setText(nativeAd.getAdSource());
}
nativeView.getAdSourceView()
.setVisibility(null != nativeAd.getAdSource() ? View.VISIBLE : View.INVISIBLE);
if (null != nativeAd.getCallToAction()) {
((Button) nativeView.getCallToActionView()).setText(nativeAd.getCallToAction());
}
nativeView.getCallToActionView()
.setVisibility(null != nativeAd.getCallToAction() ? View.VISIBLE : View.INVISIBLE);
// 注冊(cè)原生廣告對(duì)象
nativeView.setNativeAd(nativeAd);
}
依次設(shè)置其他要展示的廣告素材。
MediaView用于展示多媒體素材。如果獲取的廣告含有視頻素材,則視頻會(huì)在MediaView內(nèi)播放。否則MediaView會(huì)顯示一個(gè)圖片素材。
c.向NativeView注冊(cè)原生廣告對(duì)象。
示例代碼如下:
nativeView.setNativeAd(nativeAd);
d.展示NativeView。
將NativeView添加到界面即可展示原生廣告。示例代碼如下:
private void loadAd() {
NativeAdLoader.Builder builder = new NativeAdLoader.Builder(this, "testy63txaom86");
builder.setNativeAdLoadedListener(new NativeAd.NativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
...
// 獲取NativeView視圖
NativeView nativeView = (NativeView) getLayoutInflater().inflate(R.layout.ad_native, null);
// 注冊(cè)和填充原生廣告素材視圖
initNativeAdView(nativeAd, nativeView);
// 將NativeView添加到界面
FrameLayout adFrameLayout = findViewById(R.id.frame_layout_ad);
adFrameLayout.removeAllViews();
adFrameLayout.addView(nativeView);
...
}
});
...
}
private void initNativeAdView(NativeAd nativeAd, NativeView nativeView) {
// 注冊(cè)和填充標(biāo)題素材視圖
nativeView.setTitleView(nativeView.findViewById(R.id.ad_title));
((TextView) nativeView.getTitleView()).setText(nativeAd.getTitle());
// 注冊(cè)和填充多媒體素材視圖
nativeView.setMediaView((MediaView) nativeView.findViewById(R.id.ad_media));
nativeView.getMediaView().setMediaContent(nativeAd.getMediaContent());
// 注冊(cè)和填充其他素材視圖
...
// 注冊(cè)原生廣告對(duì)象
nativeView.setNativeAd(nativeAd);
}
4.(可選)監(jiān)聽(tīng)廣告事件。
為原生廣告添加事件監(jiān)聽(tīng)器的示例代碼如下:
NativeAdLoader nativeAdLoader = builder.setAdListener(new AdListener() {
@Override
public void onAdClicked() {
// 廣告點(diǎn)擊時(shí)調(diào)用
...
}
...
}).build();
5.銷(xiāo)毀廣告。
當(dāng)原生廣告不再展示時(shí),應(yīng)將其銷(xiāo)毀。
nativeAd.destroy();
原生視頻廣告
原生廣告除了包含圖片、文字外,還可能會(huì)包含視頻素材。HUAWEI Ads SDK還提供了以下兩個(gè)類(lèi)用于視頻的配置和控制。
VideoConfiguration
通過(guò)VideoConfiguration類(lèi),可以對(duì)原生視頻進(jìn)行相關(guān)配置。示例代碼如下:
// "testy63txaom86"為專(zhuān)用的測(cè)試廣告位ID,App正式發(fā)布時(shí)需要改為正式的廣告位ID
NativeAdLoader.Builder builder = new NativeAdLoader.Builder(this, "testy63txaom86");
// 設(shè)置是否在靜音狀態(tài)下開(kāi)始播放視頻素材,其默認(rèn)值為true
VideoConfiguration videoConfiguration = new VideoConfiguration.Builder()
.setStartMuted(true)
.build();
NativeAdConfiguration adConfiguration = new NativeAdConfiguration.Builder()
.setVideoConfiguration(videoConfiguration)
.build();
builder.setNativeAdOptions(adConfiguration);
VideoOperator
VideoOperator類(lèi)用于視頻信息獲取和視頻控制??刂破鲗?shí)例需要通過(guò)調(diào)用NativeAd.getVideoOperator()方法獲得。當(dāng)廣告中沒(méi)有視頻素材時(shí),此方法也會(huì)返回VideoOperator對(duì)象。
VideoOperator videoOperator=nativeAd.getVideoOperator();
VideoOperator提供hasVideo()方法判斷廣告中是否有視頻素材。
通過(guò)實(shí)現(xiàn)VideoOperator.VideoLifecycleListener類(lèi)可以監(jiān)聽(tīng)視頻播放過(guò)程中的事件。
videoOperator.setVideoLifecycleListener(new VideoOperator.VideoLifecycleListener() {
@Override
public void onVideoEnd() {
// 視頻播放完時(shí)調(diào)用
...
super.onVideoEnd();
}
...
});