请输入
菜单

原生广告

原生广告

💡Tips

  • 🚀 采用预加载机制提升用户体验
  • ⚠️ 注意处理生命周期防止内存泄漏
  • 🔧 推荐使用标准化回调处理流程

1. 加载广告

java 复制代码
// 建议使用全局 mDTGAdInfo,mDTGNativeAdView 和 mDTGNativeAd
private DTGAdInfo mDTGAdInfo;
private DTGNativeAdView mDTGNativeAdView;
private DTGNativeAd mDTGNativeAd;

DTGNativeAdLoader mNativeAdLoader = new DTGNativeAdLoader(activity, "your placement id");
mNativeAdLoader.setNativeAdListener(new DTGNativeAdListener() {
    @Override
    public void onAdLoaded(DTGNativeAdView nativeAdView, DTGAdInfo adInfo) {
    	// 加载成功回调 
        if (mDTGNativeAd != null) {
            mNativeAdLoader.destroy(mDTGNativeAd);
        }
        mDTGAdInfo = adInfo;
        mDTGNativeAd = adInfo.getNativeAd();
        mDTGNativeAdView = nativeAdView;
    }
    
    @Override
    public void onAdLoadFailed(DTGError dtgError) {
        // 加载失败回调
        // 需延迟2S/4S/8S...再次加载重试有限次(禁止在此循环重试加载)
        mNativeAdLoader.loadAd();
    }

    @Override
    public void onAdDisplayed(DTGAdInfo adInfo) {
        // 展示成功回调
    }

    @Override
    public void onAdHidden(DTGAdInfo adInfo) {
        // 广告关闭回调
    }

    @Override
    public void onAdClicked(DTGAdInfo adInfo) {
        // 触发点击回调
    }
});

mNativeAdLoader.setRevenueListener(new DTGAdRevenueListener() {
    @Override
    public void onAdRevenuePaid(DTGAdInfo adInfo) {
        // 可在此回调获取广告收益
    }
});

mNativeAdLoader.loadAd();

2. 展示广告

java 复制代码
// NativeAdView的父容器
FrameLayout mNativeAdViewContainer = findViewById(R.id.adview_container);
mNativeAdViewContainer.removeAllViews();

if (mDTGNativeAd != null) {
    if (mDTGNativeAd.isTemplateNativeAd()) {
        // 模板渲染
        mNativeAdViewContainer.addView(mDTGNativeAdView);
    } else {
        //自渲染
        mDTGNativeAdView = createNativeAdView();
        mNativeAdViewContainer.addView(mDTGNativeAdView);
        mNativeAdLoader.render(mDTGNativeAdView, mDTGAdInfo);
    }
} else {
    // 当前广告位没有可用缓存,建议重新加载
    mNativeAdLoader.loadAd();
}

private DTGNativeAdView createNativeAdView() {
    // 自定义xml文件中各组件类型需和下列标识的保持一致
    DTGNativeAdViewBinder binder = new DTGNativeAdViewBinder.Builder(R.layout.native_custom_ad_view)
        	// 可根据业务需要选择下面各组件进行设置渲染,建议添加下面所有组件
            .setTitleTextViewId(R.id.title_text_view)               //TextView
            .setBodyTextViewId(R.id.body_text_view)                 //TextView
            .setStarRatingContentViewGroupId(R.id.star_rating_view) //ViewGroup
            .setAdvertiserTextViewId(R.id.advertiser_text_view)     //TextView
            .setIconImageViewId(R.id.icon_image_view)               //ImageView
            .setMediaContentViewGroupId(R.id.media_view_container)  //ViewGroup
            .setOptionsContentViewGroupId(R.id.options_view)        //ViewGroup
            .setCallToActionButtonId(R.id.cta_button)               //Button
            .build();
    return new DTGNativeAdView(binder, activity);
}

📌 native_custom_ad_view.xml

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxHeight="300dp"
        android:padding="8dp">

    <ImageView
            android:id="@+id/icon_image_view"
            android:layout_width="50dp"
            android:layout_height="50dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:src="@mipmap/ic_launcher" />

    <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:background="#ff669900"
            android:padding="2dp"
            android:text="Ad"
            android:textAppearance="@style/TextAppearance.AppCompat.Body2"
            android:textColor="@android:color/white"
            app:layout_constraintBottom_toBottomOf="@+id/title_text_view"
            app:layout_constraintStart_toEndOf="@+id/icon_image_view"
            app:layout_constraintTop_toTopOf="@+id/title_text_view" />

    <FrameLayout
            android:id="@+id/options_view"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_marginBottom="8dp"
            android:orientation="horizontal"
            app:layout_constraintBottom_toTopOf="@+id/advertiser_text_view"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toEndOf="@+id/title_text_view"
            app:layout_constraintTop_toTopOf="@+id/icon_image_view" />

    <TextView
            android:id="@+id/title_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:textAppearance="@style/TextAppearance.AppCompat.Title"
            app:layout_constraintStart_toEndOf="@+id/text_view"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Title" />

    <TextView
            android:id="@+id/advertiser_text_view"
            android:layout_width="wrap_content"
            android:layout_height="8dp"
            android:layout_marginStart="8dp"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            android:textSize="12sp"
            app:layout_constraintBottom_toBottomOf="@+id/icon_image_view"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toEndOf="@+id/icon_image_view"
            app:layout_constraintTop_toBottomOf="@+id/title_text_view"
            app:layout_constraintVertical_bias="1.0"
            tools:text="Advertiser" />

    <FrameLayout
            android:id="@+id/star_rating_view"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_marginTop="4dp"
            app:layout_constraintBottom_toTopOf="@id/advertiser_text_view"
            app:layout_constraintStart_toStartOf="@id/text_view"
            app:layout_constraintTop_toBottomOf="@id/text_view" />

    <TextView
            android:id="@+id/body_text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:textAppearance="@style/TextAppearance.AppCompat.Body1"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/icon_image_view"
            tools:text="Body" />

    <FrameLayout
            android:id="@+id/media_view_container"
            android:layout_width="0dp"
            android:layout_height="150dp"
            android:layout_marginTop="4dp"
            android:maxHeight="150dp"
            app:layout_constraintDimensionRatio="W,16:9"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/body_text_view" />

    <Button
            android:id="@+id/cta_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:backgroundTint="#0583aa"
            android:textColor="@android:color/white"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/media_view_container"
            tools:layout_editor_absoluteX="8dp"
            tools:text="Install" />
</androidx.constraintlayout.widget.ConstraintLayout>

3. 释放资源

java 复制代码
if (mNativeAdLoader != null) {
    mNativeAdLoader.destroy();
    if (mDTGNativeAd != null) {
        mNativeAdLoader.destroy(mDTGNativeAd);
    }
}

上一个
开屏广告
下一个
回调信息说明
最近修改: 2025-07-03Powered by