Skip to content

Feature/admob 2021 Set|Get RequestConfiguration #665

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Sep 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 87 additions & 16 deletions admob/integration_test/src/integration_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <vector>

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

// Sample test device IDs to use in making the request.
const std::vector<std::string> kTestDeviceIDs = {
"2077ef9a63d2b398840261c8221a0c9b", "098fe087d987c9a878965454a65654d7"};

using app_framework::LogDebug;
using app_framework::ProcessEvents;

Expand Down Expand Up @@ -137,18 +142,28 @@ FirebaseAdMobTest::FirebaseAdMobTest() {}

FirebaseAdMobTest::~FirebaseAdMobTest() {}

void FirebaseAdMobTest::SetUp() { FirebaseTest::SetUp(); }
void FirebaseAdMobTest::SetUp() {
FirebaseTest::SetUp();

// This example uses ad units that are specially configured to return test ads
// for every request. When using your own ad unit IDs, however, it's important
// to register the device IDs associated with any devices that will be used to
// test the app. This ensures that regardless of the ad unit ID, those
// devices will always receive test ads in compliance with AdMob policy.
//
// Device IDs can be obtained by checking the logcat or the Xcode log while
// debugging. They appear as a long string of hex characters.
firebase::admob::RequestConfiguration request_configuration;
request_configuration.test_device_ids = kTestDeviceIDs;
firebase::admob::SetRequestConfiguration(request_configuration);
}

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

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

// Sample test device IDs to use in making the request.
static const char* kTestDeviceIDs[] = {"2077ef9a63d2b398840261c8221a0c9b",
"098fe087d987c9a878965454a65654d7"};

firebase::admob::AdRequest request;

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

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

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

TEST_F(FirebaseAdMobTest, TestRequestConfigurationSetGetEmptyConfig) {
SKIP_TEST_ON_DESKTOP;

firebase::admob::RequestConfiguration set_configuration;
firebase::admob::SetRequestConfiguration(set_configuration);
firebase::admob::RequestConfiguration retrieved_configuration =
firebase::admob::GetRequestConfiguration();

EXPECT_EQ(
retrieved_configuration.max_ad_content_rating,
firebase::admob::RequestConfiguration::kMaxAdContentRatingUnspecified);
EXPECT_EQ(retrieved_configuration.tag_for_child_directed_treatment,
firebase::admob::RequestConfiguration::
kChildDirectedTreatmentUnspecified);
EXPECT_EQ(
retrieved_configuration.tag_for_under_age_of_consent,
firebase::admob::RequestConfiguration::kUnderAgeOfConsentUnspecified);
EXPECT_EQ(retrieved_configuration.test_device_ids.size(), 0);
}

TEST_F(FirebaseAdMobTest, TestRequestConfigurationSetGet) {
SKIP_TEST_ON_DESKTOP;

firebase::admob::RequestConfiguration set_configuration;
set_configuration.max_ad_content_rating =
firebase::admob::RequestConfiguration::kMaxAdContentRatingPG;
set_configuration.tag_for_child_directed_treatment =
firebase::admob::RequestConfiguration::kChildDirectedTreatmentTrue;
set_configuration.tag_for_under_age_of_consent =
firebase::admob::RequestConfiguration::kUnderAgeOfConsentFalse;
set_configuration.test_device_ids.push_back("1");
set_configuration.test_device_ids.push_back("2");
set_configuration.test_device_ids.push_back("3");
firebase::admob::SetRequestConfiguration(set_configuration);

firebase::admob::RequestConfiguration retrieved_configuration =
firebase::admob::GetRequestConfiguration();

EXPECT_EQ(retrieved_configuration.max_ad_content_rating,
firebase::admob::RequestConfiguration::kMaxAdContentRatingPG);

#if defined(__ANDROID__)
EXPECT_EQ(retrieved_configuration.tag_for_child_directed_treatment,
firebase::admob::RequestConfiguration::kChildDirectedTreatmentTrue);
EXPECT_EQ(retrieved_configuration.tag_for_under_age_of_consent,
firebase::admob::RequestConfiguration::kUnderAgeOfConsentFalse);
#else // iOS
// iOS doesn't allow for the querying of these values.
EXPECT_EQ(retrieved_configuration.tag_for_child_directed_treatment,
firebase::admob::RequestConfiguration::
kChildDirectedTreatmentUnspecified);
EXPECT_EQ(
retrieved_configuration.tag_for_under_age_of_consent,
firebase::admob::RequestConfiguration::kUnderAgeOfConsentUnspecified);
#endif

EXPECT_EQ(retrieved_configuration.test_device_ids.size(), 3);
EXPECT_TRUE(std::count(retrieved_configuration.test_device_ids.begin(),
retrieved_configuration.test_device_ids.end(), "1"));
EXPECT_TRUE(std::count(retrieved_configuration.test_device_ids.begin(),
retrieved_configuration.test_device_ids.end(), "2"));
EXPECT_TRUE(std::count(retrieved_configuration.test_device_ids.begin(),
retrieved_configuration.test_device_ids.end(), "3"));
}

