请输入
菜单

自定义聚合平台

1. 自定义聚合平台的使用

请先查看如何在Hyperbid Tools后台创建自定义聚合平台

(1) 您只需要继承MCMediationAdapter并重写相应方法,自定义聚合平台Adapter中的所有方法都不需要您进行调用,MCSDK内部会在合适的时机调用自定义聚合平台Adapter中的相关方法。

(2) 您调用MCSDK的load API加载广告,自定义聚合平台的广告加载结果需要通过调用MCAdapterListener中的相关event回调通知MCSDK,最终您会通过加载成功的回调收到MCSDK的通知

 

2. 公共抽象方法

MCMediationAdapter

方法 说明

void initSDK(Context context, MCMediationInfo mediationInfo, MCAdapterInitListener initListener)

自定义聚合平台的初始化SDK方法

void setLogDebug(boolean isLogDebug)

自定义聚合平台的DebugLog开关

String getSdkVersion()

获取自定义聚合平台的SDK版本号

void loadRewardedAd(Context context, MCLoadInfo loadInfo, MCAdapterListener listener)

自定义聚合平台加载激励视频广告的方

void loadInterstitialAd(Context context, MCLoadInfo loadInfo, MCAdapterListener listener)

自定义聚合平台加载插屏广告的方法

void loadAdViewAd(Context context, MCLoadInfo loadInfo, MCBannerSize bannerSize, MCAdapterListener listener)

自定义聚合平台加载横幅广告的方法

void loadAppOpenAd(Context context, MCLoadInfo loadInfo, MCAdapterListener listener)

自定义聚合平台加载开屏广告的方法

void loadNativeAd(Context context, MCLoadInfo loadInfo, MCAdapterListener listener)

自定义聚合平台加载原生广告的方法

void show(Activity activity, ViewGroup container, Map<String, Object> extra, MCAdapterListener listener)

自定义聚合平台展示广告的方法

View getBannerView()

自定义聚合平台获取BannerView的方法

boolean isAdReady()

自定义聚合平台判断广告是否可展示的方法

void destroy()

自定义聚合平台资源释放的方法

 

3.聚合平台信息对象

● MCMediationInfo

方法 说明
int getMediationId() 获取聚合平台的ID值
Map<String, Object> getInitParamsMap() 获取初始化信息的map,用于初始化聚合平台时从这个map中获取appId、appKey等参数(以及其他初始化需要用到的参数等)进行初始化
String getMediationAdapterClass() 获取聚合平台Adapter的class

 

4.广告加载信息的对象

● MCLoadInfo

方法 说明
Map<String, Object> getLoadExtraParameter()

用于聚合平台SDK获取加载时的额外信息map

void setLoadExtraParameter(Map<String, Object> loadExtraParameter)

设置聚合平台加载时所需的额外信息,每个聚合平台可传独有的参数

String getPlacementId()

获取聚合平台的广告位ID

double getWeight()

获取聚合平台的权重值

MediationUnitInfo getMediationUnitInfo()

获取聚合平台的UnitInfo对象

int getFetchTimeout()

获取聚合平台开屏广告加载超时时间

Map<String, Object> getServerMap()

获取服务端下发的参数信息

 

5. 广告加载事件的回调

● MCAdapterListener

方法 说明
void onAdLoadSuccess(IAdInfo adInfo)

广告加载成功时调用此方法通知MCSDK(仅激励,插屏,横幅,开屏使用)
adInfo:聚合平台的广告信息对象

void onAdLoadSuccess(IAdInfo adInfo, MCNativeAd mcNativeAd)

广告加载成功时调用此方法通知MCSDK(仅原生广告使用)
adInfo:聚合平台的广告信息对象
mcNativeAd:聚合平台的原生广告信息对象

void onAdLoadFail(MCAdapterError adapterError)

广告加载失败时调用此方法通知MCSDK
adapterError: 聚合平台的错误码对象

void onAdShow(IAdInfo adInfo)

广告展示成功时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象

void onAdClick(IAdInfo adInfo)

广告点击时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象

void onAdClose(IAdInfo adInfo)

广告关闭时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象

void onAdVideoStart(IAdInfo adInfo)

广告视频开始播放时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象

void onAdVideoEnd(IAdInfo adInfo)

广告视频播放结束时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象

void onAdDisplayFailed(IAdInfo adInfo, MCAdapterError adapterError)

广告展示失败时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象
adapterError: 聚合凭平台的错误码对象

void onAdReward(IAdInfo adInfo, MCReward rewardInfo)

激励视频触广告发奖励时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象
rewardInfo:聚合平台的奖励对象

void onAdRevenuePaid(IAdInfo adInfo)

