CINXE.COM

Adding AdMob ads to a Flutter app  |  Google Codelabs

<!doctype html> <html lang="en" dir="ltr"> <head> <meta name="google-signin-client-id" content="721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com"> <meta name="google-signin-scope" content="profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award"> <meta property="og:site_name" content="Google Codelabs"> <meta property="og:type" content="website"><meta name="theme-color" content="#1a73e8"><meta charset="utf-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="manifest" href="/_pwa/codelabs/manifest.json" crossorigin="use-credentials"> <link rel="preconnect" href="//www.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.gstatic.com" crossorigin> <link rel="preconnect" href="//fonts.googleapis.com" crossorigin> <link rel="preconnect" href="//apis.google.com" crossorigin> <link rel="preconnect" href="//www.google-analytics.com" crossorigin><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"> <link rel="stylesheet" href="//fonts.googleapis.com/css2?family=Material+Icons&family=Material+Symbols+Outlined&display=block"><link rel="stylesheet" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/css/app.css"> <link rel="shortcut icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/images/favicon.png"> <link rel="apple-touch-icon" href="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/images/touchicon-180.png"><link rel="canonical" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter"><link rel="search" type="application/opensearchdescription+xml" title="Google Codelabs" href="https://codelabs.developers.google.com/s/opensearch.xml"> <link rel="alternate" hreflang="en" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter" /><link rel="alternate" hreflang="x-default" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter" /><link rel="alternate" hreflang="ar" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=ar" /><link rel="alternate" hreflang="bn" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=bn" /><link rel="alternate" hreflang="zh-Hans" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=zh-cn" /><link rel="alternate" hreflang="zh-Hant" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=zh-tw" /><link rel="alternate" hreflang="fa" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=fa" /><link rel="alternate" hreflang="fr" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=fr" /><link rel="alternate" hreflang="de" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=de" /><link rel="alternate" hreflang="he" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=he" /><link rel="alternate" hreflang="hi" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=hi" /><link rel="alternate" hreflang="id" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=id" /><link rel="alternate" hreflang="it" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=it" /><link rel="alternate" hreflang="ja" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=ja" /><link rel="alternate" hreflang="ko" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=ko" /><link rel="alternate" hreflang="pl" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=pl" /><link rel="alternate" hreflang="pt-BR" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=pt-br" /><link rel="alternate" hreflang="ru" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=ru" /><link rel="alternate" hreflang="es-419" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=es-419" /><link rel="alternate" hreflang="th" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=th" /><link rel="alternate" hreflang="tr" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=tr" /><link rel="alternate" hreflang="vi" href="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter?hl=vi" /><title>Adding AdMob ads to a Flutter app &nbsp;|&nbsp; Google Codelabs</title> <meta property="og:title" content="Adding AdMob ads to a Flutter app &nbsp;|&nbsp; Google Codelabs"><meta name="description" content="In this codelab, you learn how to add a banner, interstitial and rewarded ads to a Flutter app."> <meta property="og:description" content="In this codelab, you learn how to add a banner, interstitial and rewarded ads to a Flutter app."><meta property="og:url" content="https://codelabs.developers.google.com/codelabs/admob-ads-in-flutter"><meta property="og:locale" content="en"> <link rel="stylesheet" href="/extras.css"></head> <body class="" template="codelab" theme="codelabs-theme" type="codelab" layout="docs" display-toc pending> <devsite-progress type="indeterminate" id="app-progress"></devsite-progress> <a href="#main-content" class="skip-link button"> Skip to main content </a> <section class="devsite-wrapper"> <devsite-cookie-notification-bar></devsite-cookie-notification-bar><devsite-header role="banner"> <div class="devsite-header--inner nocontent"> <div class="devsite-top-logo-row-wrapper-wrapper"> <div class="devsite-top-logo-row-wrapper"> <div class="devsite-top-logo-row"> <button type="button" id="devsite-hamburger-menu" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Navigation menu button" visually-hidden aria-label="Open menu"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="googleCodelabs" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/images/lockup.svg" class="devsite-site-logo" alt="Google Codelabs"> </picture> </a> </div> <div class="devsite-top-logo-row-middle"> <div class="devsite-header-upper-tabs"> </div> <devsite-search enable-signin enable-search enable-suggestions enable-query-completion tenant-name="Google Codelabs" > <form class="devsite-search-form" action="https://codelabs.developers.google.com/s/results" method="GET"> <div class="devsite-search-container"> <button type="button" search-open class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Open search"></button> <div class="devsite-searchbox"> <input aria-activedescendant="" aria-autocomplete="list" aria-label="Search" aria-expanded="false" aria-haspopup="listbox" autocomplete="off" class="devsite-search-field devsite-search-query" name="q" placeholder="Search" role="combobox" type="text" value="" > <div class="devsite-search-image material-icons" aria-hidden="true"> </div> <div class="devsite-search-shortcut-icon-container" aria-hidden="true"> <kbd class="devsite-search-shortcut-icon">/</kbd> </div> </div> </div> </form> <button type="button" search-close class="devsite-search-button devsite-header-icon-button button-flat material-icons" aria-label="Close search"></button> </devsite-search> </div> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> <devsite-user enable-profiles fp-auth id="devsite-user"> <span class="button devsite-top-button" aria-hidden="true" visually-hidden>Sign in</span> </devsite-user> </div> </div> </div> </div> </devsite-header> <devsite-book-nav scrollbars hidden> <div class="devsite-book-nav-filter" hidden> <span class="filter-list-icon material-icons" aria-hidden="true"></span> <input type="text" placeholder="Filter" aria-label="Type to filter" role="searchbox"> <span class="filter-clear-button hidden" data-title="Clear filter" aria-label="Clear filter" role="button" tabindex="0"></span> </div> <nav class="devsite-book-nav devsite-nav nocontent" aria-label="Side menu"> <div class="devsite-mobile-header"> <button type="button" id="devsite-close-nav" class="devsite-header-icon-button button-flat material-icons gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Close navigation" aria-label="Close navigation"> </button> <div class="devsite-product-name-wrapper"> <a href="/" class="devsite-site-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Site logo" track-type="globalNav" track-name="googleCodelabs" track-metadata-position="nav" track-metadata-eventDetail="nav"> <picture> <img src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/images/lockup.svg" class="devsite-site-logo" alt="Google Codelabs"> </picture> </a> </div> </div> <div class="devsite-book-nav-wrapper"> <div class="devsite-mobile-nav-top"> <ul class="devsite-nav-list"> </ul> </div> </div> </nav> </devsite-book-nav> <section id="gc-wrapper"> <main role="main" id="main-content" class="devsite-main-content" has-sidebar > <div class="devsite-sidebar"> <div class="devsite-sidebar-content"> <devsite-toc class="devsite-nav" role="navigation" aria-label="On this page" depth="1" scrollbars ></devsite-toc> <devsite-recommendations-sidebar class="nocontent devsite-nav"> </devsite-recommendations-sidebar> </div> </div> <devsite-content> <article class="devsite-article"><style> body { transition: opacity ease-in 0.2s; } body[unresolved] { opacity: 0; display: block; overflow: hidden; position: relative; } </style> <div class="devsite-article-meta nocontent" role="navigation"> <ul class="devsite-breadcrumb-list" > </ul> </div> <h1 class="devsite-page-title" tabindex="-1"> Adding AdMob ads to a Flutter app </h1> <devsite-toc class="devsite-nav" depth="1" devsite-toc-embedded > </devsite-toc> <div class="devsite-article-body clearfix "> <google-codelab-analytics gaid="UA-49880327-14" ga4id="G-JTFZSJVVVZ"></google-codelab-analytics> <google-codelab codelab-gaid="" codelab-ga4id="" doc-id="1HfsG7fX79kzl4Scww5TDJ3ZI5BglEhvlinGxjTx6SrI" id="admob-ads-in-flutter" title="Adding AdMob ads to a Flutter app" no-tooltip="" environment="web" category="flutter,ads" feedback-link="https://github.com/googlecodelabs/admob-ads-in-flutter/issues" layout="paginated" > <google-codelab-step label="Introduction" duration="0" step="0"> <google-codelab-about codelab-title="Adding AdMob ads to a Flutter app" authors="Taeho Kim" last-updated="2022-08-27T15:08:12Z" duration="40"> </google-codelab-about> <h2 class="step-title" id="0" data-text="Introduction" tabindex="-1"> 1. Introduction </h2> <h2 is-upgraded id="what-youll-build" data-text="What you'll build" tabindex="-1"><strong>What you'll build</strong></h2> <p>This codelab guides you through adding a banner, interstitial, and a rewarded ad to an app called <strong>Awesome Drawing Quiz</strong>, a game that lets players guess the name of the drawing.</p> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/1117efa4ef270d2b_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/8ca4005fffef3_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td></tr> </table> <p>If you run into any issues (code bugs, grammatical errors, unclear wording) as you work through this codelab, please report the issue by clicking the <strong>Report a mistake</strong> link in the lower, left corner of the codelab.</p> <aside class="special"><p><strong>Tip:</strong> To learn how to implement a banner and native inline ads, check out the <a href="https://codelabs.developers.google.com/codelabs/admob-inline-ads-in-flutter" target="_blank">Adding an AdMob banner and native inline ads to a Flutter app</a> codelab.</p> </aside> <h2 class="checklist" is-upgraded id="what-youll-learn" data-text="What you'll learn" tabindex="-1"><strong>What you'll learn</strong></h2> <ul class="checklist"> <li>How to configure the Google Mobile Ads AdMob plugin</li> <li>How to implement a banner, interstitial and rewarded ads in a Flutter app</li> </ul> <h2 is-upgraded id="what-youll-need" data-text="What you'll need" tabindex="-1"><strong>What you'll need</strong></h2> <ul> <li>Android Studio 4.1 or later</li> <li>Xcode 12 or later (for iOS development)</li> </ul> <google-codelab-survey survey-id="admob-ads-in-flutter-1"> <h4 id="how-would-you-rate-your-level-of-experience-with-admob" data-text="How would you rate your level of experience with AdMob?" tabindex="-1">How would you rate your level of experience with AdMob?</h4> <paper-radio-group> <paper-radio-button>Novice</paper-radio-button> <paper-radio-button>Intermediate</paper-radio-button> <paper-radio-button>Proficient</paper-radio-button> </paper-radio-group> </google-codelab-survey> <google-codelab-survey survey-id="admob-ads-in-flutter-2"> <h4 id="how-would-you-rate-your-level-of-experience-with-flutter" data-text="How would you rate your level of experience with Flutter?" tabindex="-1">How would you rate your level of experience with Flutter?</h4> <paper-radio-group> <paper-radio-button>Novice</paper-radio-button> <paper-radio-button>Intermediate</paper-radio-button> <paper-radio-button>Proficient</paper-radio-button> </paper-radio-group> </google-codelab-survey> </google-codelab-step> <google-codelab-step label="Set up your Flutter development environment" duration="10" step="1"> <h2 class="step-title" id="1" data-text="Set up your Flutter development environment" tabindex="-1"> 2. Set up your Flutter development environment </h2> <p>You need two pieces of software to complete this lab—the <a href="https://docs.flutter.dev/get-started/install" target="_blank">Flutter SDK</a> and <a href="https://docs.flutter.dev/get-started/editor" target="_blank">an editor</a>.</p> <p>You can run the codelab using any of these devices:</p> <ul> <li>A physical <a href="https://docs.flutter.dev/get-started/install/macos#android-setup" target="_blank">Android</a> or <a href="https://docs.flutter.dev/get-started/install/macos#deploy-to-ios-devices" target="_blank">iOS</a> device connected to your computer and set to Developer mode.</li> <li>The <a href="https://docs.flutter.dev/get-started/install/macos#set-up-the-ios-simulator" target="_blank"> iOS simulator</a> (requires installing Xcode tools).</li> <li>The <a href="https://docs.flutter.dev/get-started/install/macos#set-up-the-android-emulator" target="_blank">Android Emulator</a> (requires setup in Android Studio).</li> <li>A browser (Chrome is required for debugging).</li> <li>As a <a href="https://docs.flutter.dev/get-started/install/windows#windows-setup" target="_blank">Windows</a>, <a href="https://docs.flutter.dev/get-started/install/linux#linux-setup" target="_blank">Linux</a>, or <a href="https://docs.flutter.dev/get-started/install/macos#macos-setup" target="_blank">macOS</a> desktop application. You must develop on the platform where you plan to deploy. So, if you want to develop a Windows desktop app, you must develop on Windows to access the appropriate build chain. There are operating system-specific requirements that are covered in detail on <a href="https://docs.flutter.dev/desktop" target="_blank">docs.flutter.dev/desktop</a>.</li> </ul> <h2 is-upgraded id="download-the-code" data-text="Download the code" tabindex="-1">Download the code</h2> <p><a href="https://github.com/googlecodelabs/admob-ads-in-flutter/archive/master.zip" target="_blank"><button class="button button-primary button-with-icon"><span class="material-icons" aria-hidden="true" translate="no">file_download</span>Download source code</button></a> <a href="https://github.com/googlecodelabs/admob-ads-in-flutter" target="_blank"><button class="button button-primary">View repository on Github</button></a></p> <p>After you download the zip file, extract its contents. You will have a folder named <code translate="no" dir="ltr">admob-ads-in-flutter-master</code>.</p> <p>Alternatively, you can clone the GitHub repository from the command line:</p> <div></div><devsite-code><pre translate="no" dir="ltr" is-upgraded>$ git clone https://github.com/googlecodelabs/admob-ads-in-flutter </pre></devsite-code> <p>The repository contains two folders:</p> <ul> <li><img alt="android_studio_folder.png" style="width: 20.00px" src="/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"><strong>starter</strong> — Starting code that you will build in this codelab.</li> <li><img alt="android_studio_folder.png" style="width: 20.00px" src="/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"><strong>complete</strong> — Completed code for this codelab.</li> </ul> </google-codelab-step> <google-codelab-step label="Set up the AdMob app and ad units" duration="5" step="2"> <h2 class="step-title" id="2" data-text="Set up the AdMob app and ad units" tabindex="-1"> 3. Set up the AdMob app and ad units </h2> <p>Because Flutter is a multi-platform SDK, you need to add an app and ad units for both Android and iOS in AdMob.</p> <aside class="special"><p><strong>Note:</strong> If you want to follow the codelab instead of creating a new application and ad units on your own, go to the <a href="https://docs.google.com/document/d/1wt3i_wE0TqXNfCZlqKr1qcbfZIyj3ElcjWOEYsWs8lU/edit#heading=h.56ajivlhvvkk" target="_blank"><strong>Use the test AdMob app and ad units</strong></a> section.</p> </aside> <h2 is-upgraded id="set-up-for-android" data-text="Set up for Android" tabindex="-1"><strong>Set up for Android</strong></h2> <p>To set up for Android, you need to add an Android app and create ad units.</p> <h3 is-upgraded id="add-an-android-app" data-text="Add an Android app" tabindex="-1"><strong>Add an Android app</strong></h3> <ol type="1"> <li>In the <a href="https://apps.admob.com" target="_blank">AdMob console</a>, click <strong>ADD APP</strong> from the <strong>Apps</strong> menu.</li> <li>When you&#39;re asked <em>Have you published your app on Google Play or the App Store?</em>, click <strong>NO</strong>.</li> <li>Enter <code translate="no" dir="ltr">Awesome Drawing Quiz</code> in the app name field, and select <strong>Android</strong> as the platform.</li> </ol> <p class="image-container"><img alt="ddafee37a6f92229.png" style="width: 580.50px" src="/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/ddafee37a6f92229_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> <ol type="1" start="4"> <li>Enabling user metrics is not necessary to complete this codelab. However, we recommend that you do because it allows you to understand user behavior in more detail. Click <strong>ADD</strong> to complete the process.</li> </ol> <p class="image-container"><img alt="b918bf44362813a9.png" style="width: 561.50px" src="/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> <h3 is-upgraded id="create-ad-units" data-text="Create ad units" tabindex="-1"><strong>Create ad units</strong></h3> <p>To start adding ad units to AdMob:</p> <ol type="1"> <li>Select <strong>Awesome Drawing Quiz</strong> from the <strong>Apps</strong> menu in the <strong>AdMob</strong> console.</li> <li>Click the <strong>Ad units</strong> menu.</li> </ol> <p><strong>Banner</strong></p> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td><td colspan="1" rowspan="1"><ol type="1" start="1"> <li>Click the <strong>ADD AD UNIT</strong> button.</li> <li>Select <strong>Banner</strong> as the format.</li> <li>Enter <code translate="no" dir="ltr">android-adq-banner</code> in the <strong>Ad unit name</strong> field.</li> <li>Click <strong>CREATE AD UNIT</strong> to complete the process.</li> </ol> </td></tr> </table> <p><strong>Interstitial</strong></p> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td><td colspan="1" rowspan="1"><ol type="1" start="1"> <li>Click the <strong>ADD AD UNIT</strong> button.</li> <li>Select <strong>Interstitial</strong> as the format.</li> <li>Enter <code translate="no" dir="ltr">android-adq-interstitial</code> in the <strong>Ad unit name</strong> field.</li> <li>Click <strong>CREATE AD UNIT</strong> to complete the process.</li> </ol> </td></tr> </table> <p><strong>Rewarded</strong></p> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td><td colspan="1" rowspan="1"><ol type="1" start="1"> <li>Click the <strong>ADD AD UNIT</strong> button.</li> <li>Select <strong>Rewarded</strong> as the format.</li> <li>Enter <code translate="no" dir="ltr">android-adq-rewarded</code> in the <strong>Ad unit name</strong> field.</li> <li>Leave the default for <strong>Reward settings</strong>.</li> <li>Click <strong>CREATE AD UNIT</strong> to complete the process.</li> </ol> </td></tr> </table> <aside class="warning"><p><strong>Important:</strong> When building and testing your apps, make sure that you <strong>use test ads,</strong> rather than live, production ads. Failure to do so can lead to suspension of your account. For more information about how the Mobile Ads SDK&#39;s test ads work, see <a href="https://developers.google.com/admob/android/test-ads" target="_blank">Test Ads</a>.</p> </aside> <p>It usually takes a few hours for a new ad unit to be able to serve ads.</p> <p>If you want to test the ad&#39;s behavior immediately, then use the test app ID and ad unit IDs listed in the Android app ID/ad unit ID and iOS app ID/ad unit ID tables.</p> <h2 is-upgraded id="set-up-for-ios" data-text="Set up for iOS" tabindex="-1"><strong>Set up for iOS</strong></h2> <p>To set up for iOS, you need to add an iOS app and create ad units.</p> <h3 is-upgraded id="add-an-ios-app" data-text="Add an iOS app" tabindex="-1"><strong>Add an iOS app</strong></h3> <ol type="1"> <li>In the <a href="https://apps.admob.com" target="_blank">AdMob console</a>, click <strong>ADD APP</strong> from the <strong>Apps</strong> menu.</li> <li>When you&#39;re asked <em>Have you published your app on Google Play or the App Store?</em>, click <strong>NO</strong>.</li> <li>Enter <code translate="no" dir="ltr">Awesome Drawing Quiz</code> in the app name field, and select <strong>iOS</strong> as the platform.</li> </ol> <p class="image-container"><img alt="93e7f9f114232402.png" style="width: 569.52px" src="/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/93e7f9f114232402_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> <ol type="1" start="4"> <li>Enabling user metrics is not necessary to complete this codelab. However, we recommend that you do because it allows you to understand user behavior in more detail. Click <strong>ADD</strong> to complete the process.</li> </ol> <p class="image-container"><img alt="b918bf44362813a9.png" style="width: 561.50px" src="/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/b918bf44362813a9_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> <h3 is-upgraded id="create-ad-units_1" data-text="Create ad units" tabindex="-1"><strong>Create ad units</strong></h3> <p>To add ad units:</p> <ol type="1"> <li>Select <strong>Awesome Drawing Quiz</strong> app from <strong>Apps</strong> menu in the <strong>AdMob</strong> console.</li> <li>Click the <strong>Ad units</strong> menu.</li> </ol> <p><strong>Banner</strong></p> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/f8aa0006a80c3269_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td><td colspan="1" rowspan="1"><ol type="1" start="1"> <li>Click the <strong>ADD AD UNIT</strong> button.</li> <li>Select <strong>Banner</strong> as the format.</li> <li>Enter <code translate="no" dir="ltr">ios-adq-banner</code> in the <strong>Ad unit name</strong> field.</li> <li>Click <strong>CREATE AD UNIT</strong> to complete the process.</li> </ol> </td></tr> </table> <p><strong>Interstitial</strong></p> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/6bed4a565f6a7d6a_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td><td colspan="1" rowspan="1"><ol type="1" start="1"> <li>Click the <strong>ADD AD UNIT</strong> button.</li> <li>Select <strong>Interstitial</strong> as the format.</li> <li>Enter <code translate="no" dir="ltr">ios-adq-interstitial</code> in the <strong>Ad unit name</strong> field.</li> <li>Click <strong>CREATE AD UNIT</strong> to complete the process.</li> </ol> </td></tr> </table> <p><strong>Rewarded</strong></p> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p class="image-container"><img src="/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/2597dbca44c6145d_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </td><td colspan="1" rowspan="1"><ol type="1" start="1"> <li>Click the <strong>ADD AD UNIT</strong> button.</li> <li>Select <strong>Rewarded</strong> as the format.</li> <li>Enter <code translate="no" dir="ltr">ios-adq-rewarded</code> in the <strong>Ad unit name</strong> field.</li> <li>Leave the default for <strong>Reward settings</strong>.</li> <li>Click <strong>CREATE AD UNIT</strong> to complete the process.</li> </ol> </td></tr> </table> <aside class="warning"><p><strong>Important:</strong> When building and testing your apps, make sure that you <strong>use test ads,</strong> rather than live, production ads. Failure to do so can lead to suspension of your account. For more information about how the Mobile Ads SDK&#39;s test ads work, see <a href="https://developers.google.com/admob/ios/test-ads" target="_blank">Test Ads</a>.</p> </aside> <p>It usually takes a few hours for a new ad unit to be able to serve ads.</p> <p>If you want to test the ad&#39;s behavior immediately, then use the test app ID and ad unit IDs listed in the following table.</p> <h2 is-upgraded id="optional:-use-the-test-admob-app-and-ad-units" data-text="Optional: Use the test AdMob app and ad units" tabindex="-1">Optional: <strong>Use the test AdMob app and ad units</strong></h2> <p>If you want to follow the codelab instead of creating a new application and ad units on your own, you can use the test AdMob app ID and ad unit IDs listed in the following tables.</p> <h3 is-upgraded id="android-app-idad-unit-id" data-text="Android app ID/ad unit ID" tabindex="-1"><strong>Android app ID/ad unit ID</strong></h3> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p><strong>Item</strong></p> </td><td colspan="1" rowspan="1"><p><strong>app ID/ad unit ID</strong></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>AdMob app ID</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544~3347511713</code></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>Banner</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544/6300978111</code></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>Interstitial</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544/1033173712</code></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>Rewarded</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544/5224354917</code></p> </td></tr> </table> <h3 is-upgraded id="ios-app-idad-unit-id" data-text="iOS app ID/ad unit ID" tabindex="-1"><strong>iOS app ID/ad unit ID</strong></h3> <table class="vertical-rules"> <tr><td colspan="1" rowspan="1"><p><strong>Item</strong></p> </td><td colspan="1" rowspan="1"><p><strong>app ID/ad unit ID</strong></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>AdMob app ID</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544~1458002511</code></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>Banner</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544/2934735716</code></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>Interstitial</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544/4411468910</code></p> </td></tr> <tr><td colspan="1" rowspan="1"><p>Rewarded</p> </td><td colspan="1" rowspan="1"><p><code translate="no" dir="ltr">ca-app-pub-3940256099942544/1712485313</code></p> </td></tr> </table> <p>For more information about the test ads, see the <a href="https://developers.google.com/admob/android/test-ads" target="_blank">Android test ads</a> and the <a href="https://developers.google.com/admob/ios/test-ads" target="_blank">iOS test ads</a> developer documentation.</p> </google-codelab-step> <google-codelab-step label="Add the Google Mobile Ads Flutter plugin" duration="5" step="3"> <h2 class="step-title" id="3" data-text="Add the Google Mobile Ads Flutter plugin" tabindex="-1"> 4. Add the Google Mobile Ads Flutter plugin </h2> <p>Flutter uses plugins to provide access to a wide range of platform-specific services. Plugins enable you to access services and APIs on each platform.</p> <p>The <a href="https://pub.dev/packages/google_mobile_ads" target="_blank">google_mobile_ads</a> plugin supports loading and displaying banner, interstitial, rewarded, and native ads using the AdMob API.</p> <p>Because Flutter is a multi-platform SDK, the google_mobile_ads plugin is applicable for both iOS and Android. So, if you add the plugin to your Flutter app, it&#39;s used by both Android and iOS versions of the AdMob inline ads app.</p> <h2 is-upgraded id="add-the-google-mobile-ads-plugin-as-a-dependency" data-text="Add the Google Mobile Ads plugin as a dependency" tabindex="-1"><strong>Add the Google Mobile Ads plugin as a dependency</strong></h2> <p>To access the AdMob APIs from the <strong>AdMob inline ads</strong> project, add <code translate="no" dir="ltr">google_mobile_ads</code> as a dependency to the <code translate="no" dir="ltr">pubspec.yaml</code> file located at the root of the project.</p> <h3 is-upgraded id="pubspec.yaml" data-text="pubspec.yaml" tabindex="-1"><strong>pubspec.yaml</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="scdoc"><code translate="no" dir="ltr">... environment: # TODO: Update the minimum sdk version to 2.12.0 to support null safety. sdk: "&gt;=2.17.0 &lt;3.0.0" dependencies: flutter: sdk: flutter google_fonts: ^3.0.1 # TODO: Add google_mobile_ads as a dependency google_mobile_ads: ^1.2.0 ... </code></pre></devsite-code> <p>Click <strong>Pub get</strong> to install the plugin in the <strong>Awesome Drawing Quiz</strong> project.</p> <p class="image-container"><img alt="9ce73858eedbd8fc.png" style="width: 624.00px" src="/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/9ce73858eedbd8fc_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> <h2 is-upgraded id="update-androidmanifest.xml-android" data-text="Update AndroidManifest.xml (Android)" tabindex="-1"><strong>Update AndroidManifest.xml (Android)</strong></h2> <ol type="1"> <li>Open the <code translate="no" dir="ltr">android/app/src/main/AndroidManifest.xml</code> file in Android Studio.</li> <li>Add your AdMob app ID by adding a <code translate="no" dir="ltr">&lt;meta-data&gt;</code> tag with the name <code translate="no" dir="ltr">com.google.android.gms.ads.APPLICATION_ID</code>. For example, if your AdMob app ID is <code translate="no" dir="ltr">ca-app-pub-3940256099942544~3347511713</code>, then you need to add the following lines to the <code translate="no" dir="ltr">AndroidManifest.xml</code> file.</li> </ol> <h3 is-upgraded id="androidmanifest.xml" data-text="AndroidManifest.xml" tabindex="-1"><strong>AndroidManifest.xml</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="scdoc"><code translate="no" dir="ltr">&lt;manifest&gt; ... &lt;application&gt; ... &lt;meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/&gt; &lt;/application&gt; &lt;/manifest&gt; </code></pre></devsite-code> <h2 is-upgraded id="update-info.plist-ios" data-text="Update Info.plist (iOS)" tabindex="-1"><strong>Update Info.plist (iOS)</strong></h2> <ol type="1"> <li>Open the <code translate="no" dir="ltr">ios/Runner/Info.plist</code> file in Android Studio.</li> <li>Add a <code translate="no" dir="ltr">GADApplicationIdentifier</code> key with the string value of your AdMob app ID. For example, if your AdMob app ID is <code translate="no" dir="ltr">ca-app-pub-3940256099942544~1458002511</code>, then you need to add the following lines to the <code translate="no" dir="ltr">Info.plist</code> file.</li> </ol> <h3 is-upgraded id="iosrunnerinfo.plist" data-text="ios/Runner/Info.plist" tabindex="-1"><strong>ios/Runner/Info.plist</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Text only"><code translate="no" dir="ltr">... &lt;key&gt;GADApplicationIdentifier&lt;/key&gt; &lt;string&gt;ca-app-pub-3940256099942544~1458002511&lt;/string&gt; ... </code></pre></devsite-code> </google-codelab-step> <google-codelab-step label="Add a helper class for ads" duration="2" step="4"> <h2 class="step-title" id="4" data-text="Add a helper class for ads" tabindex="-1"> 5. Add a helper class for ads </h2> <p>Create a new file named <code translate="no" dir="ltr">ad_helper.dart</code> under the <code translate="no" dir="ltr">lib</code> directory. Then, implement the <code translate="no" dir="ltr">AdHelper</code> class, which provides an AdMob app ID and ad unit IDs for Android and iOS.</p> <p>Make sure that you replace the AdMob app ID (<em><code translate="no" dir="ltr">ca-app-pub-xxxxxx~yyyyy</code></em>) and the ad unit ID (<em><code translate="no" dir="ltr">ca-app-pub-xxxxxxx/yyyyyyyy</code></em>) with the IDs you created in the previous step.</p> <h3 is-upgraded id="libad_helper.dart" data-text="lib/ad_helper.dart" tabindex="-1"><strong>lib/ad_helper.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'dart:io'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">AdHelper</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">static</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">bannerAdUnitId</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isAndroid</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'&lt;YOUR_ANDROID_BANNER_AD_UNIT_ID&gt;'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isIOS</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'&lt;YOUR_IOS_BANNER_AD_UNIT_ID&gt;'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">throw</span> <span class="devsite-syntax-n">UnsupportedError</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Unsupported platform'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-n">static</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">interstitialAdUnitId</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isAndroid</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'&lt;YOUR_ANDROID_INTERSTITIAL_AD_UNIT_ID&gt;'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isIOS</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'&lt;YOUR_IOS_INTERSTITIAL_AD_UNIT_ID&gt;'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">throw</span> <span class="devsite-syntax-n">UnsupportedError</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Unsupported platform'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-n">static</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">rewardedAdUnitId</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isAndroid</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'&lt;YOUR_ANDROID_REWARDED_AD_UNIT_ID&gt;'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isIOS</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'&lt;YOUR_IOS_REWARDED_AD_UNIT_ID&gt;'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">throw</span> <span class="devsite-syntax-n">UnsupportedError</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Unsupported platform'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <p>Use the following code snippet if you want to use the test AdMob app ID and test ad unit IDs.</p> <p><strong>lib/ad_helper.dart</strong></p> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'dart:io'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">AdHelper</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">static</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">bannerAdUnitId</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isAndroid</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'ca-app-pub-3940256099942544/6300978111'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isIOS</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s1">'ca-app-pub-3940256099942544/2934735716'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">throw</span> <span class="devsite-syntax-n">new</span> <span class="devsite-syntax-n">UnsupportedError</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Unsupported platform'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-n">static</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">interstitialAdUnitId</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isAndroid</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s2">"ca-app-pub-3940256099942544/1033173712"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isIOS</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s2">"ca-app-pub-3940256099942544/4411468910"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">throw</span> <span class="devsite-syntax-n">new</span> <span class="devsite-syntax-n">UnsupportedError</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Unsupported platform"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-n">static</span> <span class="devsite-syntax-n">String</span> <span class="devsite-syntax-n">get</span> <span class="devsite-syntax-n">rewardedAdUnitId</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isAndroid</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s2">"ca-app-pub-3940256099942544/5224354917"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-k">if</span> <span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">Platform</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isIOS</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-s2">"ca-app-pub-3940256099942544/1712485313"</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-k">else</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-n">throw</span> <span class="devsite-syntax-n">new</span> <span class="devsite-syntax-n">UnsupportedError</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s2">"Unsupported platform"</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> </google-codelab-step> <google-codelab-step label="Initialize the Google Mobile Ads SDK" duration="2" step="5"> <h2 class="step-title" id="5" data-text="Initialize the Google Mobile Ads SDK" tabindex="-1"> 6. Initialize the Google Mobile Ads SDK </h2> <p>Before loading ads, you need to initialize the Google Mobile Ads SDK. Open the <code translate="no" dir="ltr">lib/home_route.dart</code> file, and modify <code translate="no" dir="ltr">_initGoogleMobileAds()</code> to initialize the SDK before the home page is loaded.</p> <p>Note that you need to change the return type of the <code translate="no" dir="ltr">_initGoogleMobileAds()</code> method from <code translate="no" dir="ltr">Future&lt;dynamic&gt;</code> to <code translate="no" dir="ltr">Future&lt;InitializationStatus&gt;</code> to get the SDK initialization result after it completes.</p> <h3 is-upgraded id="home_route.dart" data-text="home_route.dart" tabindex="-1"><strong>home_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Import</span> <span class="devsite-syntax-n">google_mobile_ads</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">dart</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'package:google_mobile_ads/google_mobile_ads.dart'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'package:flutter/material.dart'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">HomeRoute</span> <span class="devsite-syntax-n">extends</span> <span class="devsite-syntax-n">StatelessWidget</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-n">Future&lt;InitializationStatus&gt;</span> <span class="devsite-syntax-n">_initGoogleMobileAds</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Initialize</span> <span class="devsite-syntax-n">Google</span> <span class="devsite-syntax-n">Mobile</span> <span class="devsite-syntax-n">Ads</span> <span class="devsite-syntax-n">SDK</span> <span class="devsite-syntax-k">return</span> <span class="devsite-syntax-n">MobileAds</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">instance</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">initialize</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> </google-codelab-step> <google-codelab-step label="Add a banner ad" duration="5" step="6"> <h2 class="step-title" id="6" data-text="Add a banner ad" tabindex="-1"> 7. Add a banner ad </h2> <p>In this section, you display a banner ad at the top of the game screen, as shown in the following screenshot.</p> <p class="image-container"><img alt="276b4cfa283ea6c7.png" style="width: 401.49px" src="/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> <ol type="1"> <li>Open the <code translate="no" dir="ltr">lib/game_route.dart</code> file, and import <code translate="no" dir="ltr">ad_manager.dart</code></li> <li>Import the <code translate="no" dir="ltr">ad_helper.dart</code> and <code translate="no" dir="ltr">google_mobile_ads.dart</code> by adding the following lines:</li> </ol> <h3 is-upgraded id="libgame_route.dart" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Python"><code translate="no" dir="ltr"><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Import</span> <span class="devsite-syntax-n">ad_helper</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">dart</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'package:awesome_drawing_quiz/ad_helper.dart'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-o">//</span> <span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span> <span class="devsite-syntax-n">Import</span> <span class="devsite-syntax-n">google_mobile_ads</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">dart</span> <span class="devsite-syntax-kn">import</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-s1">'package:google_mobile_ads/google_mobile_ads.dart'</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">GameRoute</span> <span class="devsite-syntax-n">extends</span> <span class="devsite-syntax-n">StatefulWidget</span> <span class="devsite-syntax-p">{</span> <span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <ol type="1" start="3"> <li>In the <code translate="no" dir="ltr">_GameRouteState</code> class, add the following members for a banner ad.</li> </ol> <h3 is-upgraded id="libgame_route.dart_1" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_GameRouteState</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">extends</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">State&lt;GameRoute&gt;</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implements</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">QuizEventListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Add</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_bannerAd</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">BannerAd</span><span class="devsite-syntax-err">?</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_bannerAd</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <ol type="1" start="4"> <li>In the <code translate="no" dir="ltr">initState()</code> method, create and load a <code translate="no" dir="ltr">BannerAd</code> for the 320x50 banner (<code translate="no" dir="ltr">AdSize.banner</code>). Note that an ad event listener is configured to update the UI (<code translate="no" dir="ltr">setState()</code>) when an ad is loaded .</li> </ol> <h3 is-upgraded id="libgame_route.dart_2" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-err">@</span><span class="devsite-syntax-n">override</span> <span class="devsite-syntax-nb devsite-syntax-nb-Type">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">initState</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Load</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">banner</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">BannerAd</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">adUnitId</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AdHelper</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">bannerAdUnitId</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AdRequest</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">size</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AdSize</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">banner</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">listener</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">BannerAdListener</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdLoaded</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">setState</span><span class="devsite-syntax-p">(()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_bannerAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">as</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">BannerAd</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdFailedToLoad</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">err</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Failed to load a banner ad: ${err.message}'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <ol type="1" start="5"> <li>Modify the <code translate="no" dir="ltr">build()</code> method to display a banner ad when available.</li> </ol> <h3 is-upgraded id="libgame_route.dart_3" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Transact-SQL"><code translate="no" dir="ltr"><span class="devsite-syntax-nv">@override</span> <span class="devsite-syntax-n">Widget</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">build</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">BuildContext</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">context</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Scaffold</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">body</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">SafeArea</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">child</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Stack</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">children</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[</span> <span class="devsite-syntax-n"> Center(</span> <span class="devsite-syntax-n"> ...</span> <span class="devsite-syntax-n"> ),</span> <span class="devsite-syntax-n"> // TODO: Display a banner when ready</span> <span class="devsite-syntax-n"> if (_bannerAd != null)</span> <span class="devsite-syntax-n"> Align(</span> <span class="devsite-syntax-n"> alignment: Alignment.topCenter,</span> <span class="devsite-syntax-n"> child: Container(</span> <span class="devsite-syntax-n"> width: _bannerAd!.size.width.toDouble(),</span> <span class="devsite-syntax-n"> height: _bannerAd!.size.height.toDouble(),</span> <span class="devsite-syntax-n"> child: AdWidget(ad: _bannerAd!),</span> <span class="devsite-syntax-n"> ),</span> <span class="devsite-syntax-n"> ),</span> <span class="devsite-syntax-n"> </span><span class="devsite-syntax-o">]</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-err">}</span> </code></pre></devsite-code> <ol type="1" start="6"> <li>Release the resource associated with the <code translate="no" dir="ltr">BannerAd</code> object by calling the <code translate="no" dir="ltr">BannerAd.dispose()</code> method in the <code translate="no" dir="ltr">dispose()</code> callback method.</li> </ol> <h3 is-upgraded id="libgame_route.dart_4" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Transact-SQL"><code translate="no" dir="ltr"><span class="devsite-syntax-nv">@override</span> <span class="devsite-syntax-n">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dispose</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">BannerAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">object</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_bannerAd</span><span class="devsite-syntax-vm">?</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">super</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-err">}</span> </code></pre></devsite-code> <p>That&#39;s it! Run the project, and start a new game. After an ad is loaded, you&#39;ll see a banner ad at the top of the screen.</p> <p class="image-container"><img alt="276b4cfa283ea6c7.png" style="width: 401.49px" src="/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/276b4cfa283ea6c7_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"></p> </google-codelab-step> <google-codelab-step label="Add an interstitial ad" duration="5" step="7"> <h2 class="step-title" id="7" data-text="Add an interstitial ad" tabindex="-1"> 8. Add an interstitial ad </h2> <p>In this section, you display an interstitial ad after the game (5 levels in total) finishes.</p> <ol type="1"> <li>Open the <code translate="no" dir="ltr">lib/game_route.dart</code> file</li> <li>In the <code translate="no" dir="ltr">_GameRouteState</code> class, add the following members and methods for an interstitial ad.</li> </ol> <p>Note that an ad event listener is configured to check whether the ad is ready (<code translate="no" dir="ltr">onAdLoaded()</code> and <code translate="no" dir="ltr">onAdFailedToLoad()</code>) and to display the app&#39;s home screen when the ad is closed (<code translate="no" dir="ltr">onAdDismissedFullScreenContent()</code>)</p> <h3 is-upgraded id="libgame_route.dart_5" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_GameRouteState</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">extends</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">State&lt;GameRoute&gt;</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implements</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">QuizEventListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Add</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_interstitialAd</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">InterstitialAd</span><span class="devsite-syntax-err">?</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_interstitialAd</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Implement</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_loadInterstitialAd</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb devsite-syntax-nb-Type">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_loadInterstitialAd</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">InterstitialAd</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">adUnitId</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AdHelper</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">interstitialAdUnitId</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AdRequest</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">adLoadCallback</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">InterstitialAdLoadCallback</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdLoaded</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">fullScreenContentCallback</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FullScreenContentCallback</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdDismissedFullScreenContent</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_moveToHome</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">setState</span><span class="devsite-syntax-p">(()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_interstitialAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdFailedToLoad</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">err</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Failed to load an interstitial ad: ${err.message}'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <ol type="1" start="3"> <li>In this codelab, an interstitial ad is displayed after a user completes 5 levels. To minimize unnecessary ad requests, request an ad when a user reaches level 3.</li> </ol> <p>In the <code translate="no" dir="ltr">onNewLevel()</code> method, add the following lines.</p> <h3 is-upgraded id="libgame_route.dart_6" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-err">@</span><span class="devsite-syntax-n">override</span> <span class="devsite-syntax-nb devsite-syntax-nb-Type">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onNewLevel</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nb devsite-syntax-nb-Type">int</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">level</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Drawing</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">drawing</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb devsite-syntax-nb-Type">String</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">clue</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Load</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">an</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Interstitial</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Ad</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">level</span><span class="devsite-syntax-w"> </span>&gt;<span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-mi">3</span><span class="devsite-syntax-w"> &amp;&amp; </span><span class="devsite-syntax-n">_interstitialAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">==</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb devsite-syntax-nb-Type">null</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_loadInterstitialAd</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <ol type="1" start="4"> <li>When a game finishes, the game score dialog is displayed. When a user closes the dialog, it routes a user to the home screen of the <strong>Awesome Drawing Quiz</strong>.</li> </ol> <p>Because interstitial ads should be displayed between screen transitions, we show the interstitial ad when a user clicks the <strong>CLOSE</strong> button.</p> <p>Modify the <code translate="no" dir="ltr">onGameOver()</code> method as follows.</p> <h3 is-upgraded id="libgame_route.dart_7" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Transact-SQL"><code translate="no" dir="ltr"><span class="devsite-syntax-nv">@override</span> <span class="devsite-syntax-n">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onGameOver</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nc">int</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">correctAnswers</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">showDialog</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">context</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_scaffoldKey</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">currentContext</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">builder</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">context</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AlertDialog</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">title</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">Text</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Game over!'</span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">content</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nc">Text</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Score: $correctAnswers/5'</span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">actions</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">[</span> <span class="devsite-syntax-n"> FlatButton(</span> <span class="devsite-syntax-n"> child: Text('close'.toUpperCase()),</span> <span class="devsite-syntax-n"> onPressed: () {</span> <span class="devsite-syntax-n"> // TODO: Display an Interstitial Ad</span> <span class="devsite-syntax-n"> if (_interstitialAd != null) {</span> <span class="devsite-syntax-n"> _interstitialAd?.show();</span> <span class="devsite-syntax-n"> } else {</span> <span class="devsite-syntax-n"> _moveToHome();</span> <span class="devsite-syntax-n"> }</span> <span class="devsite-syntax-n"> },</span> <span class="devsite-syntax-n"> ),</span> <span class="devsite-syntax-n"> </span><span class="devsite-syntax-o">]</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">}</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-err">}</span> </code></pre></devsite-code> <ol type="1" start="5"> <li>Release the resource associated with the <code translate="no" dir="ltr">InterstitialAd</code> object by calling the <code translate="no" dir="ltr">InterstitialAd.dispose()</code> method in the <code translate="no" dir="ltr">dispose()</code> callback method.</li> </ol> <h3 is-upgraded id="libgame_route.dart_8" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Transact-SQL"><code translate="no" dir="ltr"><span class="devsite-syntax-nv">@override</span> <span class="devsite-syntax-n">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dispose</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">an</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">InterstitialAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">object</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_interstitialAd</span><span class="devsite-syntax-vm">?</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">super</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-err">}</span> </code></pre></devsite-code> <p>That&#39;s it! Run the project and complete the game. If an interstitial ad is loaded, you&#39;ll see an interstitial ad once you click <strong>CLOSE</strong> button from the score dialog.</p> <p class="image-container"><img alt="c546e438c405e941.gif" style="width: 324.82px" src="/static/codelabs/admob-ads-in-flutter/img/c546e438c405e941.gif"></p> </google-codelab-step> <google-codelab-step label="Add a rewarded ad" duration="6" step="8"> <h2 class="step-title" id="8" data-text="Add a rewarded ad" tabindex="-1"> 9. Add a rewarded ad </h2> <p>In this section, you add a rewarded ad which gives a user an additional hint as a reward.</p> <ol type="1"> <li>Open the <code translate="no" dir="ltr">lib/game_route.dart</code> file</li> <li>In the <code translate="no" dir="ltr">_GameRouteState</code> class, add members for a rewarded ad, and implement <code translate="no" dir="ltr">_loadRewardedAd()</code> method. Note that it loads another rewarded ad when the ad is closed (<code translate="no" dir="ltr">onAdDismissedFullScreenContent</code>) to cache the ad as early as possible.</li> </ol> <h3 is-upgraded id="libgame_route.dart_9" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_GameRouteState</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">extends</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">State&lt;GameRoute&gt;</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implements</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">QuizEventListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Add</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_rewardedAd</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">RewardedAd</span><span class="devsite-syntax-err">?</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_rewardedAd</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Implement</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_loadRewardedAd</span><span class="devsite-syntax-p">()</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb devsite-syntax-nb-Type">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_loadRewardedAd</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">RewardedAd</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">load</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">adUnitId</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AdHelper</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">rewardedAdUnitId</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">request</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">AdRequest</span><span class="devsite-syntax-p">(),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">rewardedAdLoadCallback</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">RewardedAdLoadCallback</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdLoaded</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">fullScreenContentCallback</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FullScreenContentCallback</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdDismissedFullScreenContent</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">setState</span><span class="devsite-syntax-p">(()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_rewardedAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb devsite-syntax-nb-Type">null</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_loadRewardedAd</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">setState</span><span class="devsite-syntax-p">(()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_rewardedAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-p">;</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">});</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onAdFailedToLoad</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-n">err</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb">print</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Failed to load a rewarded ad: ${err.message}'</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <ol type="1" start="3"> <li>Call <code translate="no" dir="ltr">_loadRewardedAd()</code> from <code translate="no" dir="ltr">initState()</code> method to request a rewarded ad when the game starts.</li> </ol> <h3 is-upgraded id="libgame_route.dart_10" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="GDScript"><code translate="no" dir="ltr"><span class="devsite-syntax-k">class</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_GameRouteState</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">extends</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">State&lt;GameRoute&gt;</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">implements</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">QuizEventListener</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">@</span><span class="devsite-syntax-n">override</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nb devsite-syntax-nb-Type">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">initState</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">COMPLETE</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Load</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Rewarded</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Ad</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_loadRewardedAd</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">...</span> <span class="devsite-syntax-p">}</span> </code></pre></devsite-code> <ol type="1" start="4"> <li>Allow users to watch a rewarded ad by clicking the floating action button. The button shows only if a user hasn&#39;t used a hint at the current level and a rewarded ad is loaded.</li> </ol> <p>Modify the <code translate="no" dir="ltr">_buildFloatingActionButton()</code> method, as follows, to display the floating action button. Note that returning <code translate="no" dir="ltr">null</code> hides the button from the screen.</p> <p>Note that <code translate="no" dir="ltr">onUserEarnedReward</code> is the most important ad event in a rewarded ad. It&#39;s triggered when a user becomes eligible to receive a reward (for example., finished watching a video).</p> <p>In this codelab, the <code translate="no" dir="ltr">QuizManager.instance.useHint()</code> method is called from the callback, which reveals one more character in the hint string. The app reloads a rewarded ad in the <code translate="no" dir="ltr">onAdClosed</code> callback to make sure the ad is ready as early as possible.</p> <h3 is-upgraded id="libgame_route.dart_11" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="CSS+Lasso"><code translate="no" dir="ltr"><span class="devsite-syntax-nt">Widget</span><span class="devsite-syntax-o">?</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">_buildFloatingActionButton</span><span class="devsite-syntax-o">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FloatingActionButton</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">if</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">rewarded</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">ad</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">is</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">available</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-o">!</span><span class="devsite-syntax-n">QuizManager</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">instance</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-n">isHintUsed</span><span class="devsite-syntax-w"> &amp;&amp; </span><span class="devsite-syntax-n">_rewardedAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">!=</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">null</span><span class="devsite-syntax-p">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">?</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">FloatingActionButton</span><span class="devsite-syntax-o">.</span><span class="devsite-syntax-nf">extended</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">onPressed</span><span class="devsite-syntax-err">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">(</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">showDialog</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">context</span><span class="devsite-syntax-err">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">context</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">builder</span><span class="devsite-syntax-err">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">(</span><span class="devsite-syntax-n">context</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">return</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">AlertDialog</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">title</span><span class="devsite-syntax-err">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">Text</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Need a hint?'</span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">content</span><span class="devsite-syntax-err">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nf">Text</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'Watch an Ad to get a hint!'</span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">actions</span><span class="devsite-syntax-err">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-cp">[</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">TextButton</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">child</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Text</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'cancel'</span><span class="devsite-syntax-bp">.</span><span class="devsite-syntax-nx devsite-syntax-nx-Member">toUpperCase</span><span class="devsite-syntax-p">()),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">onPressed</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Navigator.pop</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">context</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">TextButton</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">child</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Text</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-s1">'ok'</span><span class="devsite-syntax-bp">.</span><span class="devsite-syntax-nx devsite-syntax-nx-Member">toUpperCase</span><span class="devsite-syntax-p">()),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">onPressed</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">Navigator.pop</span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">context</span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">_rewardedAd</span><span class="devsite-syntax-o">?</span><span class="devsite-syntax-bp">.</span><span class="devsite-syntax-nx devsite-syntax-nx-Member">show</span><span class="devsite-syntax-p">(</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">onUserEarnedReward</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">(</span><span class="devsite-syntax-nx">_</span><span class="devsite-syntax-p">,</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">reward</span><span class="devsite-syntax-p">)</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nx">QuizManager.instance.useHint</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">},</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-cp">]</span><span class="devsite-syntax-p">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">}</span><span class="devsite-syntax-o">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">);</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">}</span><span class="devsite-syntax-o">,</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">label</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">Text</span><span class="devsite-syntax-o">(</span><span class="devsite-syntax-s1">'Hint'</span><span class="devsite-syntax-o">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">icon</span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">Icon</span><span class="devsite-syntax-o">(</span><span class="devsite-syntax-nt">Icons</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-nc">card_giftcard</span><span class="devsite-syntax-o">),</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">)</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nt">null</span><span class="devsite-syntax-o">;</span> <span class="devsite-syntax-err">}</span> </code></pre></devsite-code> <ol type="1" start="5"> <li>Release the resource associated with the <code translate="no" dir="ltr">RewardedAd</code> object by calling the <code translate="no" dir="ltr">RewardedAd.dispose()</code> method in the <code translate="no" dir="ltr">dispose()</code> callback method.</li> </ol> <h3 is-upgraded id="libgame_route.dart_12" data-text="lib/game_route.dart" tabindex="-1"><strong>lib/game_route.dart</strong></h3> <div></div><devsite-code><pre class="devsite-click-to-copy" translate="no" dir="ltr" is-upgraded syntax="Transact-SQL"><code translate="no" dir="ltr"><span class="devsite-syntax-nv">@override</span> <span class="devsite-syntax-n">void</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">()</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-err">{</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-o">//</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-nl">TODO</span><span class="devsite-syntax-p">:</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">Dispose</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">a</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">RewardedAd</span><span class="devsite-syntax-w"> </span><span class="devsite-syntax-k">object</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">_rewardedAd</span><span class="devsite-syntax-vm">?</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-p">...</span> <span class="devsite-syntax-w"> </span><span class="devsite-syntax-n">super</span><span class="devsite-syntax-p">.</span><span class="devsite-syntax-n">dispose</span><span class="devsite-syntax-p">();</span> <span class="devsite-syntax-err">}</span> </code></pre></devsite-code> <p>That&#39;s it! Run the project and play the game. Once a rewarded ad is loaded, you&#39;ll see a hint button at the bottom of the screen. Click <strong>Hint</strong> button to get an additional hint.</p> <p class="image-container"><img alt="4a114d243ae3e71d.gif" style="width: 339.09px" src="/static/codelabs/admob-ads-in-flutter/img/4a114d243ae3e71d.gif"></p> </google-codelab-step> <google-codelab-step label="All done!" duration="0" step="9"> <h2 class="step-title" id="9" data-text="All done!" tabindex="-1"> 10. All done! </h2> <p>You have completed the codelab. You can find the completed code for this codelab in the <img alt="android_studio_folder.png" style="width: 20.00px" src="/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b.png" srcset="https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_36.png 36w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_48.png 48w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_72.png 72w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_96.png 96w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_480.png 480w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_720.png 720w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_856.png 856w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_960.png 960w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_1440.png 1440w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_1920.png 1920w,https://codelabs.developers.google.com/static/codelabs/admob-ads-in-flutter/img/bb745dc85ae69f6b_2880.png 2880w" sizes="(max-width: 840px) 100vw, 856px"><strong>complete</strong> folder.</p> <p>To learn how to implement a banner and native inline ads, check out the <a href="https://codelabs.developers.google.com/codelabs/admob-inline-ads-in-flutter" target="_blank">Adding an AdMob banner and native inline ads to a Flutter app</a> codelab.</p> <p>To learn more, try the other <a href="https://flutter.dev/docs/codelabs" target="_blank">Flutter codelabs</a>.</p> </google-codelab-step> </google-codelab> </div> <div class="devsite-floating-action-buttons"> </div> </article> <devsite-content-footer class="nocontent"> <p>Except as otherwise noted, the content of this page is licensed under the <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a>. For details, see the <a href="https://developers.google.com/site-policies">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p> </devsite-content-footer> <devsite-notification > </devsite-notification> <div class="devsite-content-data"> <template class="devsite-content-data-template"> [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],[],[],[]] </template> </div> </devsite-content> </main> <devsite-footer-promos class="devsite-footer"> </devsite-footer-promos> <devsite-footer-linkboxes class="devsite-footer"> <nav class="devsite-footer-linkboxes nocontent" aria-label="Footer links"> <ul class="devsite-footer-linkboxes-list"> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Connect</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//googledevelopers.blogspot.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Blog </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.facebook.com/Google-Developers-967415219957038" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Facebook </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//medium.com/google-developers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Medium </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//twitter.com/googledevs" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Twitter </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//www.youtube.com/user/GoogleDevelopers" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > YouTube </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Programs</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//www.womentechmakers.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Women Techmakers </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//developers.google.com/community/gdg" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Google Developer Groups </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//developers.google.com/community/experts" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Google Developer Experts </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//developers.google.com/community/accelerators" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Accelerators </a> </li> </ul> </li> <li class="devsite-footer-linkbox "> <h3 class="devsite-footer-linkbox-heading no-link">Developer consoles</h3> <ul class="devsite-footer-linkbox-list"> <li class="devsite-footer-linkbox-item"> <a href="//console.developers.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 1)" > Google API Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.cloud.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 2)" > Google Cloud Platform Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//play.google.com/apps/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 3)" > Google Play Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.firebase.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 4)" > Firebase Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//console.actions.google.com" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 5)" > Actions on Google Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//cast.google.com/publish" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 6)" > Cast SDK Developer Console </a> </li> <li class="devsite-footer-linkbox-item"> <a href="//chrome.google.com/webstore/developer/dashboard" class="devsite-footer-linkbox-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Link (index 7)" > Chrome Web Store Dashboard </a> </li> </ul> </li> </ul> </nav> </devsite-footer-linkboxes> <devsite-footer-utility class="devsite-footer"> <div class="devsite-footer-utility nocontent"> <nav class="devsite-footer-sites" aria-label="Other Google Developers websites"> <a href="https://developers.google.com/" class="devsite-footer-sites-logo-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Developers Link"> <picture> <img class="devsite-footer-sites-logo" src="https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/images/lockup-google-for-developers.svg" loading="lazy" alt="Google Developers"> </picture> </a> <ul class="devsite-footer-sites-list"> <li class="devsite-footer-sites-item"> <a href="//developer.android.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Android Link" > Android </a> </li> <li class="devsite-footer-sites-item"> <a href="//developer.chrome.com/home" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Chrome Link" > Chrome </a> </li> <li class="devsite-footer-sites-item"> <a href="//firebase.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Firebase Link" > Firebase </a> </li> <li class="devsite-footer-sites-item"> <a href="//cloud.google.com" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer Google Cloud Platform Link" > Google Cloud Platform </a> </li> <li class="devsite-footer-sites-item"> <a href="//developers.google.com/products" class="devsite-footer-sites-link gc-analytics-event" data-category="Site-Wide Custom Events" data-label="Footer All products Link" > All products </a> </li> </ul> </nav> <nav class="devsite-footer-utility-links" aria-label="Utility links"> <ul class="devsite-footer-utility-list"> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//developers.google.com/terms/site-terms" data-category="Site-Wide Custom Events" data-label="Footer Terms link" > Terms </a> </li> <li class="devsite-footer-utility-item "> <a class="devsite-footer-utility-link gc-analytics-event" href="//policies.google.com/privacy" data-category="Site-Wide Custom Events" data-label="Footer Privacy link" > Privacy </a> </li> <li class="devsite-footer-utility-item glue-cookie-notification-bar-control"> <a class="devsite-footer-utility-link gc-analytics-event" href="#" data-category="Site-Wide Custom Events" data-label="Footer Manage cookies link" aria-hidden="true" > Manage cookies </a> </li> <li class="devsite-footer-utility-item devsite-footer-utility-button"> <span class="devsite-footer-utility-description">Sign up for the Google Developers newsletter</span> <a class="devsite-footer-utility-link gc-analytics-event" href="//services.google.com/fb/forms/googledevelopersnewsletter/?utm_medium=referral&amp;utm_source=google-products&amp;utm_team=googledevs&amp;utm_campaign=201611-newsletter-launch" data-category="Site-Wide Custom Events" data-label="Footer Subscribe link" > Subscribe </a> </li> </ul> <devsite-language-selector> <ul role="presentation"> <li role="presentation"> <a role="menuitem" lang="en" >English</a> </li> <li role="presentation"> <a role="menuitem" lang="de" >Deutsch</a> </li> <li role="presentation"> <a role="menuitem" lang="es" >Español</a> </li> <li role="presentation"> <a role="menuitem" lang="es_419" >Español – América Latina</a> </li> <li role="presentation"> <a role="menuitem" lang="fr" >Français</a> </li> <li role="presentation"> <a role="menuitem" lang="id" >Indonesia</a> </li> <li role="presentation"> <a role="menuitem" lang="it" >Italiano</a> </li> <li role="presentation"> <a role="menuitem" lang="pl" >Polski</a> </li> <li role="presentation"> <a role="menuitem" lang="pt_br" >Português – Brasil</a> </li> <li role="presentation"> <a role="menuitem" lang="vi" >Tiếng Việt</a> </li> <li role="presentation"> <a role="menuitem" lang="tr" >Türkçe</a> </li> <li role="presentation"> <a role="menuitem" lang="ru" >Русский</a> </li> <li role="presentation"> <a role="menuitem" lang="he" >עברית</a> </li> <li role="presentation"> <a role="menuitem" lang="ar" >العربيّة</a> </li> <li role="presentation"> <a role="menuitem" lang="fa" >فارسی</a> </li> <li role="presentation"> <a role="menuitem" lang="hi" >हिंदी</a> </li> <li role="presentation"> <a role="menuitem" lang="bn" >বাংলা</a> </li> <li role="presentation"> <a role="menuitem" lang="th" >ภาษาไทย</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_cn" >中文 – 简体</a> </li> <li role="presentation"> <a role="menuitem" lang="zh_tw" >中文 – 繁體</a> </li> <li role="presentation"> <a role="menuitem" lang="ja" >日本語</a> </li> <li role="presentation"> <a role="menuitem" lang="ko" >한국어</a> </li> </ul> </devsite-language-selector> </nav> </div> </devsite-footer-utility> <devsite-panel></devsite-panel> </section></section> <devsite-sitemask></devsite-sitemask> <devsite-snackbar></devsite-snackbar> <devsite-tooltip ></devsite-tooltip> <devsite-heading-link></devsite-heading-link> <devsite-analytics> <script type="application/json" analytics>[]</script> <script type="application/json" tag-management>{&#34;at&#34;: &#34;True&#34;, &#34;ga4&#34;: [], &#34;ga4p&#34;: [], &#34;gtm&#34;: [], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;False&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;codelab&#34;, &#34;projectName&#34;: null, &#34;signedIn&#34;: &#34;False&#34;, &#34;tenant&#34;: &#34;codelabs&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script> </devsite-analytics> <devsite-badger></devsite-badger> <script nonce="Y7OKQnaQW9I5BtcHHpE+DvCjMZNS3d"> (function(d,e,v,s,i,t,E){d['GoogleDevelopersObject']=i; t=e.createElement(v);t.async=1;t.src=s;E=e.getElementsByTagName(v)[0]; E.parentNode.insertBefore(t,E);})(window, document, 'script', 'https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/js/app_loader.js', '[17,"en",null,"/js/devsite_app_module.js","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs","https://codelabs-dot-devsite-v2-prod.appspot.com",1,null,["/_pwa/codelabs/manifest.json","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/images/video-placeholder.svg","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/images/favicon.png","https://www.gstatic.com/devrel-devsite/prod/v38a693baeb774512feb42f10aac8f755d8791ed41119b5be7a531f8e16f8279f/codelabs/images/lockup.svg","https://fonts.googleapis.com/css?family=Google+Sans:400,500|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&display=swap"],1,null,[1,6,8,12,14,17,21,25,50,52,63,70,75,76,80,87,91,92,93,97,98,100,101,102,103,104,105,107,108,109,110,112,113,116,117,118,120,122,124,125,126,127,129,130,131,132,133,134,135,136,138,140,141,147,148,149,151,152,156,157,158,159,161,163,164,168,169,170,179,180,182,183,186,191,193,196],"AIzaSyAP-jjEJBzmIyKR4F-3XITp8yM9T1gEEI8","AIzaSyB6xiKGDR5O3Ak2okS4rLkauxGUG7XP0hg","codelabs.developers.google.com","AIzaSyAQk0fBONSGUqCNznf6Krs82Ap1-NV6J4o","AIzaSyCCxcqdrZ_7QMeLCRY20bh_SXdAYqy70KY",null,null,null,["MiscFeatureFlags__enable_project_variables","DevPro__enable_cloud_innovators_plus","Search__enable_ai_eligibility_checks","Profiles__enable_release_notes_notifications","Profiles__enable_completequiz_endpoint","Cloud__enable_cloudx_ping","Cloud__enable_cloud_shell_fte_user_flow","Analytics__enable_clearcut_logging","EngEduTelemetry__enable_engedu_telemetry","MiscFeatureFlags__developers_footer_image","MiscFeatureFlags__enable_view_transitions","Profiles__enable_awarding_url","Cloud__enable_cloud_facet_chat","TpcFeatures__enable_mirror_tenant_redirects","Profiles__enable_complete_playlist_endpoint","MiscFeatureFlags__enable_explain_this_code","Profiles__enable_completecodelab_endpoint","BookNav__enable_tenant_cache_key","Profiles__enable_dashboard_curated_recommendations","CloudShell__cloud_shell_button","Cloud__enable_cloudx_experiment_ids","Cloud__enable_llm_concierge_chat","Profiles__enable_public_developer_profiles","Cloud__enable_cloud_dlp_service","DevPro__enable_developer_subscriptions","Profiles__require_profile_eligibility_for_signin","Cloud__enable_legacy_calculator_redirect","Profiles__enable_profile_collections","MiscFeatureFlags__developers_footer_dark_image","Profiles__enable_recognition_badges","MiscFeatureFlags__enable_firebase_utm","Search__enable_dynamic_content_confidential_banner","TpcFeatures__enable_unmirrored_page_left_nav","Profiles__enable_stripe_subscription_management","Cloud__enable_free_trial_server_call","Concierge__enable_pushui","Search__enable_suggestions_from_borg","Experiments__reqs_query_experiments","Search__enable_page_map","Profiles__enable_developer_profiles_callout","Profiles__enable_page_saving","MiscFeatureFlags__enable_variable_operator","Profiles__enable_join_program_group_endpoint","MiscFeatureFlags__emergency_css","Cloud__enable_cloud_shell","CloudShell__cloud_code_overflow_menu"],null,null,"AIzaSyBLEMok-5suZ67qRPzx0qUtbnLmyT_kCVE","https://developerscontentserving-pa.clients6.google.com","AIzaSyCM4QpTRSqP5qI4Dvjt4OAScIN8sOUlO-k","https://developerscontentsearch-pa.clients6.google.com",1,4,null,"https://developerprofiles-pa.clients6.google.com",[17,"codelabs","Google Codelabs","codelabs.developers.google.com",null,"codelabs-dot-devsite-v2-prod.appspot.com",null,null,[null,1,null,null,null,null,null,null,null,null,null,[1],null,null,null,null,null,null,[1],null,null,null,null,[1]],null,[33,null,null,null,null,null,"/images/lockup.svg",null,null,null,null,1,1,null,null,null,null,null,null,null,null,1,null,null,null,null,[]],[],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[6,1,14,15,20,22,23,29,32,36],null,[[],[1,1]],[[null,null,null,null,null,null,null,null,null,null,null,null,1]],null,4],null,"pk_live_5170syrHvgGVmSx9sBrnWtA5luvk9BwnVcvIi7HizpwauFG96WedXsuXh790rtij9AmGllqPtMLfhe2RSwD6Pn38V00uBCydV4m",1]') </script> <devsite-a11y-announce></devsite-a11y-announce> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10