Skip to content

Commit bf6f4d2

Browse files
Mobile Ads Developer Relationscopybara-github
authored andcommitted
Implement Bigo Adapter's initialization logic.
PiperOrigin-RevId: 813425795
1 parent 16a03d0 commit bf6f4d2

File tree

2 files changed

+111
-3
lines changed

2 files changed

+111
-3
lines changed

ThirdPartyAdapters/bigo/bigo/src/main/kotlin/com/google/ads/mediation/bigo/BigoMediationAdapter.kt

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import com.google.android.gms.ads.mediation.rtb.RtbAdapter
4040
import com.google.android.gms.ads.mediation.rtb.RtbSignalData
4141
import com.google.android.gms.ads.mediation.rtb.SignalCallbacks
4242
import sg.bigo.ads.BigoAdSdk
43+
import sg.bigo.ads.api.AdConfig
4344

4445
/**
4546
* Bigo Adapter for GMA SDK used to initialize and load ads from the Bigo SDK. This class should not
@@ -104,8 +105,40 @@ class BigoMediationAdapter : RtbAdapter() {
104105
initializationCompleteCallback: InitializationCompleteCallback,
105106
mediationConfigurations: List<MediationConfiguration>,
106107
) {
107-
// TODO: Implement this method.
108-
initializationCompleteCallback.onInitializationSucceeded()
108+
if (BigoAdSdk.isInitialized()) {
109+
initializationCompleteCallback.onInitializationSucceeded()
110+
return
111+
}
112+
113+
val applicationIds =
114+
mediationConfigurations.mapNotNull {
115+
val appId = it.serverParameters.getString(APP_ID_KEY)
116+
if (appId.isNullOrEmpty()) {
117+
null
118+
} else {
119+
appId
120+
}
121+
}
122+
if (applicationIds.isEmpty()) {
123+
initializationCompleteCallback.onInitializationFailed(ERROR_MSG_MISSING_APP_ID)
124+
return
125+
}
126+
val appId = applicationIds[0]
127+
if (appId.isEmpty()) {
128+
initializationCompleteCallback.onInitializationFailed(ERROR_MSG_MISSING_APP_ID)
129+
return
130+
}
131+
if (applicationIds.size > 1) {
132+
val message =
133+
"Multiple $APP_ID_KEY entries found: ${applicationIds}. Using '${appId}' to initialize the Bigo SDK"
134+
Log.w(TAG, message)
135+
}
136+
137+
val adConfig = AdConfig.Builder().setAppId(appId).build()
138+
139+
BigoAdSdk.initialize(context, adConfig) {
140+
initializationCompleteCallback.onInitializationSucceeded()
141+
}
109142
}
110143

111144
override fun collectSignals(signalData: RtbSignalData, callback: SignalCallbacks) {
@@ -179,5 +212,7 @@ class BigoMediationAdapter : RtbAdapter() {
179212
@VisibleForTesting var adapterVersionDelegate: String? = null
180213
const val ADAPTER_ERROR_DOMAIN = "com.google.ads.mediation.bigo"
181214
const val SDK_ERROR_DOMAIN = "" // TODO: Update the third party SDK error domain.
215+
const val APP_ID_KEY = "application_id"
216+
const val ERROR_MSG_MISSING_APP_ID = "App Id to initialize Bigo SDK is empty or missing."
182217
}
183218
}

ThirdPartyAdapters/bigo/bigo/src/test/kotlin/com/google/ads/mediation/bigo/BigoMediationAdapterTest.kt

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,49 @@
1414

1515
package com.google.ads.mediation.bigo
1616

17+
import android.content.Context
18+
import androidx.core.os.bundleOf
19+
import androidx.test.core.app.ApplicationProvider
1720
import androidx.test.ext.junit.runners.AndroidJUnit4
21+
import com.google.ads.mediation.adaptertestkit.AdapterTestKitConstants.TEST_APP_ID
1822
import com.google.ads.mediation.adaptertestkit.assertGetSdkVersion
1923
import com.google.ads.mediation.adaptertestkit.assertGetVersionInfo
24+
import com.google.ads.mediation.bigo.BigoMediationAdapter.Companion.APP_ID_KEY
25+
import com.google.ads.mediation.bigo.BigoMediationAdapter.Companion.ERROR_MSG_MISSING_APP_ID
26+
import com.google.android.gms.ads.AdFormat
27+
import com.google.android.gms.ads.mediation.InitializationCompleteCallback
28+
import com.google.android.gms.ads.mediation.MediationConfiguration
29+
import org.junit.After
2030
import org.junit.Before
2131
import org.junit.Test
2232
import org.junit.runner.RunWith
33+
import org.mockito.MockedStatic
34+
import org.mockito.Mockito.mockStatic
35+
import org.mockito.kotlin.any
36+
import org.mockito.kotlin.argumentCaptor
37+
import org.mockito.kotlin.eq
38+
import org.mockito.kotlin.mock
39+
import org.mockito.kotlin.verify
40+
import sg.bigo.ads.BigoAdSdk
2341

2442
@RunWith(AndroidJUnit4::class)
2543
class BigoMediationAdapterTest {
2644
// Subject of testing
2745
private lateinit var adapter: BigoMediationAdapter
46+
private lateinit var mockBigoSdk: MockedStatic<BigoAdSdk>
47+
48+
private val context = ApplicationProvider.getApplicationContext<Context>()
49+
private val mockInitializationCallback: InitializationCompleteCallback = mock()
2850

2951
@Before
3052
fun setUp() {
3153
adapter = BigoMediationAdapter()
54+
mockBigoSdk = mockStatic(BigoAdSdk::class.java)
55+
}
56+
57+
@After
58+
fun tearDown() {
59+
mockBigoSdk.close()
3260
}
3361

3462
// region Version tests
@@ -48,5 +76,50 @@ class BigoMediationAdapterTest {
4876

4977
// endregion
5078

51-
// TODO: Add tests for the methods that are implemented in the adapter.
79+
// region Initialize tests
80+
@Test
81+
fun initialize_withEmptyConfiguration_invokesOnInitializationFailed() {
82+
adapter.initialize(context, mockInitializationCallback, mediationConfigurations = listOf())
83+
84+
verify(mockInitializationCallback).onInitializationFailed(eq(ERROR_MSG_MISSING_APP_ID))
85+
}
86+
87+
@Test
88+
fun initialize_withoutAnySourceId_invokesOnInitializationFailed() {
89+
val mediationConfiguration =
90+
MediationConfiguration(AdFormat.BANNER, /* serverParameters= */ bundleOf())
91+
92+
adapter.initialize(context, mockInitializationCallback, listOf(mediationConfiguration))
93+
94+
verify(mockInitializationCallback).onInitializationFailed(eq(ERROR_MSG_MISSING_APP_ID))
95+
}
96+
97+
@Test
98+
fun initialize_withEmptySourceId_invokesOnInitializationFailed() {
99+
val mediationConfiguration =
100+
MediationConfiguration(AdFormat.BANNER, /* serverParameters= */ bundleOf(APP_ID_KEY to ""))
101+
102+
adapter.initialize(context, mockInitializationCallback, listOf(mediationConfiguration))
103+
104+
verify(mockInitializationCallback).onInitializationFailed(eq(ERROR_MSG_MISSING_APP_ID))
105+
}
106+
107+
@Test
108+
fun initialize_invokesOnInitializationSucceeded() {
109+
val mediationConfiguration =
110+
MediationConfiguration(
111+
AdFormat.BANNER,
112+
/* serverParameters= */ bundleOf(APP_ID_KEY to TEST_APP_ID),
113+
)
114+
val callbackCaptor = argumentCaptor<BigoAdSdk.InitListener>()
115+
116+
adapter.initialize(context, mockInitializationCallback, listOf(mediationConfiguration))
117+
118+
mockBigoSdk.verify { BigoAdSdk.initialize(eq(context), any(), callbackCaptor.capture()) }
119+
callbackCaptor.firstValue.onInitialized()
120+
verify(mockInitializationCallback).onInitializationSucceeded()
121+
}
122+
123+
// endregion
124+
52125
}

0 commit comments

Comments
 (0)