Skip to content

Commit 67678b8

Browse files
committed
Android pinned to new version
1 parent 8925603 commit 67678b8

33 files changed

+181
-3625
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/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,10 @@
33
package="com.google.FirebaseCppSdkBuild">
44
<uses-permission android:name="android.permission.INTERNET"/>
55
<uses-sdk android:minSdkVersion="3"/>
6+
<application>
7+
<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
8+
<meta-data
9+
android:name="com.google.android.gms.ads.1:190496035492:android:1bc9896c15afba0c"
10+
android:value="ca-app-pub-3940256099942544~3347511713"/>
11+
</application>
612
</manifest>

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: 10 additions & 101 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]);
@@ -332,8 +310,8 @@ TEST_F(FirebaseAdMobTest, TestBannerView) {
332310
WaitForCompletion(banner->Hide(), "Hide 2");
333311
expected_presentation_states.push_back(
334312
firebase::admob::BannerView::kPresentationStateHidden);
335-
336313
delete banner;
314+
337315
expected_presentation_states.push_back(
338316
firebase::admob::BannerView::kPresentationStateHidden);
339317
expected_num_bounding_box_changes++;
@@ -394,18 +372,20 @@ TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
394372

395373
firebase::admob::InterstitialAd* interstitial =
396374
new firebase::admob::InterstitialAd();
375+
397376
WaitForCompletion(interstitial->Initialize(app_framework::GetWindowContext(),
398377
kInterstitialAdUnit),
399378
"Initialize");
379+
400380
TestInterstitialAdListener interstitial_listener;
401381
interstitial->SetListener(&interstitial_listener);
402382

403383
firebase::admob::AdRequest request = GetAdRequest();
404384
// When the InterstitialAd is initialized, load an ad.
405385
WaitForCompletion(interstitial->LoadAd(request), "LoadAd");
386+
406387
std::vector<firebase::admob::InterstitialAd::PresentationState>
407388
expected_presentation_states;
408-
409389
WaitForCompletion(interstitial->Show(), "Show");
410390
expected_presentation_states.push_back(
411391
firebase::admob::InterstitialAd::PresentationState::
@@ -416,6 +396,7 @@ TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
416396
kPresentationStateHidden) {
417397
app_framework::ProcessEvents(1000);
418398
}
399+
419400
expected_presentation_states.push_back(
420401
firebase::admob::InterstitialAd::PresentationState::
421402
kPresentationStateHidden);
@@ -426,78 +407,6 @@ TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
426407
delete interstitial;
427408
}
428409

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-
501410
#if defined(ANDROID) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
502411
// Test runs & compiles for phones only.
503412

admob/src/android/ad_request_converter.cc

Lines changed: 41 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -42,50 +42,19 @@ METHOD_LOOKUP_DEFINITION(ad_request_builder,
4242
ADREQUESTBUILDER_METHODS);
4343

4444
METHOD_LOOKUP_DEFINITION(
45-
ad_request_helper, "com/google/firebase/admob/internal/cpp/AdRequestHelper",
46-
ADREQUESTHELPER_METHODS);
45+
request_config_builder,
46+
PROGUARD_KEEP_CLASS
47+
"com/google/android/gms/ads/RequestConfiguration$Builder",
48+
REQUESTCONFIGURATIONBUILDER_METHODS);
4749

