貼片廣告
貼片廣告是一種在視頻播放過程中插入的視頻或圖片廣告。
添加貼片廣告
貼片廣告需要通過InstreamAdLoader類獲取。
1.創(chuàng)建InstreamAdLoader。
InstreamAdLoader類提供了InstreamAdLoader.Builder類,可用于設置廣告位ID、設置自定義選項和創(chuàng)建InstreamAdLoader對象。
示例代碼如下所示:
// "testy3cglm3pj0"為專用的測試廣告位ID,App正式發(fā)布時需要改為正式的廣告位ID
InstreamAdLoader.Builder builder = new InstreamAdLoader.Builder(context, "testy3cglm3pj0");
// 設置貼片最大時長
InstreamAdLoader adLoader = builder.setTotalDuration(totalDuration)
// 設置貼片返回的最大數(shù)量
.setMaxCount(maxCount)
.setInstreamAdLoadListener(new InstreamAdLoadListener() {
@Override
public void onAdLoaded(List<InstreamAd> ads) {
// 廣告獲取成功后調(diào)用
...
}
@Override
public void onAdFailed(int errorCode) {
// 廣告獲取失敗后調(diào)用
...
}
}).build();
當獲取廣告成功后,SDK會調(diào)用InstreamAdLoadListener監(jiān)聽器的onAdLoaded()方法返回的InstreamAd對象列表。
當獲取廣告失敗后,SDK會調(diào)用InstreamAdLoadListener監(jiān)聽器的onAdFailed()方法。
說明
您需要根據(jù)視頻時長合理設置貼片的最大時長以及貼片的數(shù)量,HUAWEI Ads會根據(jù)設置的最大時長和貼數(shù)返回合適數(shù)量的貼片廣告。
比如設置最大時長60秒,最大貼數(shù)8,則最多返回4貼15秒或2貼30秒的廣告。設置最大時長120秒,最大貼數(shù)4,則最多只會返回4貼總時長不會超過120秒的廣告。
2.獲取廣告。
InstreamAdLoader提供loadAd()方法獲取廣告。
AdParam是唯一的參數(shù),代碼如下所示:
InstreamAdLoader.loadAd(new AdParam.Builder().build());
調(diào)用loadAd()后,SDK將對添加的監(jiān)聽器方法進行一次成功或失敗的回調(diào)。
說明
再次使用InstreamAdLoader獲取廣告前,請確保先前的請求已經(jīng)完成。
3.展示貼片廣告。
獲取到廣告后在監(jiān)聽器的回調(diào)方法中展示貼片廣告,需要在每個廣告視圖的一角展示“為什么看到此廣告”的圖標“i”或者“不再顯示該廣告”的圖標“x”,并且必須展示廣告標識。
以下是展示貼片廣告的步驟:
a.定義貼片廣告布局。
需要定義一個布局用于展示InstreamAd列表中的廣告素材。
<RelativeLayout
android:id="@+id/instream_ad_container"
android:layout_width="match_parent"
android:layout_height="200dp"
android:visibility="gone">
<!-- 貼片廣告視圖 -->
<com.huawei.hms.ads.instreamad.InstreamView
android:id="@+id/instream_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- 跳過按鈕視圖 -->
<TextView
android:id="@+id/instream_skip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
<!-- 倒計時視圖 -->
<TextView
android:id="@+id/instream_count_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
<!-- 廣告標識視圖 -->
<TextView
android:id="@+id/instream_ad_flag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
<!-- 為什么展示此廣告視圖 -->
<ImageView
android:id="@+id/instream_why_this_ad"
android:layout_width="14dp"
android:layout_height="14dp"
...
/>
<!-- 點擊廣告跳轉(zhuǎn)按鈕 -->
<TextView
android:id="@+id/instream_call_to_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
...
/>
</RelativeLayout>
說明
您需要結合您的視頻播放的布局來設計相應的貼片廣告布局,如貼片廣告布局的寬高及各個視圖控件的展示位置。
b.注冊廣告到廣告視圖。
獲取到InstreamAd對象列表后,需要將廣告注冊到廣告視圖。
示例代碼如下:
instreamView.setInstreamAds(ads);
c.監(jiān)聽廣告狀態(tài)。
貼片廣告提供了InstreamMediaStateListener、InstreamMediaChangeListener和MediaMuteListener來監(jiān)聽貼片廣告狀態(tài)。示例代碼如下:
instreamView.setInstreamMediaChangeListener(new InstreamMediaChangeListener(){
@Override
public void onSegmentMediaChange(InstreamAd ad) {
// 廣告媒體切換
...
}
});
instreamView.setInstreamMediaStateListener(new InstreamMediaStateListener() {
@Override
public void onMediaProgress(int percent, int playTime) {
// 播放過程
...
}
@Override
public void onMediaStart(int playTime) {
// 播放開始
...
}
@Override
public void onMediaPause(int playTime) {
// 播放暫停
...
}
@Override
public void onMediaStop(int playTime) {
// 播放停止
...
}
@Override
public void onMediaCompletion(int playTime) {
// 播放完成
...
}
@Override
public void onMediaError(int playTime, int errorCode, int extra) {
// 播放錯誤
...
}
});
instreamView.setMediaMuteListener(new MediaMuteListener() {
@Override
public void onMute() {
// 貼片廣告靜音
...
}
@Override
public void onUnmute() {
// 貼片廣告取消靜音
...
}
});
4.銷毀廣告。
當貼片廣告展示結束時,應將貼片廣告視圖銷毀。
instreamView.destroy();
測試貼片廣告
測試貼片廣告時,需要使用專門的測試廣告位ID來獲取測試廣告,以避免在測試過程中產(chǎn)生無效的廣告點擊量。
測試廣告位ID僅作為功能調(diào)試使用,不可用于廣告變現(xiàn)。您需要在應用發(fā)布前申請正式的廣告位ID,并替換測試廣告位ID。
以下表格中提供了貼片廣告的專用測試廣告位ID:
下載貼片廣告的示例代碼并運行,可以看到如下效果圖:
另外您也可以通過學習Codelab中的教程來集成貼片廣告。