💡Tips
- 自动管理多广告位并行加载、缓存与比价展示,开发者只需
SmartLoad→SmartIsReady→SmartShow- 调用
SmartLoadRewardedAd()前必须确保McSdk.InitializeSdk()已完成,否则调用会被忽略- 广告关闭后 SDK 自动补量,无需手动重新加载
OnDidRewardUserForAd是发放奖励的唯一可靠时机,务必在此回调中处理奖励逻辑- Smart Cache 拥有独立的回调通道
McSdkCallbacks.SmartCache.Rewarded,与标准广告位回调McSdkCallbacks.Rewarded完全隔离
public void InitializeSmartRewardedAd()
{
McSdkCallbacks.SmartCache.Rewarded.OnDidLoadAd += OnSmartRewardedAdLoaded;
McSdkCallbacks.SmartCache.Rewarded.OnDidFailToLoadAd += OnSmartRewardedAdLoadFailed;
McSdkCallbacks.SmartCache.Rewarded.OnDidDisplayAd += OnSmartRewardedAdDisplayed;
McSdkCallbacks.SmartCache.Rewarded.OnDidHideAd += OnSmartRewardedAdHidden;
McSdkCallbacks.SmartCache.Rewarded.OnDidClickAd += OnSmartRewardedAdClicked;
McSdkCallbacks.SmartCache.Rewarded.OnDidFailToDisplayAd += OnSmartRewardedAdDisplayFailed;
McSdkCallbacks.SmartCache.Rewarded.OnDidPayRevenueForAd += OnSmartRewardedAdRevenuePaid;
McSdkCallbacks.SmartCache.Rewarded.OnDidAdLoadFinished += OnSmartRewardedAdLoadFinished;
// 激励视频特有回调
McSdkCallbacks.SmartCache.Rewarded.OnDidRewardUserForAd += OnSmartRewardedAdUserRewarded;
McSdkCallbacks.SmartCache.Rewarded.OnDidAdVideoStarted += OnSmartRewardedAdVideoStarted;
McSdkCallbacks.SmartCache.Rewarded.OnDidAdVideoCompleted += OnSmartRewardedAdVideoCompleted;
// 无需传入 adUnitId,由服务端策略统一管理
McSdk.SmartLoadRewardedAd();
}
private void OnSmartRewardedAdLoaded(string adUnitId, McSdkBase.AdInfo adInfo)
{
// 至少一个广告就绪
}
private void OnSmartRewardedAdLoadFailed(McSdkBase.ErrorInfo errorInfo)
{
// 所有广告位均加载失败
// SDK 自动重试,无需手动重新加载
}
private void OnSmartRewardedAdDisplayed(string adUnitId, McSdkBase.AdInfo adInfo)
{
// 展示成功回调
}
private void OnSmartRewardedAdHidden(string adUnitId, McSdkBase.AdInfo adInfo)
{
// 广告关闭回调
// SDK 自动补量,无需手动操作
}
private void OnSmartRewardedAdClicked(string adUnitId, McSdkBase.AdInfo adInfo)
{
// 点击回调
}
private void OnSmartRewardedAdDisplayFailed(McSdkBase.ErrorInfo errorInfo, McSdkBase.AdInfo adInfo)
{
// 展示失败回调
// SDK 自动处理,无需手动重新加载
}
private void OnSmartRewardedAdRevenuePaid(string adUnitId, McSdkBase.AdInfo adInfo)
{
// 收益回调
}
private void OnSmartRewardedAdLoadFinished()
{
// 本轮所有广告位加载结束回调(不论成功失败均触发)
// 与 OnDidLoadAd / OnDidFailToLoadAd 的区别:
// OnDidLoadAd — 至少一个广告位加载成功时触发
// OnDidFailToLoadAd — 所有广告位均加载失败时触发
// OnDidAdLoadFinished — 本轮加载流程结束时始终触发
}
private void OnSmartRewardedAdUserRewarded(string adUnitId, McSdkBase.Reward reward, McSdkBase.AdInfo adInfo)
{
// 激励视频特有:用户完成激励,发放奖励
// ⚠️ 这是发放奖励的唯一可靠时机
Debug.Log("奖励类型: " + reward.Label + " x " + reward.Amount);
}
private void OnSmartRewardedAdVideoStarted(string adUnitId, McSdkBase.AdInfo adInfo)
{
// 激励视频特有:视频开始播放
}
private void OnSmartRewardedAdVideoCompleted(string adUnitId, McSdkBase.AdInfo adInfo)
{
// 激励视频特有:视频播放完成
}
⚠️ 注意:智能缓存模式下,
OnDidFailToLoadAd/OnDidFailToDisplayAd/OnDidHideAd回调中不需要手动调用SmartLoadRewardedAd()重新加载,SDK 内部自动管理补量和重试📌 加载期间重复调用
SmartLoadRewardedAd()会被自动忽略,无需开发者手动处理防重复逻辑。📌 Smart Cache 回调
McSdkCallbacks.SmartCache.Rewarded与标准广告位回调McSdkCallbacks.Rewarded完全隔离,两套回调可同时注册、互不影响。
if (McSdk.SmartIsRewardedAdReady()) {
// SDK 自动选择缓存池中 eCPM 最高的广告展示
McSdk.SmartShowRewardedAd();
}
📌
SmartIsRewardedAdReady()返回false时,SDK 会自动触发后台补量,开发者无需额外操作。📌 广告展示后 SDK 自动补量,缓存池中始终保持可用广告。
McSdk.SmartSetRewardedAdExtraParameter("key", "value");
#if UNITY_ANDROID
McSdk.SmartSetRewardedAdLocalExtraParameter("key", new AndroidJavaObject("java.lang.String", "value"));
#elif UNITY_IOS
McSdk.SmartSetRewardedAdLocalExtraParameter("key", "value");
#endif
// 须在 SmartLoadRewardedAd() 前设置,参数设置后对后续所有加载请求生效
McSdk.SmartLoadRewardedAd();