4850
AdRequestConverter::AdRequestConverter(AdRequest request) {
49-
JNIEnv* env = ::firebase::admob::GetJNI();
51+
ConvertRequestConfiguration(request);
5052

53+
JNIEnv* env = ::firebase::admob::GetJNI();
5154
jobject builder = env->NewObject(
5255
ad_request_builder::GetClass(),
5356
ad_request_builder::GetMethodId(ad_request_builder::kConstructor));
5457

55-
// Gender.
56-
57-
builder = util::ContinueBuilder(
58-
env, builder,
59-
env->CallObjectMethod(
60-
builder,
61-
ad_request_builder::GetMethodId(ad_request_builder::kSetGender),
62-
static_cast<int>(request.gender)));
63-
64-
// Child-drected treatment.
65-
if (request.tagged_for_child_directed_treatment !=
66-
kChildDirectedTreatmentStateUnknown) {
67-
builder = util::ContinueBuilder(
68-
env, builder,
69-
env->CallObjectMethod(
70-
builder,
71-
ad_request_builder::GetMethodId(
72-
ad_request_builder::kTagForChildDirectedTreatment),
73-
(request.tagged_for_child_directed_treatment ==
74-
kChildDirectedTreatmentStateTagged)));
75-
}
76-
77-
// Test devices.
78-
for (int i = 0; i < request.test_device_id_count; i++) {
79-
jstring test_device_str = env->NewStringUTF(request.test_device_ids[i]);
80-
builder = util::ContinueBuilder(
81-
env, builder,
82-
env->CallObjectMethod(
83-
builder,
84-
ad_request_builder::GetMethodId(ad_request_builder::kAddTestDevice),
85-
test_device_str));
86-
env->DeleteLocalRef(test_device_str);
87-
}
88-
8958
// Keywords.
9059
for (int i = 0; i < request.keyword_count; i++) {
9160
jstring keyword_str = env->NewStringUTF(request.keywords[i]);
@@ -98,34 +67,7 @@ AdRequestConverter::AdRequestConverter(AdRequest request) {
9867
env->DeleteLocalRef(keyword_str);
9968
}
10069

101-
// Birthday.
102-
jobject request_helper = env->NewObject(
103-
ad_request_helper::GetClass(),
104-
ad_request_helper::GetMethodId(ad_request_helper::kConstructor));
105-
106-
jobject date_ref = env->CallObjectMethod(
107-
request_helper,
108-
ad_request_helper::GetMethodId(ad_request_helper::kCreateDate),
109-
static_cast<jint>(request.birthday_year),
110-
static_cast<jint>(request.birthday_month),
111-
static_cast<jint>(request.birthday_day));
112-
113-
env->DeleteLocalRef(request_helper);
114-
115-
if (date_ref != nullptr) {
116-
builder = util::ContinueBuilder(
117-
env, builder,
118-
env->CallObjectMethod(
119-
builder,
120-
ad_request_builder::GetMethodId(ad_request_builder::kSetBirthday),
121-
date_ref));
122-
} else {
123-
LogWarning(
124-
"Skipping invalid AdRequest birthday fields (Y: %d, M: %d, D: %d).",
125-
request.birthday_year, request.birthday_month, request.birthday_day);
126-
}
127-
128-
// Extras.
70+
// Network Extras.
12971
if (request.extras_count > 0) {
13072
jobject extras_bundle =
13173
env->NewObject(util::bundle::GetClass(),
@@ -180,7 +122,6 @@ AdRequestConverter::AdRequestConverter(AdRequest request) {
180122
// Build request and load ad.
181123
jobject java_request_ref = env->CallObjectMethod(
182124
builder, ad_request_builder::GetMethodId(ad_request_builder::kBuild));
183-
184125
env->DeleteLocalRef(builder);
185126

186127
java_request_ = env->NewGlobalRef(java_request_ref);
@@ -194,5 +135,38 @@ AdRequestConverter::~AdRequestConverter() {
194135

195136
jobject AdRequestConverter::GetJavaRequestObject() { return java_request_; }
196137

138+
void AdRequestConverter::ConvertRequestConfiguration(AdRequest request) const {
139+
JNIEnv* env = ::firebase::admob::GetJNI();
140+
jobject builder = env->NewObject(request_config_builder::GetClass(),
141+
request_config_builder::GetMethodId(
142+
request_config_builder::kConstructor));
143+
// Test DeviceIds
144+
if (request.test_device_id_count > 0) {
145+
std::vector<std::string> test_devices_vector;
146+
for (int i = 0; i < request.test_device_id_count; i++) {
147+
test_devices_vector.push_back(request.test_device_ids[i]);
148+
}
149+
jobject test_device_list =
150+
util::StdVectorToJavaList(env, test_devices_vector);
151+
builder = util::ContinueBuilder(
152+
env, builder,
153+
env->CallObjectMethod(builder,
154+
request_config_builder::GetMethodId(
155+
request_config_builder::kSetTestDeviceIds),
156+
test_device_list));
157+
env->DeleteLocalRef(test_device_list);
158+
159+
// Build request configuration.
160+
jobject request_configuration = env->CallObjectMethod(
161+
builder,
162+
request_config_builder::GetMethodId(request_config_builder::kBuild));
163+
env->DeleteLocalRef(builder);
164+
env->CallStaticVoidMethod(
165+
mobile_ads::GetClass(),
166+
mobile_ads::GetMethodId(mobile_ads::kSetRequestConfiguration),
167+
request_configuration);
168+
}
169+
}
170+
197171
} // namespace admob
198-
} // namespace firebase
172+
} // namespace firebase

0 commit comments

Comments
 (0)