Skip to content

Commit 5ad1f59

Browse files
Mobile Ads Developer Relationscopybara-github
authored andcommitted
Maps AgeRestrictedTreatment to PubMatic's COPPA API.
PiperOrigin-RevId: 922336511
1 parent 60f2167 commit 5ad1f59

6 files changed

Lines changed: 313 additions & 5 deletions

File tree

ThirdPartyAdapters/pubmatic/CHANGELOG.md

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

3+
#### Next Version
4+
- Maps `AgeRestrictedTreatment` to PubMatic's COPPA API.
5+
36
#### Version 5.1.2.0
47
- Verified compatibility with Pubmatic SDK 5.1.2.
58

ThirdPartyAdapters/pubmatic/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
buildscript {
22
ext {
3-
kotlinVersion = '2.1.10'
3+
kotlinVersion = '2.3.0'
44
}
55
repositories {
66
google()

ThirdPartyAdapters/pubmatic/gradlew

Lines changed: 251 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ThirdPartyAdapters/pubmatic/pubmatic/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ dependencies {
136136
implementation 'androidx.core:core-ktx:1.13.1'
137137
// Check for a 'useNextGenGma' flag to use the next generation GMA SDK.
138138
if (project.hasProperty('useNextGenGma')) {
139-
implementation 'com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:1.0.1'
139+
implementation 'com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:1.1.0'
140140
} else {
141-
implementation 'com.google.android.gms:play-services-ads:25.2.0'
141+
implementation 'com.google.android.gms:play-services-ads:25.3.0'
142142
}
143143
implementation 'com.github.bumptech.glide:glide:4.16.0'
144144

@@ -151,7 +151,7 @@ dependencies {
151151
testImplementation "com.google.truth:truth:1.1.5"
152152
testImplementation 'junit:junit:4.13.2'
153153
testImplementation "org.jacoco:org.jacoco.core:$jacocoVersion"
154-
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib:1.9.21'
154+
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib:2.3.0'
155155
testImplementation 'org.mockito.kotlin:mockito-kotlin:5.1.0'
156156
testImplementation 'org.robolectric:robolectric:4.9'
157157
testImplementation project(':adaptertestkit')

ThirdPartyAdapters/pubmatic/pubmatic/src/main/kotlin/com/google/ads/mediation/pubmatic/PubMaticMediationAdapter.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.annotation.VisibleForTesting
2020
import com.google.android.gms.ads.AdError
2121
import com.google.android.gms.ads.AdFormat
2222
import com.google.android.gms.ads.AdSize
23+
import com.google.android.gms.ads.AgeRestrictedTreatment
2324
import com.google.android.gms.ads.MobileAds
2425
import com.google.android.gms.ads.RequestConfiguration
2526
import com.google.android.gms.ads.VersionInfo
@@ -115,9 +116,11 @@ constructor(
115116
val tagForChildDirectedTreatment =
116117
MobileAds.getRequestConfiguration().tagForChildDirectedTreatment
117118
val tagForUnderAgeOfConsent = MobileAds.getRequestConfiguration().tagForUnderAgeOfConsent
119+
val ageRestrictedTreatment = MobileAds.getRequestConfiguration().ageRestrictedTreatment
118120
if (
119121
tagForChildDirectedTreatment == RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE ||
120-
tagForUnderAgeOfConsent == RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE
122+
tagForUnderAgeOfConsent == RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE ||
123+
ageRestrictedTreatment == AgeRestrictedTreatment.CHILD
121124
) {
122125
OpenWrapSDK.setCoppa(true)
123126
} else if (

ThirdPartyAdapters/pubmatic/pubmatic/src/test/kotlin/com/google/ads/mediation/pubmatic/PubMaticMediationAdapterTest.kt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import com.google.ads.mediation.pubmatic.PubMaticMediationAdapter.Companion.SDK_
4444
import com.google.android.gms.ads.AdError
4545
import com.google.android.gms.ads.AdFormat
4646
import com.google.android.gms.ads.AdSize
47+
import com.google.android.gms.ads.AgeRestrictedTreatment
4748
import com.google.android.gms.ads.MobileAds
4849
import com.google.android.gms.ads.RequestConfiguration
4950
import com.google.android.gms.ads.RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_FALSE
@@ -161,6 +162,14 @@ class PubMaticMediationAdapterTest {
161162

162163
@Before
163164
fun setUp() {
165+
val requestConfiguration =
166+
RequestConfiguration.Builder()
167+
.setTagForChildDirectedTreatment(TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED)
168+
.setTagForUnderAgeOfConsent(TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED)
169+
.setAgeRestrictedTreatment(AgeRestrictedTreatment.UNSPECIFIED)
170+
.build()
171+
MobileAds.setRequestConfiguration(requestConfiguration)
172+
164173
adapter = PubMaticMediationAdapter(pubMaticSignalGenerator, pubMaticAdFactory, mediationUtils)
165174
}
166175

@@ -289,6 +298,48 @@ class PubMaticMediationAdapterTest {
289298
}
290299
}
291300

301+
@Test
302+
fun initialize_whenAgeRestrictedTreatmentChild_setsOpenWrapCoppaTrue() {
303+
MobileAds.setRequestConfiguration(
304+
RequestConfiguration.Builder()
305+
.setTagForChildDirectedTreatment(TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED)
306+
.setTagForUnderAgeOfConsent(TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED)
307+
.setAgeRestrictedTreatment(AgeRestrictedTreatment.CHILD)
308+
.build()
309+
)
310+
311+
mockStatic(OpenWrapSDK::class.java).use { openWrapSdk ->
312+
adapter.initialize(
313+
context = context,
314+
initializationCompleteCallback = mock(),
315+
mediationConfigurations = emptyList(),
316+
)
317+
318+
openWrapSdk.verify { setCoppa(eq(true)) }
319+
}
320+
}
321+
322+
@Test
323+
fun initialize_whenAgeRestrictedTreatmentTeen_doesNotSetOpenWrapCoppa() {
324+
MobileAds.setRequestConfiguration(
325+
RequestConfiguration.Builder()
326+
.setTagForChildDirectedTreatment(TAG_FOR_CHILD_DIRECTED_TREATMENT_UNSPECIFIED)
327+
.setTagForUnderAgeOfConsent(TAG_FOR_UNDER_AGE_OF_CONSENT_UNSPECIFIED)
328+
.setAgeRestrictedTreatment(AgeRestrictedTreatment.TEEN)
329+
.build()
330+
)
331+
332+
mockStatic(OpenWrapSDK::class.java).use { openWrapSdk ->
333+
adapter.initialize(
334+
context = context,
335+
initializationCompleteCallback = mock(),
336+
mediationConfigurations = emptyList(),
337+
)
338+
339+
openWrapSdk.verify({ setCoppa(any()) }, never())
340+
}
341+
}
342+
292343
@Test
293344
fun initialize_initializesOpenWrapSdk() {
294345
mockStatic(OpenWrapSDK::class.java).use { openWrapSdk ->

0 commit comments

Comments
 (0)