请输入
菜单

原生广告

💡Tips

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

1. 加载广告

java 复制代码
// 建议使用全局 mMCAdInfo,mMCNativeAdView 和 mMCNativeAd
private MCAdInfo mMCAdInfo;
private MCNativeAdView mMCNativeAdView;
private MCNativeAd mMCNativeAd;

MCNativeAdLoader mNativeAdLoader = new MCNativeAdLoader(activity, "your placement id");
mNativeAdLoader.setNativeAdListener(new MCNativeAdListener() {
    @Override
    public void onAdLoaded(MCNativeAdView nativeAdView, MCAdInfo adInfo) {
    	// 加载成功回调 
		if (mMCNativeAd != null) {
    		mNativeAdLoader.destroy(mMCNativeAd);
		}
		
		mMCAdInfo = mcAdInfo;
		mMCNativeAd = mcAdInfo.getNativeAd();
		mMCNativeAdView = mcNativeAdView;
        // 重置重试加载次数
        retryAttempt = 0;
    }
    
    @Override
    public void onAdLoadFailed(MCError mcError) {
        // 加载失败回调
        // 我们建议您按照指数递增的方式延长重试间隔,直到达到最大延迟时间(本例为 8 秒)或最大重试次数(本例为 3 次)
        if (retryAttempt >= 3) return;
        retryAttempt++;
        long delayMillis = TimeUnit.SECONDS.toMillis((long) Math.pow(2, Math.min(3, retryAttempt)));
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mNativeAdLoader.loadAd();
            }
        }, delayMillis);
    }

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

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

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

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

mNativeAdLoader.loadAd();

2. 展示广告

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

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

private MCNativeAdView createNativeAdView() {
    // 自定义xml文件中各组件类型需和下列标识的保持一致
    MCNativeAdViewBinder binder = new MCNativeAdViewBinder.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
        //  .setWarningViewId(R.id.body_warn_view)  (仅Yandex需要添加) //TextView
        //  .setSponserViewId(R.id.body_spon_view)  (仅Yandex需要添加) //TextView
            .build();
    return new MCNativeAdView(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 (mMCNativeAd != null) {
        mNativeAdLoader.destroy(mMCNativeAd);
    }
}

4. 设置自定义参数

java 复制代码
MCNativeAdLoader mNativeAdLoader = new MCNativeAdLoader(activity, "your placement id");
Map<String, Object> loadExtraParameter = new HashMap<>();
loadExtraParameter.put("test_load_extra_key", "test_load_extra_value");
mNativeAdLoader.setLoadExtraParameter(loadExtraParameter);

Map<String, String> extraParameter = new HashMap<>();
extraParameter.put("test_extra_key", "test_extra_value");
mNativeAdLoader.setExtraParameter(extraParameter);

mNativeAdLoader.setNativeAdListener(new MCNativeAdListener() {
    ...
    @Override
    public void onAdLoaded(MCNativeAdView mcNativeAdView, MCAdInfo adInfo) {
        // 获取自定义参数
        adInfo.getOriginJsonString();
    }
    ...
});

mNativeAdLoader.loadAd();
上一个
横幅广告
下一个
回调信息说明
最近修改: 2025-07-11Powered by