TEST_F(FirebaseAdMobTest, TestBannerView) {
// AdMob cannot be tested on Firebase Test Lab, so disable tests on FTL.
TEST_REQUIRES_USER_INTERACTION;
SKIP_TEST_ON_DESKTOP;

static const int kBannerWidth = 320;
static const int kBannerHeight = 50;
Expand Down Expand Up @@ -409,6 +479,7 @@ class TestInterstitialAdListener

TEST_F(FirebaseAdMobTest, TestInterstitialAd) {
TEST_REQUIRES_USER_INTERACTION;
SKIP_TEST_ON_DESKTOP;

firebase::admob::InterstitialAd* interstitial =
new firebase::admob::InterstitialAd();
Expand Down
42 changes: 0 additions & 42 deletions admob/src/android/ad_request_converter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,7 @@ METHOD_LOOKUP_DEFINITION(ad_request_builder,
"com/google/android/gms/ads/AdRequest$Builder",
ADREQUESTBUILDER_METHODS);

METHOD_LOOKUP_DEFINITION(
request_config_builder,
PROGUARD_KEEP_CLASS
"com/google/android/gms/ads/RequestConfiguration$Builder",
REQUESTCONFIGURATIONBUILDER_METHODS);

AdRequestConverter::AdRequestConverter(AdRequest request) {
ConvertRequestConfiguration(request);

JNIEnv* env = ::firebase::admob::GetJNI();
jobject builder = env->NewObject(
ad_request_builder::GetClass(),
Expand Down Expand Up @@ -137,39 +129,5 @@ AdRequestConverter::~AdRequestConverter() {

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

void AdRequestConverter::ConvertRequestConfiguration(AdRequest request) const {
if (request.test_device_id_count > 0) {
JNIEnv* env = ::firebase::admob::GetJNI();
jobject builder = env->NewObject(request_config_builder::GetClass(),
request_config_builder::GetMethodId(
request_config_builder::kConstructor));

std::vector<std::string> test_devices_vector;
for (int i = 0; i < request.test_device_id_count; i++) {
test_devices_vector.push_back(request.test_device_ids[i]);
}
jobject test_device_list =
util::StdVectorToJavaList(env, test_devices_vector);
builder = util::ContinueBuilder(
env, builder,
env->CallObjectMethod(builder,
request_config_builder::GetMethodId(
request_config_builder::kSetTestDeviceIds),
test_device_list));
env->DeleteLocalRef(test_device_list);

// Build request configuration.
jobject request_configuration = env->CallObjectMethod(
builder,
request_config_builder::GetMethodId(request_config_builder::kBuild));
env->DeleteLocalRef(builder);
env->CallStaticVoidMethod(
mobile_ads::GetClass(),
mobile_ads::GetMethodId(mobile_ads::kSetRequestConfiguration),
request_configuration);
env->DeleteLocalRef(request_configuration);
}
}

} // namespace admob
} // namespace firebase
1 change: 0 additions & 1 deletion admob/src/android/ad_request_converter.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ class AdRequestConverter {
jobject GetJavaRequestObject();

private:
void ConvertRequestConfiguration(AdRequest request) const;
jobject java_request_;
};

Expand Down
Loading