Skip to content

Commit cd88905

Browse files
authored
Remove networkName from AdFailedToLoad and make it nullable in other ad events (#666)
* Remove networkName from AdFailedToLoad When an ad fails to load, multiple networks may have been involved in trying to fulfill the request, so attributing the failure to a single network is not meaningful. - Remove networkName property from AdFailedToLoadData - Update Android toAndroid() mapping to not pass networkName - Update iOS trackAdFailedToLoad to not pass networkName - Update sample app and tests accordingly * Remove networkName from AdFailedToLoad and make it nullable in other ad events - Remove networkName from AdFailedToLoadData (ADS-16) - Make networkName nullable (String? = null) in AdDisplayedData, AdOpenedData, AdLoadedData, and AdRevenueData (ADS-26) - Update iOS mapping to conditionally include networkName only when non-null - Bump purchases-hybrid-common to 17.33.1 - Update API dump files and tests
1 parent ada7b69 commit cd88905

File tree

17 files changed

+160
-74
lines changed

17 files changed

+160
-74
lines changed

composeApp/src/commonMain/kotlin/com/revenuecat/purchases/kmp/sample/AdTrackingTestingScreen.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ fun AdTrackingTestingScreen(
6161

6262
fun trackAdDisplayed() {
6363
val data = AdDisplayedData(
64-
networkName = "TestNetwork",
64+
networkName = null,
6565
mediatorName = AdMediatorName.AD_MOB,
6666
adFormat = AdFormat.BANNER,
6767
placement = "home_banner",
@@ -76,7 +76,7 @@ fun AdTrackingTestingScreen(
7676

7777
fun trackAdOpened() {
7878
val data = AdOpenedData(
79-
networkName = "TestNetwork",
79+
networkName = null,
8080
mediatorName = AdMediatorName.AD_MOB,
8181
adFormat = AdFormat.BANNER,
8282
placement = "home_banner",
@@ -91,7 +91,7 @@ fun AdTrackingTestingScreen(
9191

9292
fun trackAdRevenue() {
9393
val data = AdRevenueData(
94-
networkName = "TestNetwork",
94+
networkName = null,
9595
mediatorName = AdMediatorName.APP_LOVIN,
9696
adFormat = AdFormat.REWARDED,
9797
placement = "rewarded_video",
@@ -109,7 +109,7 @@ fun AdTrackingTestingScreen(
109109

110110
fun trackAdLoaded() {
111111
val data = AdLoadedData(
112-
networkName = "TestNetwork",
112+
networkName = null,
113113
mediatorName = AdMediatorName.AD_MOB,
114114
adFormat = AdFormat.INTERSTITIAL,
115115
placement = "interstitial",
@@ -124,7 +124,6 @@ fun AdTrackingTestingScreen(
124124

125125
fun trackAdFailedToLoad() {
126126
val data = AdFailedToLoadData(
127-
networkName = "TestNetwork",
128127
mediatorName = AdMediatorName.APP_LOVIN,
129128
adFormat = AdFormat.BANNER,
130129
placement = "banner",

core/core.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Pod::Spec.new do |spec|
99
spec.vendored_frameworks = 'build/cocoapods/framework/Purchases.framework'
1010
spec.libraries = 'c++'
1111
spec.ios.deployment_target = '13.0'
12-
spec.dependency 'PurchasesHybridCommon', '17.32.0'
12+
spec.dependency 'PurchasesHybridCommon', '17.33.1'
1313

1414
if !Dir.exist?('build/cocoapods/framework/Purchases.framework') || Dir.empty?('build/cocoapods/framework/Purchases.framework')
1515
raise "

core/src/iosMain/kotlin/com/revenuecat/purchases/kmp/AdTracker.ios.kt

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ public actual class AdTracker {
3535
return
3636
}
3737

38-
val adData = mapOf<Any?, Any?>(
39-
KEY_NETWORK_NAME to data.networkName,
40-
KEY_MEDIATOR_NAME to data.mediatorName.value,
41-
KEY_AD_FORMAT to data.adFormat.value,
42-
KEY_PLACEMENT to data.placement,
43-
KEY_AD_UNIT_ID to data.adUnitId,
44-
KEY_IMPRESSION_ID to data.impressionId
45-
)
38+
val adData = buildMap<Any?, Any?> {
39+
data.networkName?.let { put(KEY_NETWORK_NAME, it) }
40+
put(KEY_MEDIATOR_NAME, data.mediatorName.value)
41+
put(KEY_AD_FORMAT, data.adFormat.value)
42+
put(KEY_PLACEMENT, data.placement)
43+
put(KEY_AD_UNIT_ID, data.adUnitId)
44+
put(KEY_IMPRESSION_ID, data.impressionId)
45+
}
4646

4747
RCCommonFunctionality.trackAdDisplayed(adData)
4848
}
@@ -53,14 +53,14 @@ public actual class AdTracker {
5353
return
5454
}
5555

56-
val adData = mapOf<Any?, Any?>(
57-
KEY_NETWORK_NAME to data.networkName,
58-
KEY_MEDIATOR_NAME to data.mediatorName.value,
59-
KEY_AD_FORMAT to data.adFormat.value,
60-
KEY_PLACEMENT to data.placement,
61-
KEY_AD_UNIT_ID to data.adUnitId,
62-
KEY_IMPRESSION_ID to data.impressionId
63-
)
56+
val adData = buildMap<Any?, Any?> {
57+
data.networkName?.let { put(KEY_NETWORK_NAME, it) }
58+
put(KEY_MEDIATOR_NAME, data.mediatorName.value)
59+
put(KEY_AD_FORMAT, data.adFormat.value)
60+
put(KEY_PLACEMENT, data.placement)
61+
put(KEY_AD_UNIT_ID, data.adUnitId)
62+
put(KEY_IMPRESSION_ID, data.impressionId)
63+
}
6464

6565
RCCommonFunctionality.trackAdOpened(adData)
6666
}
@@ -71,17 +71,17 @@ public actual class AdTracker {
7171
return
7272
}
7373

74-
val adData = mapOf<Any?, Any?>(
75-
KEY_NETWORK_NAME to data.networkName,
76-
KEY_MEDIATOR_NAME to data.mediatorName.value,
77-
KEY_AD_FORMAT to data.adFormat.value,
78-
KEY_PLACEMENT to data.placement,
79-
KEY_AD_UNIT_ID to data.adUnitId,
80-
KEY_IMPRESSION_ID to data.impressionId,
81-
KEY_REVENUE_MICROS to NSNumber(long = data.revenueMicros),
82-
KEY_CURRENCY to data.currency,
83-
KEY_PRECISION to data.precision.value
84-
)
74+
val adData = buildMap<Any?, Any?> {
75+
data.networkName?.let { put(KEY_NETWORK_NAME, it) }
76+
put(KEY_MEDIATOR_NAME, data.mediatorName.value)
77+
put(KEY_AD_FORMAT, data.adFormat.value)
78+
put(KEY_PLACEMENT, data.placement)
79+
put(KEY_AD_UNIT_ID, data.adUnitId)
80+
put(KEY_IMPRESSION_ID, data.impressionId)
81+
put(KEY_REVENUE_MICROS, NSNumber(long = data.revenueMicros))
82+
put(KEY_CURRENCY, data.currency)
83+
put(KEY_PRECISION, data.precision.value)
84+
}
8585

8686
RCCommonFunctionality.trackAdRevenue(adData)
8787
}
@@ -92,14 +92,14 @@ public actual class AdTracker {
9292
return
9393
}
9494

95-
val adData = mapOf<Any?, Any?>(
96-
KEY_NETWORK_NAME to data.networkName,
97-
KEY_MEDIATOR_NAME to data.mediatorName.value,
98-
KEY_AD_FORMAT to data.adFormat.value,
99-
KEY_PLACEMENT to data.placement,
100-
KEY_AD_UNIT_ID to data.adUnitId,
101-
KEY_IMPRESSION_ID to data.impressionId
102-
)
95+
val adData = buildMap<Any?, Any?> {
96+
data.networkName?.let { put(KEY_NETWORK_NAME, it) }
97+
put(KEY_MEDIATOR_NAME, data.mediatorName.value)
98+
put(KEY_AD_FORMAT, data.adFormat.value)
99+
put(KEY_PLACEMENT, data.placement)
100+
put(KEY_AD_UNIT_ID, data.adUnitId)
101+
put(KEY_IMPRESSION_ID, data.impressionId)
102+
}
103103

104104
RCCommonFunctionality.trackAdLoaded(adData)
105105
}
@@ -111,7 +111,6 @@ public actual class AdTracker {
111111
}
112112

113113
val adData = buildMap<Any?, Any?> {
114-
put(KEY_NETWORK_NAME, data.networkName)
115114
put(KEY_MEDIATOR_NAME, data.mediatorName.value)
116115
put(KEY_AD_FORMAT, data.adFormat.value)
117116
put(KEY_PLACEMENT, data.placement)

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ java = "1.8"
1212
junit = "5.10.0"
1313
kotlin = "2.1.21"
1414
mavenPublish = "0.33.0"
15-
revenuecat-common = "17.32.0"
15+
revenuecat-common = "17.33.1"
1616
revenuecat-kmp = "2.6.0-SNAPSHOT"
1717

1818
[libraries]

mappings/mappings.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Pod::Spec.new do |spec|
99
spec.vendored_frameworks = 'build/cocoapods/framework/mappings.framework'
1010
spec.libraries = 'c++'
1111
spec.ios.deployment_target = '13.0'
12-
spec.dependency 'PurchasesHybridCommon', '17.32.0'
12+
spec.dependency 'PurchasesHybridCommon', '17.33.1'
1313

1414
if !Dir.exist?('build/cocoapods/framework/mappings.framework') || Dir.empty?('build/cocoapods/framework/mappings.framework')
1515
raise "

mappings/src/androidInstrumentedTest/kotlin/com/revenuecat/purchases/kmp/mappings/AdEventTypesMappingsTest.kt

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,21 @@ class AdEventTypesMappingsTest {
5353
assertEquals("impression-456", androidData.impressionId)
5454
}
5555

56+
@Test
57+
fun `AdDisplayedData with null networkName converts to Android type`() {
58+
val kmpData = AdDisplayedData(
59+
mediatorName = AdMediatorName.AD_MOB,
60+
placement = "banner",
61+
adUnitId = "ad-unit-123",
62+
impressionId = "impression-456",
63+
)
64+
65+
val androidData = kmpData.toAndroid()
66+
67+
assertNotNull(androidData)
68+
assertEquals(null, androidData.networkName)
69+
}
70+
5671
@Test
5772
fun `AdOpenedData converts to Android type`() {
5873
val kmpData = AdOpenedData(
@@ -73,6 +88,21 @@ class AdEventTypesMappingsTest {
7388
assertEquals("impression-012", androidData.impressionId)
7489
}
7590

91+
@Test
92+
fun `AdOpenedData with null networkName converts to Android type`() {
93+
val kmpData = AdOpenedData(
94+
mediatorName = AdMediatorName.APP_LOVIN,
95+
placement = null,
96+
adUnitId = "ad-unit-789",
97+
impressionId = "impression-012",
98+
)
99+
100+
val androidData = kmpData.toAndroid()
101+
102+
assertNotNull(androidData)
103+
assertEquals(null, androidData.networkName)
104+
}
105+
76106
@Test
77107
fun `AdRevenueData converts to Android type`() {
78108
val kmpData = AdRevenueData(
@@ -96,6 +126,24 @@ class AdEventTypesMappingsTest {
96126
assertEquals("estimated", androidData.precision.value)
97127
}
98128

129+
@Test
130+
fun `AdRevenueData with null networkName converts to Android type`() {
131+
val kmpData = AdRevenueData(
132+
mediatorName = AdMediatorName.AD_MOB,
133+
placement = "interstitial",
134+
adUnitId = "ad-unit-999",
135+
impressionId = "impression-111",
136+
revenueMicros = 5000000L,
137+
currency = "USD",
138+
precision = AdRevenuePrecision.ESTIMATED,
139+
)
140+
141+
val androidData = kmpData.toAndroid()
142+
143+
assertNotNull(androidData)
144+
assertEquals(null, androidData.networkName)
145+
}
146+
99147
@Test
100148
fun `AdLoadedData converts to Android type`() {
101149
val kmpData = AdLoadedData(
@@ -116,10 +164,24 @@ class AdEventTypesMappingsTest {
116164
assertEquals("impression-333", androidData.impressionId)
117165
}
118166

167+
@Test
168+
fun `AdLoadedData with null networkName converts to Android type`() {
169+
val kmpData = AdLoadedData(
170+
mediatorName = AdMediatorName("CustomMediator"),
171+
placement = "rewarded",
172+
adUnitId = "ad-unit-222",
173+
impressionId = "impression-333",
174+
)
175+
176+
val androidData = kmpData.toAndroid()
177+
178+
assertNotNull(androidData)
179+
assertEquals(null, androidData.networkName)
180+
}
181+
119182
@Test
120183
fun `AdFailedToLoadData converts to Android type`() {
121184
val kmpData = AdFailedToLoadData(
122-
networkName = "TestNetwork",
123185
mediatorName = AdMediatorName.AD_MOB,
124186
placement = "banner",
125187
adUnitId = "ad-unit-444",
@@ -129,7 +191,6 @@ class AdEventTypesMappingsTest {
129191
val androidData = kmpData.toAndroid()
130192

131193
assertNotNull(androidData)
132-
assertEquals("TestNetwork", androidData.networkName)
133194
assertEquals("AdMob", androidData.mediatorName.value)
134195
assertEquals("banner", androidData.placement)
135196
assertEquals("ad-unit-444", androidData.adUnitId)
@@ -139,7 +200,6 @@ class AdEventTypesMappingsTest {
139200
@Test
140201
fun `AdFailedToLoadData with null error code converts to Android type`() {
141202
val kmpData = AdFailedToLoadData(
142-
networkName = "TestNetwork",
143203
mediatorName = AdMediatorName.APP_LOVIN,
144204
placement = null,
145205
adUnitId = "ad-unit-555",

mappings/src/androidMain/kotlin/com/revenuecat/purchases/kmp/mappings/AdEventTypes.android.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ public fun AdLoadedData.toAndroid(): AndroidAdLoadedData {
9696
@OptIn(ExperimentalPreviewRevenueCatPurchasesAPI::class)
9797
public fun AdFailedToLoadData.toAndroid(): AndroidAdFailedToLoadData {
9898
return AndroidAdFailedToLoadData(
99-
networkName = networkName,
10099
mediatorName = mediatorName.toAndroid(),
101100
adFormat = adFormat.toAndroid(),
102101
placement = placement,

models/api/models.api

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ public abstract interface annotation class com/revenuecat/purchases/kmp/Experime
33

44
public final class com/revenuecat/purchases/kmp/models/AdDisplayedData {
55
public fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
6+
public synthetic fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
67
public final fun getAdFormat ()Lcom/revenuecat/purchases/kmp/models/AdFormat;
78
public final fun getAdUnitId ()Ljava/lang/String;
89
public final fun getImpressionId ()Ljava/lang/String;
@@ -12,12 +13,11 @@ public final class com/revenuecat/purchases/kmp/models/AdDisplayedData {
1213
}
1314

1415
public final class com/revenuecat/purchases/kmp/models/AdFailedToLoadData {
15-
public fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)V
16+
public fun <init> (Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)V
1617
public final fun getAdFormat ()Lcom/revenuecat/purchases/kmp/models/AdFormat;
1718
public final fun getAdUnitId ()Ljava/lang/String;
1819
public final fun getMediatorErrorCode ()Ljava/lang/Integer;
1920
public final fun getMediatorName ()Lcom/revenuecat/purchases/kmp/models/AdMediatorName;
20-
public final fun getNetworkName ()Ljava/lang/String;
2121
public final fun getPlacement ()Ljava/lang/String;
2222
}
2323

@@ -40,6 +40,7 @@ public final class com/revenuecat/purchases/kmp/models/AdFormat$Companion {
4040

4141
public final class com/revenuecat/purchases/kmp/models/AdLoadedData {
4242
public fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
43+
public synthetic fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
4344
public final fun getAdFormat ()Lcom/revenuecat/purchases/kmp/models/AdFormat;
4445
public final fun getAdUnitId ()Ljava/lang/String;
4546
public final fun getImpressionId ()Ljava/lang/String;
@@ -61,6 +62,7 @@ public final class com/revenuecat/purchases/kmp/models/AdMediatorName$Companion
6162

6263
public final class com/revenuecat/purchases/kmp/models/AdOpenedData {
6364
public fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
65+
public synthetic fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
6466
public final fun getAdFormat ()Lcom/revenuecat/purchases/kmp/models/AdFormat;
6567
public final fun getAdUnitId ()Ljava/lang/String;
6668
public final fun getImpressionId ()Ljava/lang/String;
@@ -71,6 +73,7 @@ public final class com/revenuecat/purchases/kmp/models/AdOpenedData {
7173

7274
public final class com/revenuecat/purchases/kmp/models/AdRevenueData {
7375
public fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdRevenuePrecision;)V
76+
public synthetic fun <init> (Ljava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdMediatorName;Lcom/revenuecat/purchases/kmp/models/AdFormat;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;Lcom/revenuecat/purchases/kmp/models/AdRevenuePrecision;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
7477
public final fun getAdFormat ()Lcom/revenuecat/purchases/kmp/models/AdFormat;
7578
public final fun getAdUnitId ()Ljava/lang/String;
7679
public final fun getCurrency ()Ljava/lang/String;

0 commit comments

Comments
 (0)