Skip to content

Commit e365f4f

Browse files
authored
Initial Admob 2021 pinned to 20.1.0 (#622)
* Android pinned to new version * Updates to Admob Android to reduce usage of BannerViewHelper.java (#624) * removed some BannerViewHelper code, the rest requires upcoming listener revamp * added <string.h> include to banner_view_internal_android.cc * iOS Baseline to build upon for the Admob 2021 SDK (#625) * removed nativeAdExpress and rewardedVideo iOS impls * removed extra comma in admob testapp project * fixed lint errors * linting fixes * add new line to the end of BannerViewHelper.java * update use of futures in initialization * Updated error string * Fix request builder Android leak * check completions in both directions * format fixes * Skip AlreadyInitialized on Desktop
1 parent 8925603 commit e365f4f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+434
-5074
lines changed

Android/firebase_dependencies.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import org.gradle.util.ConfigureUtil;
1717
// A map of library to the dependencies that need to be added for it.
1818
def firebaseDependenciesMap = [
1919
'app' : ['com.google.firebase:firebase-analytics:19.0.0'],
20-
'admob' : ['com.google.firebase:firebase-ads:19.8.0',
21-
'com.google.firebase:firebase-analytics:19.0.0',
20+
'admob' : ['com.google.firebase:firebase-ads:20.1.0',
21+
'com.google.android.gms:play-services-measurement-sdk-api:19.0.0',
2222
'com.google.android.gms:play-services-base:17.6.0'],
2323
'analytics' : ['com.google.firebase:firebase-analytics:19.0.0',
2424
'com.google.android.gms:play-services-base:17.6.0'],

admob/CMakeLists.txt

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@ set(common_SRCS
2020
src/common/banner_view.cc
2121
src/common/banner_view_internal.cc
2222
src/common/interstitial_ad.cc
23-
src/common/interstitial_ad_internal.cc
24-
src/common/native_express_ad_view.cc
25-
src/common/native_express_ad_view_internal.cc
26-
src/common/rewarded_video.cc
27-
src/common/rewarded_video_internal.cc)
23+
src/common/interstitial_ad_internal.cc)
2824

2925
# Define the resource build needed for Android
3026
firebase_cpp_gradle(":admob:admob_resources:generateDexJarRelease"
@@ -40,22 +36,16 @@ set(android_SRCS
4036
src/android/ad_request_converter.cc
4137
src/android/admob_android.cc
4238
src/android/banner_view_internal_android.cc
43-
src/android/interstitial_ad_internal_android.cc
44-
src/android/native_express_ad_view_internal_android.cc
45-
src/android/rewarded_video_internal_android.cc)
39+
src/android/interstitial_ad_internal_android.cc)
4640

4741
# Source files used by the iOS implementation.
4842
set(ios_SRCS
4943
src/ios/FADBannerView.mm
5044
src/ios/FADInterstitialDelegate.mm
51-
src/ios/FADNativeExpressAdView.mm
5245
src/ios/FADRequest.mm
53-
src/ios/FADRewardBasedVideoAdDelegate.mm
5446
src/ios/admob_ios.mm
5547
src/ios/banner_view_internal_ios.mm
56-
src/ios/interstitial_ad_internal_ios.mm
57-
src/ios/native_express_ad_view_internal_ios.mm
58-
src/ios/rewarded_video_internal_ios.mm)
48+
src/ios/interstitial_ad_internal_ios.mm)
5949

6050
# Source files used by the stub implementation.
6151
set(stub_SRCS

admob/admob_resources/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ android {
4646

4747
dependencies {
4848
implementation 'com.google.firebase:firebase-analytics:19.0.0'
49-
implementation 'com.google.firebase:firebase-ads:19.8.0'
49+
implementation 'com.google.firebase:firebase-ads:20.1.0'
5050
}
5151

5252
afterEvaluate {

admob/integration_test/src/integration_test.cc

Lines changed: 51 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,9 @@ const char* kAdMobAppID = "ca-app-pub-3940256099942544~1458002511";
6262
#if defined(__ANDROID__)
6363
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/6300978111";
6464
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/1033173712";
65-
const char* kRewardedVideoAdUnit = "ca-app-pub-3940256099942544/5224354917";
6665
#else
6766
const char* kBannerAdUnit = "ca-app-pub-3940256099942544/2934735716";
6867
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/4411468910";
69-
const char* kRewardedVideoAdUnit = "ca-app-pub-3940256099942544/1712485313";
7068
#endif
7169

7270
using app_framework::LogDebug;
@@ -108,11 +106,11 @@ void FirebaseAdMobTest::SetUpTestSuite() {
108106
LogDebug("Initializing AdMob.");
109107

110108
::firebase::ModuleInitializer initializer;
111-
initializer.Initialize(
112-
shared_app_, nullptr, [](::firebase::App* app, void* /* userdata */) {
113-
LogDebug("Try to initialize AdMob");
114-
return ::firebase::admob::Initialize(*app, kAdMobAppID);
115-
});
109+
initializer.Initialize(shared_app_, nullptr,
110+
[](::firebase::App* app, void* /* userdata */) {
111+
LogDebug("Try to initialize AdMob");
112+
return ::firebase::admob::Initialize(*app);
113+
});
116114

117115
WaitForCompletion(initializer.InitializeLastResult(), "Initialize");
118116

@@ -147,31 +145,11 @@ firebase::admob::AdRequest FirebaseAdMobTest::GetAdRequest() {
147145
// Sample keywords to use in making the request.
148146
static const char* kKeywords[] = {"AdMob", "C++", "Fun"};
149147

150-
// Sample birthday value to use in making the request.
151-
static const int kBirthdayDay = 10;
152-
static const int kBirthdayMonth = 11;
153-
static const int kBirthdayYear = 1976;
154-
155148
// Sample test device IDs to use in making the request.
156149
static const char* kTestDeviceIDs[] = {"2077ef9a63d2b398840261c8221a0c9b",
157150
"098fe087d987c9a878965454a65654d7"};
158151

159152
firebase::admob::AdRequest request;
160-
// If the app is aware of the user's gender, it can be added to the targeting
161-
// information. Otherwise, "unknown" should be used.
162-
request.gender = firebase::admob::kGenderUnknown;
163-
164-
// This value allows publishers to specify whether they would like the request
165-
// to be treated as child-directed for purposes of the Children’s Online
166-
// Privacy Protection Act (COPPA).
167-
// See http://business.ftc.gov/privacy-and-security/childrens-privacy.
168-
request.tagged_for_child_directed_treatment =
169-
firebase::admob::kChildDirectedTreatmentStateTagged;
170-
171-
// The user's birthday, if known. Note that months are indexed from one.
172-
request.birthday_day = kBirthdayDay;
173-
request.birthday_month = kBirthdayMonth;
174-
request.birthday_year = kBirthdayYear;
175153

176154
// Additional keywords to be used in targeting.
177155
request.keyword_count = sizeof(kKeywords) / sizeof(kKeywords[0]);
@@ -199,7 +177,6 @@ firebase::admob::AdRequest FirebaseAdMobTest::GetAdRequest() {
199177
}
200178

201179
// Test cases below.
202-
203180
TEST_F(FirebaseAdMobTest, TestGetAdRequest) { GetAdRequest(); }
204181

205182
// A simple listener to help test changes to a BannerView.
@@ -332,8 +309,8 @@ TEST_F(FirebaseAdMobTest, TestBannerView) {
332309
WaitForCompletion(banner->Hide(), "Hide 2");
333310
expected_presentation_states.push_back(
334311
firebase::admob::BannerView::kPresentationStateHidden);
335-
336312
delete banner;
313+
337314
expected_presentation_states.push_back(
338315
firebase::admob::BannerView::kPresentationStateHidden);
339316
expected_num_bounding_box_changes++;
@@ -376,6 +353,47 @@ TEST_F(FirebaseAdMobTest, TestBannerView) {
376353
#endif
377354
}
378355

356+
TEST_F(FirebaseAdMobTest, TestBannerViewAlreadyInitialized) {
357+
SKIP_TEST_ON_DESKTOP;
358+
359+
static const int kBannerWidth = 320;
360+
static const int kBannerHeight = 50;
361+
362+
firebase::admob::AdSize banner_ad_size;
363+
banner_ad_size.ad_size_type = firebase::admob::kAdSizeStandard;
364+
banner_ad_size.width = kBannerWidth;
365+
banner_ad_size.height = kBannerHeight;
366+
367+
firebase::admob::BannerView* banner = new firebase::admob::BannerView();
368+
369+
{
370+
firebase::Future<void> first_initialize = banner->Initialize(
371+
app_framework::GetWindowContext(), kBannerAdUnit, banner_ad_size);
372+
firebase::Future<void> second_initialize = banner->Initialize(
373+
app_framework::GetWindowContext(), kBannerAdUnit, banner_ad_size);
374+
375+
WaitForCompletion(second_initialize, "Second Initialize 1",
376+
firebase::admob::kAdMobErrorAlreadyInitialized);
377+
WaitForCompletion(first_initialize, "First Initialize 1");
378+
delete banner;
379+
}
380+
381+
// Reverse the order completion waits.
382+
{
383+
banner = new firebase::admob::BannerView();
384+
385+
firebase::Future<void> first_initialize = banner->Initialize(
386+
app_framework::GetWindowContext(), kBannerAdUnit, banner_ad_size);
387+
firebase::Future<void> second_initialize = banner->Initialize(
388+
app_framework::GetWindowContext(), kBannerAdUnit, banner_ad_size);
389+
390+
WaitForCompletion(first_initialize, "First Initialize - reverse test");
391+
WaitForCompletion(second_initialize, "Second Initialize - reverse test",
392+
firebase::admob::kAdMobErrorAlreadyInitialized);
393+
delete banner;
394+
}
395+
}
396+
379397
// A simple listener to help test changes to a InterstitialAd.
380398
class TestInterstitialAdListener
381399
: public firebase::admob::InterstitialAd::Listener {
@@ -394,18 +412,20 @@ TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
394412

395413
firebase::admob::InterstitialAd* interstitial =
396414
new firebase::admob::InterstitialAd();
415+
397416
WaitForCompletion(interstitial->Initialize(app_framework::GetWindowContext(),
398417
kInterstitialAdUnit),
399418
"Initialize");
419+
400420
TestInterstitialAdListener interstitial_listener;
401421
interstitial->SetListener(&interstitial_listener);
402422

403423
firebase::admob::AdRequest request = GetAdRequest();
404424
// When the InterstitialAd is initialized, load an ad.
405425
WaitForCompletion(interstitial->LoadAd(request), "LoadAd");
426+
406427
std::vector<firebase::admob::InterstitialAd::PresentationState>
407428
expected_presentation_states;
408-
409429
WaitForCompletion(interstitial->Show(), "Show");
410430
expected_presentation_states.push_back(
411431
firebase::admob::InterstitialAd::PresentationState::
@@ -416,6 +436,7 @@ TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
416436
kPresentationStateHidden) {
417437
app_framework::ProcessEvents(1000);
418438
}
439+
419440
expected_presentation_states.push_back(
420441
firebase::admob::InterstitialAd::PresentationState::
421442
kPresentationStateHidden);
@@ -426,78 +447,6 @@ TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
426447
delete interstitial;
427448
}
428449

429-
// A simple listener to help test changes to rewarded video state.
430-
class TestRewardedVideoListener
431-
: public firebase::admob::rewarded_video::Listener {
432-
public:
433-
TestRewardedVideoListener() { got_reward_ = false; }
434-
void OnRewarded(firebase::admob::rewarded_video::RewardItem reward) override {
435-
got_reward_ = true;
436-
reward_type_ = reward.reward_type;
437-
reward_amount_ = reward.amount;
438-
}
439-
void OnPresentationStateChanged(
440-
firebase::admob::rewarded_video::PresentationState state) override {
441-
presentation_states_.push_back(state);
442-
}
443-
bool got_reward_;
444-
std::string reward_type_;
445-
float reward_amount_;
446-
std::vector<firebase::admob::rewarded_video::PresentationState>
447-
presentation_states_;
448-
};
449-
450-
TEST_F(FirebaseAdMobTest, TestRewardedVideoAd) {
451-
TEST_REQUIRES_USER_INTERACTION;
452-
453-
namespace rewarded_video = firebase::admob::rewarded_video;
454-
WaitForCompletion(rewarded_video::Initialize(), "Initialize");
455-
456-
TestRewardedVideoListener rewarded_listener;
457-
rewarded_video::SetListener(&rewarded_listener);
458-
459-
firebase::admob::AdRequest request = GetAdRequest();
460-
WaitForCompletion(rewarded_video::LoadAd(kRewardedVideoAdUnit, request),
461-
"LoadAd");
462-
463-
std::vector<rewarded_video::PresentationState> expected_presentation_states;
464-
465-
WaitForCompletion(rewarded_video::Show(app_framework::GetWindowContext()),
466-
"Show");
467-
468-
expected_presentation_states.push_back(
469-
rewarded_video::PresentationState::kPresentationStateCoveringUI);
470-
expected_presentation_states.push_back(
471-
rewarded_video::PresentationState::kPresentationStateVideoHasStarted);
472-
473-
// Wait a moment, then pause, then resume.
474-
ProcessEvents(1000);
475-
WaitForCompletion(rewarded_video::Pause(), "Pause");
476-
ProcessEvents(1000);
477-
WaitForCompletion(rewarded_video::Resume(), "Resume");
478-
479-
#if defined(__ANDROID__) || TARGET_OS_IPHONE
480-
// Wait for video to complete.
481-
while (
482-
rewarded_listener.presentation_states_.back() !=
483-
rewarded_video::PresentationState::kPresentationStateVideoHasCompleted) {
484-
ProcessEvents(1000);
485-
}
486-
expected_presentation_states.push_back(
487-
rewarded_video::PresentationState::kPresentationStateVideoHasCompleted);
488-
489-
EXPECT_TRUE(rewarded_listener.got_reward_);
490-
EXPECT_NE(rewarded_listener.reward_type_, "");
491-
EXPECT_NE(rewarded_listener.reward_amount_, 0);
492-
LogDebug("Got reward: %.02f %s", rewarded_listener.reward_amount_,
493-
rewarded_listener.reward_type_.c_str());
494-
495-
EXPECT_EQ(rewarded_listener.presentation_states_,
496-
expected_presentation_states);
497-
#endif
498-
rewarded_video::Destroy();
499-
}
500-
501450
#if defined(ANDROID) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
502451
// Test runs & compiles for phones only.
503452

0 commit comments

Comments
 (0)