Advertisement

The SDK provides APIs for forwarding ad impression and click events from your ad mediator to Magify. This data feeds into analytics and campaign attribution — it is not collected automatically on native Android. You must forward each impression from the mediator's callback.

Ad campaign types

Use the CampaignType values that represent ad placements when calling impression tracking methods. Only the following types are valid for trackAdsImpression:

Passing any other CampaignType to trackAdsImpression is a no-op and logs an error.

Track an ad impression

Call trackAdsImpression(type, data) in the mediator's impression callback, after the ad is shown.

magify.trackAdsImpression(type, data)

The data parameter must be an ApplovinImpressionData or IronSourceImpressionData instance.

AppLovin MAX

import com.magify.sdk.analytics.model.ApplovinImpressionData
import com.magify.sdk.model.CampaignType

// Inside your MaxRewardedAdListener / MaxAdRevenueListener callback:
override fun onAdRevenuePaid(ad: MaxAd) {
    val impressionData = ApplovinImpressionData(
        id = ad.adUnitId,
        network = ad.networkName,
        impressionId = ad.impressionId,
        revenue = ad.revenue,
        precision = ad.revenuePrecision
    )
    magify.trackAdsImpression(CampaignType.REWARDED_VIDEO, impressionData)
}

Map the AppLovin MAX ad format to the corresponding CampaignType:

  • MaxAdFormat.BANNER / MREC / LEADERCampaignType.BANNER
  • MaxAdFormat.INTERSTITIALCampaignType.INTERSTITIAL
  • MaxAdFormat.REWARDEDCampaignType.REWARDED_VIDEO

LevelPlay (IronSource)

import com.magify.sdk.analytics.model.IronSourceImpressionData
import com.magify.sdk.model.CampaignType

// Inside your LevelPlayRewardedAdListener / impression callback:
override fun onAdImpression(adInfo: LevelPlayAdInfo) {
    val impressionData = IronSourceImpressionData(
        id = adInfo.adUnitId,
        network = adInfo.networkName ?: "",
        impressionId = adInfo.impressionId,
        adUnit = adInfo.adUnit,
        instanceName = adInfo.instanceName,
        revenue = adInfo.revenue,
        precision = adInfo.precision,
        ab = adInfo.ab,
        auctionId = adInfo.auctionId,
        segmentName = adInfo.segmentName,
        lifetimeRevenue = adInfo.lifetimeRevenue,
        encryptedCPM = adInfo.encryptedCPM
    )
    magify.trackAdsImpression(CampaignType.REWARDED_VIDEO, impressionData)
}

Track an ad click

Call trackAdsClick(type) when the user taps the ad.

magify.trackAdsClick(CampaignType.INTERSTITIAL)

Pass the same CampaignType used when the impression was tracked.

Track a product click inside an ad

If the ad contains a purchasable product button (e.g. a rewarded offer), call trackAdsProductClick(type, productId) when the user taps the product.

magify.trackAdsProductClick(CampaignType.REWARDED_VIDEO, "com.example.coins_pack")

Impression data types

ApplovinImpressionData

data class ApplovinImpressionData(
    override val id: String,        // ad unit ID
    override val network: String,   // network name
    override val impressionId: String?,
    val revenue: Double?,
    val precision: String?
) : AdsImpressionData

IronSourceImpressionData

data class IronSourceImpressionData(
    override val id: String,        // ad unit ID
    override val network: String,   // network name
    override val impressionId: String?,
    val adUnit: String?,
    val instanceName: String?,
    val revenue: Double?,
    val precision: String?,
    val ab: String?,
    val auctionId: String?,
    val segmentName: String?,
    val lifetimeRevenue: Double?,
    val encryptedCPM: String?
) : AdsImpressionData

Both types implement AdsImpressionData. Pass null for any optional field your mediator does not provide.

Next step

For purchase tracking triggered after an ad interaction, see the Purchases section.

Related articles

Releases

MagifyManager․Storage

Utils

PurchaseInfo

MagifyManager․Lto

MagifyManager․GameState