💡Tips
- 调用广告 API 前,请确保
McSdk.initialize()已完成初始化,否则调用将被忽略- 建议在应用启动时尽早设置 Listener 并加载广告,以确保在需要展示时广告已准备就绪
- 加载失败时 SDK 内置指数退避重试逻辑,避免频繁请求导致填充率下降
const String _adUnitId = "your mediation unit id";
int _retryAttempt = 0;
void initInterstitialAd() {
McSdk.setInterstitialListener(McInterstitialListener(
onAdLoadedCallback: (McAd ad) {
// 广告加载成功,重置重试计数
_retryAttempt = 0;
},
onAdLoadFailedCallback: (String adUnitId, McError error) {
// 广告加载失败,使用指数退避策略重试
_retryAttempt++;
if (_retryAttempt >= 3) {
return;
}
final delaySeconds = pow(2, min(3, _retryAttempt)).toInt();
Future.delayed(Duration(seconds: delaySeconds), () {
McSdk.loadInterstitial(_adUnitId);
});
},
onAdDisplayedCallback: (McAd ad) {
// 广告展示成功,预加载下一条广告
McSdk.loadInterstitial(_adUnitId);
},
onAdDisplayFailedCallback: (McAd ad, McError error) {
// 广告展示失败,重新加载
McSdk.loadInterstitial(_adUnitId);
},
onAdClickedCallback: (McAd ad) {
// 用户点击了广告
},
onAdHiddenCallback: (McAd ad) {
// 广告关闭,预加载下一条广告
McSdk.loadInterstitial(_adUnitId);
},
onAdRevenuePaidCallback: (McAd ad) {
// 广告收益回调
},
onAdLoadFinishedCallback: (String adUnitId) {
// 当前加载轮次结束(无论成功或失败均会触发)
},
));
// 发起加载请求
McSdk.loadInterstitial(_adUnitId);
}
Future<void> showInterstitialAd() async {
final isReady = await McSdk.isInterstitialReady(_adUnitId);
if (isReady == true) {
McSdk.showInterstitial(_adUnitId);
} else {
McSdk.loadInterstitial(_adUnitId);
}
}
// 设置额外参数,只用于 Max
McSdk.setInterstitialExtraParameter(_adUnitId, "key", "value");
// 设置额外参数
McSdk.setInterstitialLocalExtraParameter(_adUnitId, "key", value);
// 参数需在 loadInterstitial() 之前设置,对后续所有加载请求生效