开始之前
在开始集成原生广告之前,您需要先完成以下步骤:
- 在 OpenMediation 开发者前台页面,创建开发者账号,添加应用,然后申请并配置一个‘Native Ad’类型的广告位,操作手册在 这里。
- 在 Android SDK下载与集成 指导下,将 SDK 添加到您的开发项目并完成了SDK 初始化操作。
- 如果要聚合第三方平台,您需要在完成本节的广告集成之后,参考 添加聚合网络 进行操作。
原生广告
Step 1. 初始化NativeAdListener对象
SDK会触发一系列事件通知应用程序Native广告的初始化、加载、展示等结果。使用原生广告,您需要创建NativeAd对象、实现并设置监听事件的Listener,然后调用loadAd方法加载并展示广告。
下面的代码示例展示了如何实现NativeAdListener 接口来监听广告事件。SDK所能触发的事件类型在下面代码都能找到。
import com.openmediation.sdk.nativead.AdInfo;
import com.openmediation.sdk.nativead.NativeAd;
import com.openmediation.sdk.nativead.NativeAdListener;
...
NativeAdListener listener = new NativeAdListener() {
/**
* Invoked when Native Ad are available.
* You can then show the Ad by calling nativeAd.showAd().
*/
@Override
public void onNativeAdLoaded(String placementId, AdInfo adInfo) {
//native ad load success
}
/**
* Invoked when the call to load a Native Ad has failed
* String error contains the reason for the failure.
*/
@Override
public void onNativeAdLoadFailed(String placementId, Error error) {
//native ad load failed
}
/**
* Invoked when an impression is recorded for NativeAd.
*/
@Override
public void onNativeAdImpression(String placementId, AdInfo info) {
//native ad impression
}
/**
* Invoked when the end user clicked on the Native Ad
*/
@Override
public void onNativeAdClicked(String placementId) {
//native ad click
}
});
// add NativeAdListener
NativeAd.addAdListener(placementId, listener);
Step 2. 加载原生广告
您需要在展示广告前调用 loadAd 方法来请求和缓存广告。我们建议您务必在广告展示前提前一定时间进行调用,以免影响广告体验。
NativeAd.loadAd(placementId);
注意:
- loadAd 方法可以同时被多次调用,但是我们不建议这么做。因为短时间的连续调用不会增加广告填充率,如果已经有正在进行中的加载,新的请求不会被处理。
- 警告:在onAdFailed回调事件中进行广告加载操作是非常危险的,如果您一定要在此处进行加载,请务必设置一个时间间隔限制,避免程序因为无网络等原因造成连续的失败而进入死循环
Step 3. NativeAd广告元素及获取
原生广告的元素包括:icon, title, description, large campaign image, CTA button。
①Icon ②Title ③Description ④Large campaign image ⑤CTA button
■ Public String getTitle()
■ Public String getDesc()
■ Public String getCallToActionText()
import com.openmediation.sdk.nativead.AdInfo;
...
private AdInfo adInfo;
...
String title = adInfo.getTitle();
String desc = adInfo.getDesc();
String callToActionText = adInfo.getCallToActionText();
Step 4. 展示原生广告
在本节中,我们将创建自定义视图,向用户展示原生广告。我们在示例中使用了 Android 视图,但可以根据应用的样式对其进行自定义。
注意:registerNativeAdView() 方法非常重要。请参阅以下代码作为示例,它允许第三方 SDK 跟踪广告展示时间和点击事件。如果未能调用此方法可能会导致错误,如单击按钮失败。
NativeAd 视图区分为模板渲染和自渲染,针对模板渲染的视图您直接添加到界面上即可。针对自渲染视图需要您自行处理。
import com.openmediation.sdk.nativead.AdIconView;
import com.openmediation.sdk.nativead.AdInfo;
import com.openmediation.sdk.nativead.MediaView;
import com.openmediation.sdk.nativead.NativeAd;
import com.openmediation.sdk.nativead.NativeAdListener;
import com.openmediation.sdk.nativead.NativeAdView;
...
private NativeAdView nativeAdView;
private AdInfo adInfo;
private View adView;
private RelativeLayout adContainer;
...
adContainer = this.findViewById(R.id.native_ad_container);
// Get NativeAdView
nativeAdView = new NativeAdView(NativeActivity.this);
NativeAd.loadAd(placementId);
...
@Override
public void onNativeAdLoaded(String placementId, AdInfo info){
adContainer.removeAllViews();
adInfo = info;
// Native Template rendering, for Admost, TikTok_cn, Tencent
if (info.isTemplateRender()) {
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(Gravity.CENTER);
adContainer.addView(info.getView(), layoutParams);
} else {
adView = LayoutInflater.from(MainActivity.this).inflate(R.layout.native_ad_layout, null);
TextView title = adView.findViewById(R.id.ad_title);
title.setText(info.getTitle());
TextView desc = adView.findViewById(R.id.ad_desc);
desc.setText(info.getDesc());
Button btn = adView.findViewById(R.id.ad_btn);
btn.setText(info.getCallToActionText());
MediaView mediaView = adView.findViewById(R.id.ad_media);
nativeAdView = new NativeAdView(MainActivity.this);
AdIconView adIconView = adView.findViewById(R.id.ad_icon_media);
nativeAdView.addView(adView);
nativeAdView.setTitleView(title);
nativeAdView.setDescView(desc);
nativeAdView.setAdIconView(adIconView);
nativeAdView.setCallToActionView(btn);
nativeAdView.setMediaView(mediaView);
NativeAd.registerNativeAdView(placementId, nativeAdView, info);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
adContainer.addView(nativeAdView, layoutParams);
}
}
■ R.id.native_ad_container 代码如下:
<RelativeLayout
android:id="@+id/native_ad_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</RelativeLayout>
■ R.layout.native_ad_layout 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_ad_bg">
<TextView
android:id="@+id/ad_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:padding="10dp"
android:text="title"
android:textColor="@android:color/white" />
<com.openmediation.sdk.nativead.AdIconView
android:id="@+id/ad_icon_media"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_below="@id/ad_title"
android:layout_centerHorizontal="true" />
<com.openmediation.sdk.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="250dp"
android:layout_height="175dp"
android:layout_below="@id/ad_icon_media"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/ad_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ad_media"
android:layout_centerInParent="true"
android:padding="10dp"
android:text="calltoaction"
android:textAllCaps="false" />
</RelativeLayout>
Step 5. MediaView
MediaView是一个特殊视图,旨在显示主要媒体资源。
- 如果加载的广告具有视频资源,则视频将缓存并开始在 MediaView 内播放。
- 如果加载的广告不包含视频资源,则下载第一个图像资源并将其放置在 MediaView 中。
- MediaView 是一种视图,可以在 XML 布局中定义或动态构造。
Step 6. AdIconView
AdIconView是一种特殊的视图,用来显示icon资源。
- 如果加载的广告包含icon资产,则icon资源将下载并放置在 AdIconView 中。
- AdIconView 是一个视图,可以在 XML 布局中定义或动态构造。
Step 7. 销毁NativeAd对象
建议在广告Activity被销毁时释放本NativeAd对象。
/**
* Invoke NativeAd.destroy(placementId, adInfo) method in Activity's onDestroy() callback to release NativeAd object.
*/
@Override
public void onDestroy()
if (adInfo != null) {
NativeAd.destroy(placementId, adInfo);
}
NativeAd.removeAdListener(placementId, listener);
super.onDestroy();
}
评论
文章评论已关闭。