Admob Placement using Flutter youtube player

44 Views Asked by At

I have a screen with a list youtube links. When i click one of them i am being taken to the youtube player screen when i want to go back, i have placed onWillPop to display an admob interstetial Ad when user is navigating back. Does this violate youtube policies? Or its okay to Place an ad before or after a youtube video screen? This is my implemention.

            import 'package:flutter/material.dart'; 
            import 'package:flutter/services.dart';
            import 'package:google_mobile_ads/google_mobile_ads.dart';
            import 'package:youtube_player_iframe/youtube_player_iframe.dart';

             class YoutubePlayerScreen extends StatefulWidget {
             final String youtubeUrl;
             final String name;
             final String id;

             const YoutubePlayerScreen(
              {required this.youtubeUrl, required this.name, required this.id});

                 @override
              _YoutubePlayerScreenState createState() => _YoutubePlayerScreenState();
                   }

            class _YoutubePlayerScreenState extends State<YoutubePlayerScreen> {
            late YoutubePlayerController _controller;
            InterstitialAd? _interstitialAd;
            int _interstitialLoadAttempts = 0;
            bool _isFullScreen = false; // Track full-screen state

            void _initAd() {
             InterstitialAd.load(
             adUnitId: 'ca-app-pub-xxxxxxxxxx/xxxxxxxxx',
             request: const AdRequest(),
             adLoadCallback: InterstitialAdLoadCallback(
            // ad loaded
            onAdLoaded: (InterstitialAd ad) {
             _interstitialAd = ad;
             _interstitialLoadAttempts = 0;
                },
           // ad failed to load
            onAdFailedToLoad: (e) {
              _interstitialLoadAttempts += 1;
              _interstitialAd = null;
             if (_interstitialLoadAttempts >= 3) {
              _initAd();
               }
              },
              ),
              );
             }

             @override
           void dispose() {
           if (!_isFullScreen) {
          showInterstitialAd();
                      }
              _interstitialAd?.dispose();
             SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
              overlays: SystemUiOverlay.values);
               super.dispose();
               }

              void showInterstitialAd() {
              if (_interstitialAd != null && !_isFullScreen) {
                // Show ad only if not in full-screen mode
                _interstitialAd!.fullScreenContentCallback = FullScreenContentCallback(
                      onAdDismissedFullScreenContent: (InterstitialAd ad) {
                      ad.dispose();
                    _initAd();
                     },
                 onAdFailedToShowFullScreenContent: (ad, e) {
                 ad.dispose();
              _initAd();
                 },
              );
                 _interstitialAd!.show();
                 }
               }

             Future<bool> _onWillPop() async {
                 if (_isFullScreen) {
                  _isFullScreen = false;
                    return true; // Allow pop when in full-screen mode
                   } else {
                    showInterstitialAd();
                   return true; // Allow pop when not in full-screen mode
                  }
                  }

             @override
              void initState() {
              super.initState();
               _initAd();
                 _controller = YoutubePlayerController(
                 initialVideoId: widget.id,
                  params: YoutubePlayerParams(
                  showControls: false,
                 mute: false,
                 showFullscreenButton: true,
                 autoPlay: true,
                 loop: false,
                 annotations: false, // Hide video annotations
                 ),
               );
                 }

        @override
        Widget build(BuildContext context) {
        return WillPopScope(
          onWillPop: _onWillPop,
          child: YoutubePlayerIFrame(
          controller: _controller,
          aspectRatio: 16 / 9,
               ),
              );
               }
            }
0

There are 0 best solutions below