Flutter SDK Advertisement

Reporting an ad impression

Call trackBaseAdsImpression from your mediation SDK's impression/revenue callback (for example AppLovin MAX's onAdRevenuePaid, or ironSource's onImpressionSuccess), as soon as you receive it:

Future<void> trackBaseAdsImpression(MagifyAdsImpressionData impressionData) => ...

MagifyAdsImpressionData has one named constructor per mediation kind, because the fields that matter differ by kind — the same split MagifyTransaction uses for its kinds.

MagifyAdsImpressionData.appLovin

await MagifyClient.instance.trackBaseAdsImpression(
  MagifyAdsImpressionData.appLovin(
    adUnitId: maxAd.adUnitId,
    networkName: maxAd.networkName,
    impressionId: maxAd.request?.adUnitId,
    revenuePrecision: maxAd.revenuePrecision,
    revenue: maxAd.revenue,
    adsLoadTime: maxAd.requestLatencyMillis?.toDouble(),
  ),
);

MagifyAdsImpressionData.ironSource

instanceId (ironSource's own impression identifier) travels in the same slot the appLovin factory uses for impressionId:

await MagifyClient.instance.trackBaseAdsImpression(
  MagifyAdsImpressionData.ironSource(
    adUnitId: adInfo.adUnit,
    networkName: adInfo.adNetwork,
    instanceId: adInfo.instanceId,
    instanceName: adInfo.instanceName,
    revenue: adInfo.revenue,
    revenuePrecision: adInfo.precision,
  ),
);

MagifyAdsImpressionData.custom

Use this for any mediator without a dedicated factory. mediation names the mediator.

MagifyAdsImpressionData.moPub

Use with care: campaignName, eventName, eventNumber and impressionNumber are required by the Android SDK, but have no equivalent in the iOS SDK's MoPub initializer — iOS silently ignores all four. id is MoPub's own impression identifier, distinct from adUnitId.

Next step

Continue to App Features for remote-controlled behavior, or to Purchases for tracking revenue from purchases instead of ads.

Related articles

RevenueCat

Aghanim purchases

ICampaignWithProducts

AdvertiserService

INetworkStatusProvider

PurchaseStore