對于開發者來說,廣告是一種擁有流量即可變現的低門檻變現方式,但對于用戶來說,在使用App的程序中,廣告數量過多,廣告內容劣質,非常影響用戶體驗,甚至造成用戶流失,那么開發者如何才能兼得廣告變現和用戶體驗呢?使用原生廣告就是很好的解決方法之一,
什么是原生廣告
原生廣告是創建與應用內容融于一體的廣告形式,包含圖片、文字和視頻,原生廣告將廣告內容作為資訊或服務內容的一部分植入到應用設計中,常見于資訊流場景,

原生廣告的優勢
原生廣告可以讓廣告在應用中看起來更自然,和Banner廣告相比,原生廣告對用戶注意力影響較小,讓用戶有渾然一體的觀看體驗,減少廣告對用戶的干擾,
原生廣告支持自定義界面,與其他廣告格式相比,如何在App中展示廣告方面,原生廣告具有更高的靈活性,可以讓廣告主展示更多的廣告內容,
原生廣告支持自由定制界面,可以讓用戶在App中獲得更好的廣告體驗,并且可以幫助開發者提高從廣告中獲得的收益,因此,如果開發者既想通過廣告提高收益,又想盡可能減少廣告對用戶體驗的影響,不妨考慮使用原生廣告,接下來的文章會詳細講解開發步驟,
示例代碼已在相關社區進行開源,歡迎開發者關注、下載并提供寶貴意見:
Github官方地址:https://github.com/hms-core/hms-ads-demo-java
Gitee官方地址:https://gitee.com/hms-core/hms-ads-demo-java
前提條件
HUAWEI Ads SDK依賴HMS Core(APK)4.0.0.300及以上版本,如果設備上未安裝HMS Core(APK)4.0.0.300及以上版本,則無法使用HUAWEI Ads SDK的相關介面,
在開發應用前需要在華為開發者聯盟網站上注冊成為開發者并完成實名認證,具體方法可參見帳號注冊認證,
參見創建專案和在專案中添加應用完成應用的創建,
開發前準備
廣告服務的集成需如下4個關鍵步驟,可以參考華為開發者聯盟檔案
1. 匯入HUAWEI Ads SDK
2. 配置網路權限
3. 配置混淆腳本
4. 初始化SDK
開發關鍵步驟
原生廣告需要通過NativeAdLoader類獲取,
1.1 構建NativeAdLoader,
NativeAdLoader類提供了NativeAdLoader.Builder類,可用于設定廣告位ID、設定自定義選項和構建NativeAdLoader物件,
// "testy63txaom86"為測驗專用的廣告位ID,App正式發布時需要改為正式的廣告位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監聽器的onNativeAdLoaded()方法回傳NativeAd物件,
當獲取廣告失敗后,SDK會呼叫AdListener監聽器的onAdFailed()方法,
1.2 獲取廣告,
NativeAdLoader提供loadAd()和loadAds()的兩種方法獲取廣告,
- loadAd()請求單個原生廣告,
AdParam是唯一的引數,呼叫loadAd()后,SDK將對添加的監聽器方法進行一次成功或失敗的回呼,
nativeAdLoader.loadAd(new AdParam.Builder().build());
- loadAd()請求指定創意型別的原生廣告,
AdParam.Builder提供了setDetailedCreativeTypeList介面,支持傳入請求的創意型別,
List<Integer> detailedCreativeTypeList = new ArrayList<>();
// 添加指定的創意型別:原生大圖
detailedCreativeTypeList.add(DetailedCreativeType.BIG_IMG);
AdParam.Builder adRequestBuilder = new AdParam.Builder();
adRequestBuilder.setDetailedCreativeTypeList(detailedCreativeTypeList);
nativeAdLoader.loadAd(adRequestBuilder.build());
- loadAds()請求多個原生廣告,
loadAds()請求有兩個引數,除AdParam外,還有請求加載的最大廣告數量為5,SDK回傳的廣告數量將會小于等于所請求的廣告數量,并且廣告皆不相同,
nativeAdLoader.loadAds(new AdParam.Builder().build(), 5);
當獲取廣告成功后,SDK會多次呼叫NativeAd.NativeAdLoadedListener監聽器的onNativeAdLoaded()方法分別回傳一個NativeAd物件,在廣告都回傳后再呼叫AdListener監聽器的onAdLoded()方法回呼通知此次請求成功;當獲取廣告失敗后,SDK會呼叫AdListener監聽器的onAdFailed()方法,
// "testy63txaom86"為測驗專用的廣告位ID,App正式發布時需要改為正式的廣告位ID
NativeAdLoader.Builder builder = new NativeAdLoader.Builder(this, "testy63txaom86");
NativeAdLoader nativeAdLoader = builder.setNativeAdLoadedListener(new NativeAd.NativeAdLoadedListener() {
@Override
public void onNativeAdLoaded(NativeAd nativeAd) {
// 廣告加載成功回呼,多個廣告對應多個回呼
...
}
}).setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
// 廣告加載完成回呼,說明此次廣告加載成功,而且所有廣告都已回呼完成,
...
}
@Override
public void onAdFailed(int errorCode) {
// 廣告加載失敗
...
}
}).build();
nativeAdLoader.loadAds(new AdParam.Builder().build(), 5);
1.3 展示原生廣告,
獲取到廣告后在監聽器的回呼方法中展示原生廣告,需要在每個廣告視圖的一角展示“為什么看到此廣告”的圖示“i”或“不再顯示該廣告”的圖示“x”,并且必須展示廣告標識,
以下是展示原生廣告的步驟:
- 定義原生廣告布局,
需要自定義一個布局用于展示NativeAd中的素材,
<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>
- 注冊和填充素材視圖,
獲取到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會顯示一個圖片素材,
- 向NativeView注冊原生廣告物件,
nativeView.setNativeAd(nativeAd);
- 展示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);
}
1.4 監聽廣告事件,
NativeAdLoader nativeAdLoader = builder.setAdListener(new AdListener() {
@Override
public void onAdClicked() {
// 廣告點擊時呼叫
...
}
...
}).build();
1.5 銷毀廣告,
nativeAd.destroy();
更多應用內廣告形式操作指南:
1、應用內添加Banner廣告位
2、應用內添加激勵廣告
3、應用內添加原生廣告
4、應用內添加開屏廣告
5、應用內添加插屏廣告
6、應用內添加貼片廣告
>>訪問華為廣告服務官網,了解更多相關內容
>>獲取華為廣告服務開發指導檔案
>>訪問華為開發者聯盟官網,了解更多相關內容
>>獲取開發指導檔案
>>華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解華為移動服務最新技術資訊~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/278579.html
標籤:其他
