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