获取广告收益时调用此方法通知MCSDK
adInfo:聚合平台的广告信息对象

 

6. 广告加载结果的对象

IAdInfo

💡Tips

  • 需要您参照下面的方法说明,继承IAdInfo并自行构建广告加载结果对象
方法 说明

String getMediationPlacementId()

在此方法中返回聚合平台的广告位ID

String getScenarioId()

在此方法中返回聚合平台的场景ID

String getNetworkPlacementId()

在此方法中返回聚合平台中配置的广告平台的广告位ID

MCAdFormat getFormat()

在此方法中返回广告样式类型,类型如下:
MCAdFormat.REWARDED:激励视频广告
MCAdFormat.INTERSTITIA:插屏广告
MCAdFormat.APP_OPEN:开屏广告
MCAdFormat.NATIVE:原生广告
MCAdFormat.BANNER:横幅广告

double getRevenue()

在此方法中返回当次广告展示的收益

String getRevenuePrecision()

在此方法中返回收益精度,取值如下:IAdInfo.PRECISION_PUBLISHER_DEFINED:开发者在聚合后台为广告源定义的价格
IAdInfo.PRECISION_EXTRA: 实时竞价的收益IAdInfo.PRECISION_ESTIMATED:预估收益

String getCurrency()

在此方法中返回收益货币单位。根据返回的货币单位,确定收益的价格,通常为元(CNY)或美元(USD)

String getCountry()

在此方法中返回国家代码, 例如:”CN"

String getNetworkFirmName()

在此方法中返回广告平台的名称

Map<String, Object> getMediationExtraMap()

在此方法中返回聚合平台广告的额外信息

String getOriginJsonString()

在此方法中返回聚合平台广告回调的原始信息

 

7. 示意Code

package com.company.adapter.YourCustomMCMediationAdapter;

import com.mcsdk.core.api.InitializationStatus;
import java.util.concurrent.atomic.AtomicBoolean;

public class YourCustomMCMediationAdapter extends MCMediationAdapter {

    static final AtomicBoolean initialized = new AtomicBoolean();
    static boolean hasInit;

    @Override
    public void initSDK(Context context, MCMediationInfo mediationInfo, MCAdapterInitListener initListener) {
        if (initialized.compareAndSet(false, true)) {
            Map<String, Object> initParamsMap = mediationInfo.getInitParamsMap();
            String appId = initParamsMap.get("app_id");
            String appKey = initParamsMap.get("app_key");
            YourAdSDK.initSDK(context, appId, appKey, new YourInitListener(){
                if (appId or appKey 为空) {
                    initListener.onCompletion(InitializationStatus.INITIALIZED_FAILURE, "appId or appKey 为空");
                } else {
                    // 回调成功
                    hasInit = true;
                    initListener.onCompletion(InitializationStatus.INITIALIZED_SUCCESS, "初始化成功");
                }
            });
        }
        if (initListener != null) {
            if (hasInit) {
                initListener.onCompletion(InitializationStatus.INITIALIZED_SUCCESS, "初始化成功");
            } else {
                initListener.onCompletion(InitializationStatus.INITIALIZING, "初始化失败");
            }
        }
    }

    @Override
    public void setCustomMaps(Context applicationContext, Map<String, Object> customMaps, PrivacyInfo privacyInfo) {
        YourAdSDK.initCustomMap(customMaps);
        // 在此处理 隐私政策的相关逻辑
        MCDevPrivacyConfig devPrivacyConfig = privacyInfo.devPrivacyConfig;
    }

    @Override
    public void setLogDebug(boolean isLogDebug) {
        // Debug Log 开关
    }

    @Override
    public void setPersonalizedAdState(int personalizedAdState) { }

    @Override
    public String getSdkVersion() { }

    @Override
    public void loadRewardedAd(Context context, MCLoadInfo loadInfo, final MCAdapterListener listener) {
        MCAdapterError adapterError = initParams(loadInfo);
        // 解析 loadInfo 参数,若解析失败 回调失败
        if (adapterError != null) {
            listener.onAdLoadFail(adapterError);
            return;
        }
        // 创建激励广告对象并发起加载,同时处理加载相关回调事件
        YourRewardedAd rewardedAd = new YourRewardedAd(context, loadInfo.getPlacementId());
        rewardedAd.setAdListener(new YourRewardedAdListener(){
            // 在此处处理加载相关回调事件
            ...
            listener.onAdLoadSuccess(new YourAdInfo());
            ...
            listener.onAdLoadFail("加载失败");
            ...
        });
        rewardedAd.load();
    }

