Skip to content

Commit f122ff8

Browse files
authored
Return AdapterInitializationStatus from Initialize (#742)
* Change admob::Initialize to return adapter initialization status. * Updated integration test to confirm the default adapter (depending on platform) is present in the list. * Move template functions to the .h file to fix linker issue. * Fix ifdef for windows / Android * Fix build warning in desktop stub.
1 parent efda224 commit f122ff8

File tree

13 files changed

+716
-81
lines changed

13 files changed

+716
-81
lines changed

admob/integration_test/src/integration_test.cc

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
namespace firebase_testapp_automated {
5151

5252
// The AdMob app IDs for the test app.
53-
#if defined(__ANDROID__)
53+
#if defined(ANDROID)
5454
// If you change the AdMob app ID for your Android app, make sure to change it
5555
// in AndroidManifest.xml as well.
5656
const char* kAdMobAppID = "ca-app-pub-3940256099942544~3347511713";
@@ -62,7 +62,7 @@ const char* kAdMobAppID = "ca-app-pub-3940256099942544~1458002511";
6262

6363
// These ad units IDs have been created specifically for testing, and will
6464
// always return test ads.
65-
#if defined(__ANDROID__)
65+
#if defined(ANDROID)
6666
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/6300978111";
6767
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/1033173712";
6868
#else
@@ -86,7 +86,7 @@ enum AdCallbackEvent {
8686
};
8787

8888
// Error domains vary across phone SDKs.
89-
#if defined(__ANDROID__)
89+
#if defined(ANDROID)
9090
const char* kErrorDomain = "com.google.android.gms.ads";
9191
#else
9292
const char* kErrorDomain = "com.google.admob";
@@ -105,7 +105,7 @@ static const std::map<std::string, std::string> kAdMobAdapterExtras = {
105105
{"the_name_of_an_extra", "the_value_for_that_extra"},
106106
{"heres", "a second example"}};
107107

108-
#if defined(__ANDROID__)
108+
#if defined(ANDROID)
109109
static const char* kAdNetworkExtrasClassName =
110110
"com/google/ads/mediation/admob/AdMobAdapter";
111111
#else
@@ -123,6 +123,12 @@ using app_framework::ProcessEvents;
123123

124124
using firebase_test_framework::FirebaseTest;
125125

126+
using testing::AnyOf;
127+
using testing::Contains;
128+
using testing::HasSubstr;
129+
using testing::Pair;
130+
using testing::Property;
131+
126132
class FirebaseAdMobTest : public FirebaseTest {
127133
public:
128134
FirebaseAdMobTest();
@@ -151,20 +157,22 @@ void FirebaseAdMobTest::SetUpTestSuite() {
151157

152158
FindFirebaseConfig(FIREBASE_CONFIG_STRING);
153159

154-
#if defined(__ANDROID__)
160+
#if defined(ANDROID)
155161
shared_app_ = ::firebase::App::Create(app_framework::GetJniEnv(),
156162
app_framework::GetActivity());
157163
#else
158164
shared_app_ = ::firebase::App::Create();
159-
#endif // defined(__ANDROID__)
165+
#endif // defined(ANDROID)
160166

161167
LogDebug("Initializing AdMob.");
162168

163169
::firebase::ModuleInitializer initializer;
164170
initializer.Initialize(shared_app_, nullptr,
165171
[](::firebase::App* app, void* /* userdata */) {
166172
LogDebug("Try to initialize AdMob");
167-
return ::firebase::admob::Initialize(*app);
173+
firebase::InitResult result;
174+
::firebase::admob::Initialize(*app, &result);
175+
return result;
168176
});
169177

170178
WaitForCompletion(initializer.InitializeLastResult(), "Initialize");
@@ -231,6 +239,45 @@ firebase::admob::AdRequest FirebaseAdMobTest::GetAdRequest() {
231239
}
232240

233241
// Test cases below.
242+
TEST_F(FirebaseAdMobTest, TestInitializationStatus) {
243+
// Ensure Initialize()'s result matches GetInitializationStatus().
244+
auto initialize_future = firebase::admob::InitializeLastResult();
245+
WaitForCompletion(initialize_future, "admob::Initialize");
246+
ASSERT_NE(initialize_future.result(), nullptr);
247+
EXPECT_EQ(*initialize_future.result(),
248+
firebase::admob::GetInitializationStatus());
249+
250+
for (auto adapter_status :
251+
firebase::admob::GetInitializationStatus().GetAdapterStatusMap()) {
252+
LogDebug("AdMob Mediation Adapter '%s' %s (latency %d ms): %s",
253+
adapter_status.first.c_str(),
254+
(adapter_status.second.is_initialized() ? "loaded" : "NOT loaded"),
255+
adapter_status.second.latency(),
256+
adapter_status.second.description().c_str());
257+
}
258+
259+
#if defined(ANDROID)
260+
const char kAdMobClassName[] = "com.google.android.gms.ads.MobileAds";
261+
#elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
262+
const char kAdMobClassName[] = "GADMobileAds";
263+
#else // desktop
264+
const char kAdMobClassName[] = "stub";
265+
#endif
266+
267+
// Confirm that the default Google Mobile Ads SDK class name shows up in the
268+
// list. It should either be is_initialized = true, or description should say
269+
// "Timeout" (this is a special case we are using to deflake this test on
270+
// Android emulator).
271+
EXPECT_THAT(
272+
initialize_future.result()->GetAdapterStatusMap(),
273+
Contains(Pair(
274+
kAdMobClassName,
275+
AnyOf(Property(&firebase::admob::AdapterStatus::is_initialized, true),
276+
Property(&firebase::admob::AdapterStatus::description,
277+
HasSubstr("Timeout"))))))
278+
<< "Expected adapter class '" << kAdMobClassName << "' is not loaded.";
279+
}
280+
234281
TEST_F(FirebaseAdMobTest, TestGetAdRequest) { GetAdRequest(); }
235282

236283
TEST_F(FirebaseAdMobTest, TestGetAdRequestValues) {
@@ -465,7 +512,7 @@ TEST_F(FirebaseAdMobTest, TestRequestConfigurationSetGet) {
465512
EXPECT_EQ(retrieved_configuration.max_ad_content_rating,
466513
firebase::admob::RequestConfiguration::kMaxAdContentRatingPG);
467514

468-
#if defined(__ANDROID__)
515+
#if defined(ANDROID)
469516
EXPECT_EQ(retrieved_configuration.tag_for_child_directed_treatment,
470517
firebase::admob::RequestConfiguration::kChildDirectedTreatmentTrue);
471518
EXPECT_EQ(retrieved_configuration.tag_for_under_age_of_consent,
@@ -643,7 +690,7 @@ TEST_F(FirebaseAdMobTest, TestBannerView) {
643690
EXPECT_EQ(++expected_num_bounding_box_changes,
644691
bounding_box_listener.bounding_box_changes_.size());
645692

646-
#if defined(__ANDROID__) || TARGET_OS_IPHONE
693+
#if defined(ANDROID) || TARGET_OS_IPHONE
647694
// As an extra check, all bounding boxes except the last should have the same
648695
// size aspect ratio that we requested. For example if you requested a 320x50
649696
// banner, you can get one with the size 960x150. Use EXPECT_NEAR because the

0 commit comments

Comments
 (0)