Menu

Rewarded-Video

💡Tips

  • Before calling any ad API, make sure McSdk.initialize() has completed initialization; otherwise the call will be ignored
  • It is recommended to set up the Listener and load ads as early as possible at app launch to ensure ads are ready when you need to show them
  • onAdReceivedRewardCallback is the only reliable timing to grant rewards — always handle reward logic in this callback
  • The SDK has built-in exponential backoff retry logic on load failure to avoid frequent requests that may reduce fill rate

dart Copy
const String _adUnitId = "your mediation unit id";
int _retryAttempt = 0;

void initRewardedAd() {
  McSdk.setRewardedAdListener(McRewardedAdListener(
    onAdLoadedCallback: (McAd ad) {
      // Ad loaded successfully, reset retry count
      _retryAttempt = 0;
    },
    onAdLoadFailedCallback: (String adUnitId, McError error) {
      // Ad failed to load, retry with exponential backoff
      _retryAttempt++;
      if (_retryAttempt >= 3) {
        return;
      }
      final delaySeconds = pow(2, min(3, _retryAttempt)).toInt();
      Future.delayed(Duration(seconds: delaySeconds), () {
        McSdk.loadRewardedAd(_adUnitId);
      });
    },
    onAdDisplayedCallback: (McAd ad) {
      // Ad displayed successfully, preload next ad
      McSdk.loadRewardedAd(_adUnitId);
    },
    onAdDisplayFailedCallback: (McAd ad, McError error) {
      // Ad failed to display, reload
      McSdk.loadRewardedAd(_adUnitId);
    },
    onAdClickedCallback: (McAd ad) {
      // User clicked the ad
    },
    onAdHiddenCallback: (McAd ad) {
      // Ad closed, preload next ad
      McSdk.loadRewardedAd(_adUnitId);
    },
    onAdRevenuePaidCallback: (McAd ad) {
      // Ad revenue callback
    },
    onAdLoadFinishedCallback: (String adUnitId) {
      // Current load round finished (fires regardless of success or failure)
    },
    onAdReceivedRewardCallback: (McAd ad, McReward reward) {
      // ⚠️ User completed the reward, grant reward here
      // reward.amount — reward quantity (int)
      // reward.label — reward type (String)
      print("Reward type: ${reward.label} x ${reward.amount}");
    },
    onAdFailedToReceivedRewardCallback: (McAd ad) {
      // Callback when reward grant fails
    },
  ));

  // Initiate load request
  McSdk.loadRewardedAd(_adUnitId);
}

dart Copy
Future<void> showRewardedAd() async {
  final isReady = await McSdk.isRewardedAdReady(_adUnitId);
  if (isReady == true) {
    McSdk.showRewardedAd(_adUnitId);
  } else {
    McSdk.loadRewardedAd(_adUnitId);
  }
}

3. Set Custom Parameters

dart Copy
// Set Extra Parameter, only for Max
McSdk.setRewardedAdExtraParameter(_adUnitId, "key", "value");

// Set Local Extra Parameter
McSdk.setRewardedAdLocalExtraParameter(_adUnitId, "key", value);

// Parameters must be set before loadRewardedAd() and apply to all subsequent load requests

Previous
App-Open
Next
Privacy Policy
Last modified: 2026-06-25Powered by