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/LEADER→CampaignType.BANNERMaxAdFormat.INTERSTITIAL→CampaignType.INTERSTITIALMaxAdFormat.REWARDED→CampaignType.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.