15
15
#include " firebase/admob.h"
16
16
#include " firebase/admob/banner_view.h"
17
17
#include " firebase/admob/interstitial_ad.h"
18
+ #include " firebase/admob/rewarded_video.h"
18
19
#include " firebase/admob/types.h"
19
20
#include " firebase/app.h"
20
21
#include " firebase/future.h"
@@ -28,15 +29,15 @@ class LoggingBannerViewListener : public firebase::admob::BannerView::Listener {
28
29
LoggingBannerViewListener () {}
29
30
void OnPresentationStateChanged (
30
31
firebase::admob::BannerView* banner_view,
31
- firebase::admob::BannerView::PresentationState new_state ) override {
32
- ::LogMessage (" BannerView PresentationState has changed to %d." , new_state );
32
+ firebase::admob::BannerView::PresentationState state ) override {
33
+ ::LogMessage (" BannerView PresentationState has changed to %d." , state );
33
34
}
34
35
void OnBoundingBoxChanged (firebase::admob::BannerView* banner_view,
35
- firebase::admob::BoundingBox new_box ) override {
36
+ firebase::admob::BoundingBox box ) override {
36
37
::LogMessage (
37
38
" BannerView BoundingBox has changed to (x: %d, y: %d, width: %d, "
38
39
" height %d)." ,
39
- new_box .x, new_box .y, new_box .width, new_box .height);
40
+ box .x, box .y, box .width, box .height);
40
41
}
41
42
};
42
43
@@ -47,19 +48,42 @@ class LoggingInterstitialAdListener
47
48
LoggingInterstitialAdListener () {}
48
49
void OnPresentationStateChanged (
49
50
firebase::admob::InterstitialAd* interstitial_ad,
50
- firebase::admob::InterstitialAd::PresentationState new_state) override {
51
- ::LogMessage (" InterstitialAd PresentationState has changed to %d." ,
52
- new_state);
51
+ firebase::admob::InterstitialAd::PresentationState state) override {
52
+ ::LogMessage (" InterstitialAd PresentationState has changed to %d." , state);
53
53
}
54
54
};
55
55
56
+ // A simple listener that logs changes to rewarded video state.
57
+ class LoggingRewardedVideoListener
58
+ : public firebase::admob::rewarded_video::Listener {
59
+ public:
60
+ LoggingRewardedVideoListener () {}
61
+ void OnRewarded (firebase::admob::rewarded_video::RewardItem reward) override {
62
+ ::LogMessage (" Rewarding user with %f %s." , reward.amount,
63
+ reward.reward_type.c_str());
64
+ }
65
+ void OnPresentationStateChanged (
66
+ firebase::admob::rewarded_video::PresentationState state) override {
67
+ ::LogMessage (" Rewarded video PresentationState has changed to %d." , state);
68
+ }
69
+ };
70
+
71
+ // The AdMob app IDs for the test app.
72
+ #if defined(__ANDROID__)
73
+ const char * kAdMobAppID = " ca-app-pub-3940256099942544~3347511713" ;
74
+ #else
75
+ const char * kAdMobAppID = " ca-app-pub-3940256099942544~1458002511" ;
76
+ #endif
77
+
56
78
// These ad units are configured to always serve test ads.
57
79
#if defined(__ANDROID__)
58
80
const char * kBannerAdUnit = " ca-app-pub-3940256099942544/6300978111" ;
59
81
const char * kInterstitialAdUnit = " ca-app-pub-3940256099942544/1033173712" ;
82
+ const char * kRewardedVideoAdUnit = " YOUR_REWARDED_VIDEO_AD_UNIT_ID" ;
60
83
#else
61
84
const char * kBannerAdUnit = " ca-app-pub-3940256099942544/2934735716" ;
62
85
const char * kInterstitialAdUnit = " ca-app-pub-3940256099942544/4411468910" ;
86
+ const char * kRewardedVideoAdUnit = " YOUR_REWARDED_VIDEO_AD_UNIT_ID" ;
63
87
#endif
64
88
65
89
// Standard mobile banner size is 320x50.
@@ -86,7 +110,7 @@ static void WaitForFutureCompletion(firebase::FutureBase future) {
86
110
}
87
111
88
112
if (future.Error () != firebase::admob::kAdMobErrorNone ) {
89
- LogMessage (" Action failed with error code %d and message \" %s\" ." ,
113
+ LogMessage (" ERROR: Action failed with error code %d and message \" %s\" ." ,
90
114
future.Error (), future.ErrorMessage ());
91
115
}
92
116
}
@@ -107,7 +131,7 @@ extern "C" int common_main(int argc, const char* argv[]) {
107
131
static_cast <int >(reinterpret_cast <intptr_t >(app)));
108
132
109
133
LogMessage (" Initializing the AdMob with Firebase API." );
110
- firebase::admob::Initialize (*app);
134
+ firebase::admob::Initialize (*app, kAdMobAppID );
111
135
112
136
firebase::admob::AdRequest request;
113
137
// If the app is aware of the user's gender, it can be added to the targeting
@@ -156,13 +180,15 @@ extern "C" int common_main(int argc, const char* argv[]) {
156
180
ad_size.height = kBannerHeight ;
157
181
158
182
LogMessage (" Creating the BannerView." );
159
- LoggingBannerViewListener banner_listener;
160
183
firebase::admob::BannerView* banner = new firebase::admob::BannerView ();
161
- banner->SetListener (&banner_listener);
162
184
banner->Initialize (GetWindowContext (), kBannerAdUnit , ad_size);
163
185
164
186
WaitForFutureCompletion (banner->InitializeLastResult ());
165
187
188
+ // Set the listener.
189
+ LoggingBannerViewListener banner_listener;
190
+ banner->SetListener (&banner_listener);
191
+
166
192
// Make the BannerView visible.
167
193
LogMessage (" Showing the banner ad." );
168
194
banner->Show ();
@@ -246,14 +272,16 @@ extern "C" int common_main(int argc, const char* argv[]) {
246
272
247
273
// Create and test InterstitialAd.
248
274
LogMessage (" Creating the InterstitialAd." );
249
- LoggingInterstitialAdListener interstitial_listener;
250
275
firebase::admob::InterstitialAd* interstitial =
251
276
new firebase::admob::InterstitialAd ();
252
- interstitial->SetListener (&interstitial_listener);
253
277
interstitial->Initialize (GetWindowContext (), kInterstitialAdUnit );
254
278
255
279
WaitForFutureCompletion (interstitial->InitializeLastResult ());
256
280
281
+ // Set the listener.
282
+ LoggingInterstitialAdListener interstitial_listener;
283
+ interstitial->SetListener (&interstitial_listener);
284
+
257
285
// When the InterstitialAd is initialized, load an ad.
258
286
LogMessage (" Loading an interstitial ad." );
259
287
interstitial->LoadAd (request);
@@ -273,6 +301,52 @@ extern "C" int common_main(int argc, const char* argv[]) {
273
301
ProcessEvents (1000 );
274
302
}
275
303
304
+ // Start up rewarded video ads and associated mediation adapters.
305
+ LogMessage (" Initializing rewarded video." );
306
+ namespace rewarded_video = firebase::admob::rewarded_video;
307
+ rewarded_video::Initialize ();
308
+
309
+ WaitForFutureCompletion (rewarded_video::InitializeLastResult ());
310
+
311
+ LogMessage (" Setting rewarded video listener." );
312
+ LoggingRewardedVideoListener rewarded_listener;
313
+ rewarded_video::SetListener (&rewarded_listener);
314
+
315
+ LogMessage (" Loading a rewarded video ad." );
316
+ rewarded_video::LoadAd (kRewardedVideoAdUnit , request);
317
+
318
+ WaitForFutureCompletion (rewarded_video::LoadAdLastResult ());
319
+
320
+ // If an ad has loaded, show it. If the user watches all the way through, the
321
+ // LoggingRewardedVideoListener will log a reward!
322
+ if (rewarded_video::LoadAdLastResult ().Error () ==
323
+ firebase::admob::kAdMobErrorNone ) {
324
+ LogMessage (" Showing a rewarded video ad." );
325
+ rewarded_video::Show (GetWindowContext ());
326
+
327
+ WaitForFutureCompletion (rewarded_video::ShowLastResult ());
328
+
329
+ // Normally Pause and Resume would be called in response to the app pausing
330
+ // or losing focus. This is just a test.
331
+ LogMessage (" Pausing." );
332
+ rewarded_video::Pause ();
333
+
334
+ WaitForFutureCompletion (rewarded_video::PauseLastResult ());
335
+
336
+ LogMessage (" Resuming." );
337
+ rewarded_video::Resume ();
338
+
339
+ WaitForFutureCompletion (rewarded_video::ResumeLastResult ());
340
+ } else {
341
+ // Rewarded Video returned an error. This might be because the
342
+ // developer did not put their Rewarded Video ad unit into
343
+ // kRewardedVideoAdUnit above.
344
+ LogMessage (" WARNING: Is your Rewarded Video ad unit ID correct?" );
345
+ LogMessage (
346
+ " Ensure kRewardedVideoAdUnit is set to your own Rewarded Video ad unit "
347
+ " ID in src/common_main.cc." );
348
+ }
349
+
276
350
LogMessage (" Done!" );
277
351
278
352
// Wait until the user kills the app.
@@ -281,6 +355,7 @@ extern "C" int common_main(int argc, const char* argv[]) {
281
355
282
356
delete banner;
283
357
delete interstitial;
358
+ rewarded_video::Destroy ();
284
359
firebase::admob::Terminate ();
285
360
delete app;
286
361
0 commit comments