diff --git a/analytics/app/build.gradle b/analytics/app/build.gradle index c98410917..31f64363f 100644 --- a/analytics/app/build.gradle +++ b/analytics/app/build.gradle @@ -19,13 +19,22 @@ android { } } } +repositories { + maven { + // Ironsource library used for ad_impression snippets + url "https://android-sdk.is.com/" + } +} dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.appcompat:appcompat:1.3.1' - implementation "com.google.firebase:firebase-analytics:19.0.0" implementation "com.google.firebase:firebase-analytics-ktx:19.0.0" + // Ironsource and AppLovin libraries used for ad_impression snippets + implementation 'com.applovin:applovin-sdk:+' + implementation 'com.ironsource.sdk:mediationsdk:7.2.1.1' + } apply plugin: 'com.google.gms.google-services' diff --git a/analytics/app/src/main/java/com/google/firebase/example/analytics/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/example/analytics/MainActivity.java index c1b5d2443..3a57ca79f 100644 --- a/analytics/app/src/main/java/com/google/firebase/example/analytics/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/example/analytics/MainActivity.java @@ -19,10 +19,18 @@ import android.os.Parcelable; import androidx.appcompat.app.AppCompatActivity; - import com.google.firebase.analytics.FirebaseAnalytics; -public class MainActivity extends AppCompatActivity { +// importing libraries to support 3rd party ad_impression snippets +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.MaxAdRevenueListener; +import com.ironsource.mediationsdk.impressionData.ImpressionData; +import com.ironsource.mediationsdk.impressionData.ImpressionDataListener; + + +public class MainActivity extends AppCompatActivity +// importing libraries to support 3rd party ad_impression snippets + implements MaxAdRevenueListener, ImpressionDataListener { @Override protected void onCreate(Bundle savedInstanceState) { @@ -221,4 +229,42 @@ public void enhancedEcommerce() { analytics.logEvent(FirebaseAnalytics.Event.SELECT_PROMOTION, promoParams); // [END apply_promo] } + + // [START ad_impression_applovin] + @Override + public void onAdRevenuePaid(MaxAd impressionData) { + + double revenue = impressionData.getRevenue(); // In USD + + FirebaseAnalytics analytics = FirebaseAnalytics.getInstance(this); + Bundle params = new Bundle(); + params.putString(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin"); + params.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getNetworkName()); + params.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getFormat().getDisplayName()); + params.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getAdUnitId()); + params.putDouble(FirebaseAnalytics.Param.VALUE, revenue); + params.putString(FirebaseAnalytics.Param.CURRENCY, "USD"); // All Applovin revenue is sent in USD + analytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, params); + } + // [END ad_impression_applovin] + + // [START ad_impression_ironsource] + @Override + public void onImpressionSuccess(ImpressionData impressionData) { + // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is opened. + // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" + impressionData); + FirebaseAnalytics analytics = FirebaseAnalytics.getInstance(this); + if (impressionData != null) { + Bundle bundle = new Bundle(); + bundle.putString(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource"); + bundle.putString(FirebaseAnalytics.Param.AD_SOURCE, impressionData.getAdNetwork()); + bundle.putString(FirebaseAnalytics.Param.AD_FORMAT, impressionData.getAdUnit()); + bundle.putString(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.getAdUnit()); + bundle.putString(FirebaseAnalytics.Param.CURRENCY, "USD"); + bundle.putDouble(FirebaseAnalytics.Param.VALUE, impressionData.getRevenue()); + analytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, bundle); + } + } + + // [END ad_impression_ironsource] } diff --git a/analytics/app/src/main/java/com/google/firebase/example/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/example/analytics/kotlin/MainActivity.kt index 59c134868..f54ffbe24 100644 --- a/analytics/app/src/main/java/com/google/firebase/example/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/example/analytics/kotlin/MainActivity.kt @@ -8,9 +8,16 @@ import com.google.firebase.analytics.ktx.analytics import com.google.firebase.analytics.ktx.logEvent import com.google.firebase.example.analytics.R import com.google.firebase.ktx.Firebase +// importing libraries to support 3rd party ad_impression snippets +import com.ironsource.mediationsdk.impressionData.ImpressionDataListener +import com.ironsource.mediationsdk.impressionData.ImpressionData +import com.applovin.mediation.MaxAd +import com.applovin.mediation.MaxAdRevenueListener -class MainActivity : AppCompatActivity() { +class MainActivity : AppCompatActivity(), + // importing libraries to support 3rd party ad_impression snippets + MaxAdRevenueListener, ImpressionDataListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -193,4 +200,37 @@ class MainActivity : AppCompatActivity() { analytics.logEvent(FirebaseAnalytics.Event.SELECT_PROMOTION, promoParams) // [END apply_promo] } -} + // [START ad_impression_applovin] + override fun onAdRevenuePaid(impressionData: MaxAd?) { + impressionData?.let { + val analytics = Firebase.analytics + analytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) { + param(FirebaseAnalytics.Param.AD_PLATFORM, "appLovin") + param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.adUnitId) + param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.format.displayName) + param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.networkName) + param(FirebaseAnalytics.Param.VALUE, impressionData.revenue) + param(FirebaseAnalytics.Param.CURRENCY, "USD") // All Applovin revenue is sent in USD + } + } + } + // [END ad_impression_applovin] + + // [START ad_impression_ironsource] + override fun onImpressionSuccess(impressionData: ImpressionData) { + // The onImpressionSuccess will be reported when the rewarded video and interstitial ad is + // opened. + // For banners, the impression is reported on load success. Log.d(TAG, "onImpressionSuccess" + + // impressionData); + val analytics = Firebase.analytics + analytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION) { + param(FirebaseAnalytics.Param.AD_PLATFORM, "ironSource") + param(FirebaseAnalytics.Param.AD_SOURCE, impressionData.adNetwork) + param(FirebaseAnalytics.Param.AD_FORMAT, impressionData.adUnit) + param(FirebaseAnalytics.Param.AD_UNIT_NAME, impressionData.adUnit) + param(FirebaseAnalytics.Param.CURRENCY, "USD") + param(FirebaseAnalytics.Param.VALUE, impressionData.revenue) + } + } + // [END ad_impression_ironsource] +} \ No newline at end of file diff --git a/analytics/settings.gradle b/analytics/settings.gradle index e7b4def49..9bca1c406 100644 --- a/analytics/settings.gradle +++ b/analytics/settings.gradle @@ -1 +1,10 @@ include ':app' + +// Ironsource library used for ad_impression snippets +dependencyResolutionManagement { + repositories { + maven { + url 'https://android-sdk.is.com/' + } + } +}