From 46c0e0ce54c397f837cd95f46c6b712f648e9438 Mon Sep 17 00:00:00 2001 From: Grant Kemp Date: Fri, 25 Mar 2022 13:00:37 +0000 Subject: [PATCH 1/3] feature: added libraries for 3rd party ad_impression sample snippets. We need to include these to ensure that the project builds and we can include the "override" methods for the 3rd parties. --- analytics/app/build.gradle | 11 ++++++++++- analytics/settings.gradle | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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/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/' + } + } +} From fd871a950b6a1aeff78ad50ba7b7c2056771ea5b Mon Sep 17 00:00:00 2001 From: Grant Kemp Date: Fri, 25 Mar 2022 13:09:33 +0000 Subject: [PATCH 2/3] feature: added 3rd party sample ad_impression snippets for both Kotlin and Java to address issue #324 --- .../example/analytics/MainActivity.java | 51 ++++++++++++++++++- .../example/analytics/kotlin/MainActivity.kt | 43 +++++++++++++++- 2 files changed, 90 insertions(+), 4 deletions(-) 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..38b141ddf 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,19 @@ import android.os.Parcelable; import androidx.appcompat.app.AppCompatActivity; - import com.google.firebase.analytics.FirebaseAnalytics; -public class MainActivity extends AppCompatActivity { +// Disregard the below 5 lines which replicate ad_impression data being sent from 3rd parties and are not required for Firebase implementations. +// Added 3rd party imports to support 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 + // Disregard the line below as its used to replicate ad_impression data being sent from 3rd parties and is not required for Firebase implementations. + implements MaxAdRevenueListener, ImpressionDataListener { @Override protected void onCreate(Bundle savedInstanceState) { @@ -221,4 +230,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..3bbc41560 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,15 @@ 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 +// Disregard the below 5 lines which replicate ad_impression data being sent from 3rd parties and are not required for Firebase implementations. +// Added 3rd party imports to support 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(), MaxAdRevenueListener, ImpressionDataListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -193,4 +199,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 From c6bce39456ddf13b53184421866562b7bdf0f73f Mon Sep 17 00:00:00 2001 From: Grant Kemp Date: Fri, 25 Mar 2022 16:01:39 +0000 Subject: [PATCH 3/3] tidy: updated comments for simplicity and clarity --- .../google/firebase/example/analytics/MainActivity.java | 5 ++--- .../firebase/example/analytics/kotlin/MainActivity.kt | 7 ++++--- 2 files changed, 6 insertions(+), 6 deletions(-) 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 38b141ddf..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 @@ -21,8 +21,7 @@ import androidx.appcompat.app.AppCompatActivity; import com.google.firebase.analytics.FirebaseAnalytics; -// Disregard the below 5 lines which replicate ad_impression data being sent from 3rd parties and are not required for Firebase implementations. -// Added 3rd party imports to support ad_impression snippets +// 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; @@ -30,7 +29,7 @@ public class MainActivity extends AppCompatActivity - // Disregard the line below as its used to replicate ad_impression data being sent from 3rd parties and is not required for Firebase implementations. +// importing libraries to support 3rd party ad_impression snippets implements MaxAdRevenueListener, ImpressionDataListener { @Override 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 3bbc41560..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,15 +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 -// Disregard the below 5 lines which replicate ad_impression data being sent from 3rd parties and are not required for Firebase implementations. -// Added 3rd party imports to support ad_impression snippets +// 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(), MaxAdRevenueListener, ImpressionDataListener { +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)