Skip to content

Commit 80f50ff

Browse files
authored
Feature/admob 2021 Set|Get RequestConfiguration (#665)
* 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 * ios set configuration impl * Integration test on iOS * desktop integration test passes * Android implementation and tests pass * lint fixes * lint fixes * lint fixes * copy paste error * desktop test fix * updated NSArrayOfNSStringToVectorOfString name * removed test device ids from request converter. Missed on merge
1 parent e365f4f commit 80f50ff

File tree

14 files changed

+617
-97
lines changed

14 files changed

+617
-97
lines changed

admob/integration_test/src/integration_test.cc

Lines changed: 87 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <cstdlib>
2020
#include <cstring>
2121
#include <ctime>
22+
#include <vector>
2223

2324
#include "app_framework.h" // NOLINT
2425
#include "firebase/admob.h"
@@ -67,6 +68,10 @@ const char* kBannerAdUnit = "ca-app-pub-3940256099942544/2934735716";
6768
const char* kInterstitialAdUnit = "ca-app-pub-3940256099942544/4411468910";
6869
#endif
6970

71+
// Sample test device IDs to use in making the request.
72+
const std::vector<std::string> kTestDeviceIDs = {
73+
"2077ef9a63d2b398840261c8221a0c9b", "098fe087d987c9a878965454a65654d7"};
74+
7075
using app_framework::LogDebug;
7176
using app_framework::ProcessEvents;
7277

@@ -137,18 +142,28 @@ FirebaseAdMobTest::FirebaseAdMobTest() {}
137142

138143
FirebaseAdMobTest::~FirebaseAdMobTest() {}
139144

140-
void FirebaseAdMobTest::SetUp() { FirebaseTest::SetUp(); }
145+
void FirebaseAdMobTest::SetUp() {
146+
FirebaseTest::SetUp();
147+
148+
// This example uses ad units that are specially configured to return test ads
149+
// for every request. When using your own ad unit IDs, however, it's important
150+
// to register the device IDs associated with any devices that will be used to
151+
// test the app. This ensures that regardless of the ad unit ID, those
152+
// devices will always receive test ads in compliance with AdMob policy.
153+
//
154+
// Device IDs can be obtained by checking the logcat or the Xcode log while
155+
// debugging. They appear as a long string of hex characters.
156+
firebase::admob::RequestConfiguration request_configuration;
157+
request_configuration.test_device_ids = kTestDeviceIDs;
158+
firebase::admob::SetRequestConfiguration(request_configuration);
159+
}
141160

142161
void FirebaseAdMobTest::TearDown() { FirebaseTest::TearDown(); }
143162

144163
firebase::admob::AdRequest FirebaseAdMobTest::GetAdRequest() {
145164
// Sample keywords to use in making the request.
146165
static const char* kKeywords[] = {"AdMob", "C++", "Fun"};
147166

148-
// Sample test device IDs to use in making the request.
149-
static const char* kTestDeviceIDs[] = {"2077ef9a63d2b398840261c8221a0c9b",
150-
"098fe087d987c9a878965454a65654d7"};
151-
152167
firebase::admob::AdRequest request;
153168

154169
// Additional keywords to be used in targeting.
@@ -162,17 +177,6 @@ firebase::admob::AdRequest FirebaseAdMobTest::GetAdRequest() {
162177
request.extras_count = sizeof(kRequestExtras) / sizeof(kRequestExtras[0]);
163178
request.extras = kRequestExtras;
164179

165-
// This example uses ad units that are specially configured to return test ads
166-
// for every request. When using your own ad unit IDs, however, it's important
167-
// to register the device IDs associated with any devices that will be used to
168-
// test the app. This ensures that regardless of the ad unit ID, those
169-
// devices will always receive test ads in compliance with AdMob policy.
170-
//
171-
// Device IDs can be obtained by checking the logcat or the Xcode log while
172-
// debugging. They appear as a long string of hex characters.
173-
request.test_device_id_count =
174-
sizeof(kTestDeviceIDs) / sizeof(kTestDeviceIDs[0]);
175-
request.test_device_ids = kTestDeviceIDs;
176180
return request;
177181
}
178182

@@ -196,9 +200,75 @@ class TestBannerViewListener : public firebase::admob::BannerView::Listener {
196200
std::vector<firebase::admob::BoundingBox> bounding_box_changes_;
197201
};
198202

203+
TEST_F(FirebaseAdMobTest, TestRequestConfigurationSetGetEmptyConfig) {
204+
SKIP_TEST_ON_DESKTOP;
205+
206+
firebase::admob::RequestConfiguration set_configuration;
207+
firebase::admob::SetRequestConfiguration(set_configuration);
208+
firebase::admob::RequestConfiguration retrieved_configuration =
209+
firebase::admob::GetRequestConfiguration();
210+
211+
EXPECT_EQ(
212+
retrieved_configuration.max_ad_content_rating,
213+
firebase::admob::RequestConfiguration::kMaxAdContentRatingUnspecified);
214+
EXPECT_EQ(retrieved_configuration.tag_for_child_directed_treatment,
215+
firebase::admob::RequestConfiguration::
216+
kChildDirectedTreatmentUnspecified);
217+
EXPECT_EQ(
218+
retrieved_configuration.tag_for_under_age_of_consent,
219+
firebase::admob::RequestConfiguration::kUnderAgeOfConsentUnspecified);
220+
EXPECT_EQ(retrieved_configuration.test_device_ids.size(), 0);
221+
}
222+
223+
TEST_F(FirebaseAdMobTest, TestRequestConfigurationSetGet) {
224+
SKIP_TEST_ON_DESKTOP;
225+
226+
firebase::admob::RequestConfiguration set_configuration;
227+
set_configuration.max_ad_content_rating =
228+
firebase::admob::RequestConfiguration::kMaxAdContentRatingPG;
229+
set_configuration.tag_for_child_directed_treatment =
230+
firebase::admob::RequestConfiguration::kChildDirectedTreatmentTrue;
231+
set_configuration.tag_for_under_age_of_consent =
232+
firebase::admob::RequestConfiguration::kUnderAgeOfConsentFalse;
233+
set_configuration.test_device_ids.push_back("1");
234+
set_configuration.test_device_ids.push_back("2");
235+
set_configuration.test_device_ids.push_back("3");
236+
firebase::admob::SetRequestConfiguration(set_configuration);
237+
238+
firebase::admob::RequestConfiguration retrieved_configuration =
239+
firebase::admob::GetRequestConfiguration();
240+
241+
EXPECT_EQ(retrieved_configuration.max_ad_content_rating,
242+
firebase::admob::RequestConfiguration::kMaxAdContentRatingPG);
243+
244+
#if defined(__ANDROID__)
245+
EXPECT_EQ(retrieved_configuration.tag_for_child_directed_treatment,
246+
firebase::admob::RequestConfiguration::kChildDirectedTreatmentTrue);
247+
EXPECT_EQ(retrieved_configuration.tag_for_under_age_of_consent,
248+
firebase::admob::RequestConfiguration::kUnderAgeOfConsentFalse);
249+
#else // iOS
250+
// iOS doesn't allow for the querying of these values.
251+
EXPECT_EQ(retrieved_configuration.tag_for_child_directed_treatment,
252+
firebase::admob::RequestConfiguration::
253+
kChildDirectedTreatmentUnspecified);
254+
EXPECT_EQ(
255+
retrieved_configuration.tag_for_under_age_of_consent,
256+
firebase::admob::RequestConfiguration::kUnderAgeOfConsentUnspecified);
257+
#endif
258+
259+
EXPECT_EQ(retrieved_configuration.test_device_ids.size(), 3);
260+
EXPECT_TRUE(std::count(retrieved_configuration.test_device_ids.begin(),
261+
retrieved_configuration.test_device_ids.end(), "1"));
262+
EXPECT_TRUE(std::count(retrieved_configuration.test_device_ids.begin(),
263+
retrieved_configuration.test_device_ids.end(), "2"));
264+
EXPECT_TRUE(std::count(retrieved_configuration.test_device_ids.begin(),
265+
retrieved_configuration.test_device_ids.end(), "3"));
266+
}
267+
199268
TEST_F(FirebaseAdMobTest, TestBannerView) {
200269
// AdMob cannot be tested on Firebase Test Lab, so disable tests on FTL.
201270
TEST_REQUIRES_USER_INTERACTION;
271+
SKIP_TEST_ON_DESKTOP;
202272

203273
static const int kBannerWidth = 320;
204274
static const int kBannerHeight = 50;
@@ -409,6 +479,7 @@ class TestInterstitialAdListener
409479

410480
TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
411481
TEST_REQUIRES_USER_INTERACTION;
482+
SKIP_TEST_ON_DESKTOP;
412483

413484
firebase::admob::InterstitialAd* interstitial =
414485
new firebase::admob::InterstitialAd();

admob/src/android/ad_request_converter.cc

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,7 @@ METHOD_LOOKUP_DEFINITION(ad_request_builder,
4343
"com/google/android/gms/ads/AdRequest$Builder",
4444
ADREQUESTBUILDER_METHODS);
4545

46-
METHOD_LOOKUP_DEFINITION(
47-
request_config_builder,
48-
PROGUARD_KEEP_CLASS
49-
"com/google/android/gms/ads/RequestConfiguration$Builder",
50-
REQUESTCONFIGURATIONBUILDER_METHODS);
51-
5246
AdRequestConverter::AdRequestConverter(AdRequest request) {
53-
ConvertRequestConfiguration(request);
54-
5547
JNIEnv* env = ::firebase::admob::GetJNI();
5648
jobject builder = env->NewObject(
5749
ad_request_builder::GetClass(),
@@ -137,39 +129,5 @@ AdRequestConverter::~AdRequestConverter() {
137129

138130
jobject AdRequestConverter::GetJavaRequestObject() { return java_request_; }
139131

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

admob/src/android/ad_request_converter.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ class AdRequestConverter {
4343
jobject GetJavaRequestObject();
4444

4545
private:
46-
void ConvertRequestConfiguration(AdRequest request) const;
4746
jobject java_request_;
4847
};
4948

0 commit comments

Comments
 (0)