Skip to content

Commit 5652b69

Browse files
Mobile Ads Developer Relationscopybara-github
authored andcommitted
Maps AgeRestrictedTreatment to InMobi's COPPA API.
PiperOrigin-RevId: 922233292
1 parent 60f2167 commit 5652b69

7 files changed

Lines changed: 95 additions & 14 deletions

File tree

ThirdPartyAdapters/inmobi/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## InMobi Android Mediation Adapter Changelog
22

3+
#### Next Version
4+
- Maps `AgeRestrictedTreatment` to InMobi's COPPA API.
5+
36
#### Version 11.3.0.0
47
- Verified compatibility with InMobi Kotlin SDK version 11.3.0.
58

ThirdPartyAdapters/inmobi/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
buildscript {
44
ext {
5-
kotlinVersion = '2.1.10'
5+
kotlinVersion = '2.3.0'
66
}
77
repositories {
88
google()

ThirdPartyAdapters/inmobi/inmobi/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,9 @@ dependencies {
120120
// Mobile Ads SDK
121121
// Check for a 'useNextGenGma' flag to use the next generation GMA SDK.
122122
if (project.hasProperty('useNextGenGma')) {
123-
implementation 'com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:1.0.1'
123+
implementation 'com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:1.1.0'
124124
} else {
125-
implementation 'com.google.android.gms:play-services-ads:25.2.0'
125+
implementation 'com.google.android.gms:play-services-ads:25.3.0'
126126
}
127127

128128
// inMobi SDK
@@ -133,14 +133,14 @@ dependencies {
133133

134134
// Unit tests
135135
testImplementation 'junit:junit:4.13.2'
136-
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib:2.1.10'
136+
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib:2.3.0'
137137
testImplementation 'com.google.truth:truth:1.1.5'
138138
testImplementation 'androidx.test:core:1.6.1'
139139
testImplementation 'org.mockito:mockito-core:5.5.0'
140140
testImplementation 'org.robolectric:robolectric:4.9'
141141
testImplementation 'androidx.test.ext:junit:1.2.1'
142142
testImplementation 'org.mockito.kotlin:mockito-kotlin:5.1.0'
143-
testImplementation 'org.jetbrains.kotlin:kotlin-test:2.1.10'
143+
testImplementation 'org.jetbrains.kotlin:kotlin-test:2.3.0'
144144
}
145145

146146
/**

ThirdPartyAdapters/inmobi/inmobi/src/main/java/com/google/ads/mediation/inmobi/InMobiAdapterUtils.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import androidx.annotation.VisibleForTesting;
2727
import com.google.android.gms.ads.AdError;
2828
import com.google.android.gms.ads.AdSize;
29+
import com.google.android.gms.ads.AgeRestrictedTreatment;
2930
import com.google.android.gms.ads.MobileAds;
3031
import com.google.android.gms.ads.RequestConfiguration;
3132
import com.inmobi.ads.InMobiAdRequestStatus;
@@ -145,7 +146,8 @@ static void setIsAgeRestricted(InMobiSdkWrapper inMobiSdkWrapper) {
145146
if (requestConfiguration.getTagForChildDirectedTreatment()
146147
== RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE
147148
|| requestConfiguration.getTagForUnderAgeOfConsent()
148-
== RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE) {
149+
== RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE
150+
|| requestConfiguration.getAgeRestrictedTreatment() == AgeRestrictedTreatment.CHILD) {
149151
inMobiSdkWrapper.setIsAgeRestricted(true);
150152
} else if (requestConfiguration.getTagForChildDirectedTreatment()
151153
== RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_FALSE

ThirdPartyAdapters/inmobi/inmobi/src/main/java/com/google/ads/mediation/inmobi/InMobiExtrasBuilder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import android.os.Bundle;
66
import androidx.annotation.NonNull;
77
import androidx.annotation.Nullable;
8+
import com.google.android.gms.ads.AgeRestrictedTreatment;
89
import com.google.android.gms.ads.MobileAds;
910
import com.google.android.gms.ads.RequestConfiguration;
1011
import com.inmobi.compliance.InMobiPrivacyCompliance;
11-
1212
import java.util.HashMap;
1313

1414
public class InMobiExtrasBuilder {
@@ -45,7 +45,9 @@ public static InMobiExtras build(@NonNull Context context, @Nullable Bundle medi
4545
// If the COPPA value isn't specified by the publisher, InMobi SDK expects the default value to
4646
// be `0`.
4747
if (MobileAds.getRequestConfiguration().getTagForChildDirectedTreatment()
48-
== RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE) {
48+
== RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE
49+
|| MobileAds.getRequestConfiguration().getAgeRestrictedTreatment()
50+
== AgeRestrictedTreatment.CHILD) {
4951
map.put(COPPA, "1");
5052
} else {
5153
map.put(COPPA, "0");

ThirdPartyAdapters/inmobi/inmobi/src/test/kotlin/com/google/ads/mediation/inmobi/InMobiAdapterUtilsTest.kt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.google.ads.mediation.inmobi
22

33
import android.os.Bundle
44
import androidx.test.ext.junit.runners.AndroidJUnit4
5+
import com.google.android.gms.ads.AgeRestrictedTreatment
56
import com.google.android.gms.ads.MobileAds
67
import com.google.android.gms.ads.RequestConfiguration
78
import com.google.common.truth.Truth.assertThat
@@ -113,6 +114,35 @@ class InMobiAdapterUtilsTest {
113114
setCOPPAAndUnderAgeOnMobileAdsRequestConfiguration(
114115
RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED,
115116
RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED,
117+
AgeRestrictedTreatment.UNSPECIFIED,
118+
)
119+
120+
InMobiAdapterUtils.setIsAgeRestricted(inMobiSdkWrapper)
121+
122+
verify(inMobiSdkWrapper, never()).setIsAgeRestricted(any())
123+
}
124+
125+
@Test
126+
fun setIsAgeRestricted_whenAgeRestrictedTreatmentChild_setsAgeRestrictedTrueOnInMobiSDK() {
127+
val inMobiSdkWrapper = mock<InMobiSdkWrapper>()
128+
setCOPPAAndUnderAgeOnMobileAdsRequestConfiguration(
129+
RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED,
130+
RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED,
131+
AgeRestrictedTreatment.CHILD,
132+
)
133+
134+
InMobiAdapterUtils.setIsAgeRestricted(inMobiSdkWrapper)
135+
136+
verify(inMobiSdkWrapper).setIsAgeRestricted(true)
137+
}
138+
139+
@Test
140+
fun setIsAgeRestricted_whenAgeRestrictedTreatmentTeen_setIsAgeRestrictedIsNeverInvoked() {
141+
val inMobiSdkWrapper = mock<InMobiSdkWrapper>()
142+
setCOPPAAndUnderAgeOnMobileAdsRequestConfiguration(
143+
RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED,
144+
RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED,
145+
AgeRestrictedTreatment.TEEN,
116146
)
117147

118148
InMobiAdapterUtils.setIsAgeRestricted(inMobiSdkWrapper)
@@ -270,12 +300,17 @@ class InMobiAdapterUtilsTest {
270300
assertThat(adError).isNull()
271301
}
272302

273-
private fun setCOPPAAndUnderAgeOnMobileAdsRequestConfiguration(coppa: Int, underAgeConsent: Int) {
303+
private fun setCOPPAAndUnderAgeOnMobileAdsRequestConfiguration(
304+
coppa: Int,
305+
underAgeConsent: Int,
306+
ageRestrictedTreatment: AgeRestrictedTreatment = AgeRestrictedTreatment.UNSPECIFIED,
307+
) {
274308
val requestConfiguration =
275309
MobileAds.getRequestConfiguration()
276310
.toBuilder()
277311
.setTagForChildDirectedTreatment(coppa)
278312
.setTagForUnderAgeOfConsent(underAgeConsent)
313+
.setAgeRestrictedTreatment(ageRestrictedTreatment)
279314
.build()
280315
MobileAds.setRequestConfiguration(requestConfiguration)
281316
}

ThirdPartyAdapters/inmobi/inmobi/src/test/kotlin/com/google/ads/mediation/inmobi/InMobiExtrasBuilderTest.kt

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.google.ads.mediation.inmobi
33
import android.content.Context
44
import android.os.Bundle
55
import androidx.test.core.app.ApplicationProvider
6+
import com.google.android.gms.ads.AgeRestrictedTreatment
67
import com.google.android.gms.ads.MobileAds
78
import com.google.android.gms.ads.RequestConfiguration
89
import com.google.common.truth.Truth.assertThat
@@ -13,7 +14,7 @@ import org.robolectric.ParameterizedRobolectricTestRunner
1314
@RunWith(ParameterizedRobolectricTestRunner::class)
1415
class InMobiExtrasBuilderTest(
1516
private val mediationExtras: Map<String, String>?,
16-
private val protocol: String
17+
private val protocol: String,
1718
) {
1819
private val context = ApplicationProvider.getApplicationContext<Context>()
1920

@@ -56,6 +57,44 @@ class InMobiExtrasBuilderTest(
5657
assertThat(inMobiExtras.parameterMap[InMobiAdapterUtils.COPPA]).isEqualTo("1")
5758
}
5859

60+
@Test
61+
fun buildInMobiExtras_whenAgeRestrictedTreatmentChild_returnsInMobiExtrasWithCoppaTrue() {
62+
val requestConfiguration =
63+
MobileAds.getRequestConfiguration()
64+
.toBuilder()
65+
.setTagForChildDirectedTreatment(
66+
RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED
67+
)
68+
.setAgeRestrictedTreatment(AgeRestrictedTreatment.CHILD)
69+
.build()
70+
MobileAds.setRequestConfiguration(requestConfiguration)
71+
72+
val inMobiExtras = InMobiExtrasBuilder.build(context, mapToBundle(mediationExtras), protocol)
73+
74+
assertThat(inMobiExtras).isNotNull()
75+
assertThat(inMobiExtras.parameterMap).isNotEmpty()
76+
assertThat(inMobiExtras.parameterMap[InMobiAdapterUtils.COPPA]).isEqualTo("1")
77+
}
78+
79+
@Test
80+
fun buildInMobiExtras_whenAgeRestrictedTreatmentTeen_returnsInMobiExtrasWithCoppaFalse() {
81+
val requestConfiguration =
82+
MobileAds.getRequestConfiguration()
83+
.toBuilder()
84+
.setTagForChildDirectedTreatment(
85+
RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED
86+
)
87+
.setAgeRestrictedTreatment(AgeRestrictedTreatment.TEEN)
88+
.build()
89+
MobileAds.setRequestConfiguration(requestConfiguration)
90+
91+
val inMobiExtras = InMobiExtrasBuilder.build(context, mapToBundle(mediationExtras), protocol)
92+
93+
assertThat(inMobiExtras).isNotNull()
94+
assertThat(inMobiExtras.parameterMap).isNotEmpty()
95+
assertThat(inMobiExtras.parameterMap[InMobiAdapterUtils.COPPA]).isEqualTo("0")
96+
}
97+
5998
@Test
6099
fun buildInMobiExtras_whenCoppaNotSet_returnsInMobiExtrasWithCoppaFalse() {
61100
// when coppa value is not specified...
@@ -118,7 +157,7 @@ class InMobiExtrasBuilderTest(
118157

119158
private fun verifyInMobiExtrasParameterMap(
120159
mediationExtras: Map<String, String>?,
121-
inMobiExtras: InMobiExtras
160+
inMobiExtras: InMobiExtras,
122161
) {
123162
if (!mediationExtras.isNullOrEmpty()) {
124163
assertThat(inMobiExtras.parameterMap).containsAtLeastEntriesIn(mediationExtras)
@@ -132,14 +171,14 @@ class InMobiExtrasBuilderTest(
132171
listOf(
133172
arrayOf(
134173
mapOf(InMobiNetworkKeys.AGE to "25", InMobiNetworkKeys.AREA_CODE to "12345"),
135-
InMobiAdapterUtils.PROTOCOL_RTB
174+
InMobiAdapterUtils.PROTOCOL_RTB,
136175
),
137176
arrayOf(
138177
mapOf(InMobiNetworkKeys.CITY to "MTV", InMobiNetworkKeys.LANGUAGE to "Japanese"),
139-
InMobiAdapterUtils.PROTOCOL_WATERFALL
178+
InMobiAdapterUtils.PROTOCOL_WATERFALL,
140179
),
141180
arrayOf(null, InMobiAdapterUtils.PROTOCOL_WATERFALL),
142-
arrayOf(null, InMobiAdapterUtils.PROTOCOL_RTB)
181+
arrayOf(null, InMobiAdapterUtils.PROTOCOL_RTB),
143182
)
144183
}
145184
}

0 commit comments

Comments
 (0)