原生广告

开始之前

在开始集成原生广告之前,您需要先完成以下步骤:

  • 在 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。

Image text

①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();
}

 

这篇文章有帮助吗?
2 人中有 2 人觉得有帮助

评论

0 条评论

文章评论已关闭。