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(仅激励,插屏,横幅,开屏使用) |
void onAdLoadSuccess(IAdInfo adInfo, MCNativeAd mcNativeAd) |
广告加载成功时调用此方法通知MCSDK(仅原生广告使用) |
void onAdLoadFail(MCAdapterError adapterError) |
广告加载失败时调用此方法通知MCSDK |
void onAdShow(IAdInfo adInfo) |
广告展示成功时调用此方法通知MCSDK |
void onAdClick(IAdInfo adInfo) |
广告点击时调用此方法通知MCSDK |
void onAdClose(IAdInfo adInfo) |
广告关闭时调用此方法通知MCSDK |
void onAdVideoStart(IAdInfo adInfo) |
广告视频开始播放时调用此方法通知MCSDK |
void onAdVideoEnd(IAdInfo adInfo) |
广告视频播放结束时调用此方法通知MCSDK |
void onAdDisplayFailed(IAdInfo adInfo, MCAdapterError adapterError) |
广告展示失败时调用此方法通知MCSDK |
void onAdReward(IAdInfo adInfo, MCReward rewardInfo) |
激励视频触广告发奖励时调用此方法通知MCSDK |
void onAdRevenuePaid(IAdInfo adInfo) |
获取广告收益时调用此方法通知MCSDK |
6. 广告加载结果的对象
● IAdInfo
💡Tips
- 需要您参照下面的方法说明,继承
IAdInfo
并自行构建广告加载结果对象
方法 | 说明 |
---|---|
String getMediationPlacementId() |
在此方法中返回聚合平台的广告位ID |
String getScenarioId() |
在此方法中返回聚合平台的场景ID |
String getNetworkPlacementId() |
在此方法中返回聚合平台中配置的广告平台的广告位ID |
MCAdFormat getFormat() |
在此方法中返回广告样式类型,类型如下: |
double getRevenue() |
在此方法中返回当次广告展示的收益 |
String getRevenuePrecision() |
在此方法中返回收益精度,取值如下:IAdInfo.PRECISION_PUBLISHER_DEFINED:开发者在聚合后台为广告源定义的价格 |
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) { }
}