    @Override
    public void loadInterstitialAd(Context context, MCLoadInfo loadInfo, final MCAdapterListener listener) {
        MCAdapterError adapterError = initParams(loadInfo);
        // 解析 loadInfo 参数,若解析失败 回调失败
        if (adapterError != null) {
            listener.onAdLoadFail(adapterError);
            return;
        }
        // 创建插屏广告对象并发起加载,同时处理加载相关回调事件
        YourInterstitialAd interstitialAd = new YourInterstitialAd(context, loadInfo.getPlacementId());
        interstitialAd.setAdListener(new YourInterstitialAdListener(){
            // 在此处处理加载相关回调事件
            ...
            listener.onAdLoadSuccess(new YourAdInfo());
            ...
            listener.onAdLoadFail("加载失败");
            ...
        });
        interstitialAd.load();
    }

    @Override
    public void loadAdViewAd(Context context, MCLoadInfo loadInfo, final MCBannerSize bannerSize, MCAdapterListener listener) {
        MCAdapterError adapterError = initParams(loadInfo);
        // 解析 loadInfo 参数,若解析失败 回调失败
        if (adapterError != null) {
            listener.onAdLoadFail(adapterError);
            return;
        }
        // 创建横幅广告对象并发起加载,同时处理加载相关回调事件
        YourBannerdAdView bannerdAd = new YourBannerdAdView(context, loadInfo.getPlacementId());
        bannerdAd.setAdListener(new YourBannerAdListener(){
            // 在此处处理加载相关回调事件
            ...
            listener.onAdLoadSuccess(new YourAdInfo());
            ...
            listener.onAdLoadFail("加载失败");
            ...
        });
        bannerdAd.load();
    }

    @Override
    public void loadAppOpenAd(Context context, MCLoadInfo loadInfo, MCAdapterListener listener) {
        MCAdapterError adapterError = initParams(loadInfo);
        // 解析 loadInfo 参数,若解析失败 回调失败
        if (adapterError != null) {
            listener.onAdLoadFail(adapterError);
            return;
        }
        // 创建开屏广告对象并发起加载,同时处理加载相关回调事件
        YourSplashdAd splashdAd = new YourSplashdAd(context, loadInfo.getPlacementId());
        splashdAd.setAdListener(new YourSplashAdListener(){
            // 在此处处理加载相关回调事件
            ...
            listener.onAdLoadSuccess(new YourAdInfo());
            ...
            listener.onAdLoadFail("加载失败");
            ...
        });
        splashdAd.load();
    }

    @Override
    public void loadNativeAd(Context context, MCLoadInfo loadInfo, MCAdapterListener listener) {
        MCAdapterError adapterError = initParams(loadInfo);
        // 解析 loadInfo 参数,若解析失败 回调失败
        if (adapterError != null) {
            listener.onAdLoadFail(adapterError);
            return;
        }
        // 创建原生广告对象并发起加载,同时处理加载相关回调事件
        YourNativeAd nativeAd = new YourNativeAd(context, loadInfo.getPlacementId());
        nativeAd.setAdListener(new YourNativeAdListener(){
            // 在此处处理加载相关回调事件
            ...
            // YourMCNativeAd extends MCNativeAd
            MCNativeAd.Builder builder = new MCNativeAd.Builder()
                    .isTemplateNativeAd(YourNativeAdView != null)
                    .setTitle(nativeAd.getTitle())
                    .setBody(nativeAd.getBody())
                    .setCallToAction(nativeAd.getCallToAction())
                    .setAdvertiser(nativeAd.getAdvertiser())
                    .setOptionsView(nativeAd.getOptionsView())
                    .setMediaContentAspectRatio(nativeAd.getMediaContentAspectRatio())
                    .setMediaView(nativeAd.getMediaView());
            listener.onAdLoadSuccess(new YourAdInfo(), new YourMCNativeAd(builder));
            ...
            listener.onAdLoadFail("加载失败");
            ...
        });
        nativeAd.load();
    }

    @Override
    public View getBannerView() {
        return YourBannerdAdView;
    }

    @Override
    public boolean isAdReady() {
        // 处理各样式广告是否准备好可展示
    }

    @Override
    public void show(Activity activity, ViewGroup container, Map<String, Object> extra, MCAdapterListener listener) {
        // 处理激励广告,插屏广告,开屏广告的展示逻辑,同时处理相关回调事件
        if (YourRewardedAd != null) {
            YourRewardedAd.show(activity);
            return;
        }
        if (YourInterstitialAd != null) {
            YourInterstitialAd.show(activity);
            return;
        }
        if (YourSplashdAd != null) {
            YourSplashdAd.show(activity);
            return;
        }
    }

    @Override
    public void destroy() { }

    @Override
    public void showMediationDebugger(Context context) { }
}
上一个
高级功能
下一个
自定义流量分组
最近修改: 2025-03-17Powered by