Integrate the WebView API for Ads
Stay organized with collections
Save and categorize content based on your preferences.
The WebView API for Ads allows in-app ad monetization using WebViewController
.
If you display web content that implements ads with AdSense code
or Google Publisher Tag
in your app through WebViewController
, you should use this API to enable ads
monetization. To learn more, see the AdSense
and Ad Manager
policies.

-
- Monetize by making ad requests with Google Mobile Ads SDK
-
You can monetize your app by making ad requests to
Ad Manager with
Google Mobile Ads SDK by implementing ad formats for mobile
app
.
Learn more
.
-
- Monetize by using the WebView API for Ads
-
If your app uses WebViewController
to display web content that serves ads from Ad Manager
or AdSense
, use the WebView API for Ads to register WebViewController
objects with Google Mobile Ads SDK. The
JavaScript in the AdSense code
or Google Publisher Tag
builds and sends ad requests so you don't need to make any ad requests with
the SDK. Keep in mind that only the mobile web and desktop web inventory formats
are available using this API.
If you don't own the web content in a WebViewController
, you are still
encouraged to use this API to help protect advertisers from spam and
improve monetization for the web publishers that provided the content.
Note that you can do either option, or even both, in the same app.
This guide is intended to help you integrate the WebView API for Ads into your
iOS app.
Before you begin
Before you start using the WebView API for Ads, make sure you do the following:
Bypass the check for application identifier
Android
Add the following <meta-data>
tag in your AndroidManifest.xml
file to
bypass the check for the APPLICATION_ID
. If you miss this step,
Google Mobile Ads SDK might throw an IllegalStateException
on app start.
<!-- Bypass APPLICATION_ID check for WebView API for Ads -->
<meta-data
android:name="com.google.android.gms.ads.INTEGRATION_MANAGER"
android:value="webview"/>
iOS
Update the Runner/Info.plist
file with the key and string value below to
bypass a check for the GADApplicationIdentifier
. If you miss this step,
Google Mobile Ads SDK might throw a GADInvalidInitializationException
on app start.
<!-- Bypass GADApplicationIdentifier check for WebView API for Ads -->
<key>GADIntegrationManager</key>
<string>webview</string>
Register the WebViewController
To improve in-app ad monetization of ads within a WebViewController
that uses AdSense
code
or Google Publisher
Tags
, follow the steps
listed below:
-
Enable JavaScript in the WebViewController
. Failure to do so can cause
ads not to load.
-
To improve your users' ad experience and be consistent with Chrome's cookie policy
, enable
third-party cookies on your AndroidWebViewController
instance.
-
Register the WebViewController
instance by calling the registerWebView()
method provided by Google Mobile Ads SDK.
import
'package:google_mobile_ads/google_mobile_ads.dart'
;
import
'package:webview_flutter/webview_flutter.dart'
;
import
'package:webview_flutter_android/webview_flutter_android.dart'
;
@override
class
WebViewExampleState
extends
State<WebViewExample>
{
late
final
WebViewController
controller
;
@override
void
initState
()
{
super
.
initState
();
createWebView
();
}
void
createWebView
()
async
{
controller
=
WebViewController
();
// 1. Enable JavaScript in the web view.
await
controller
.
setJavaScriptMode
(
JavaScriptMode
.
unrestricted
);
// 2. Enable third-party cookies for Android.
if
(
controller
.
platform
is
AndroidWebViewController
)
{
AndroidWebViewCookieManager
cookieManager
=
AndroidWebViewCookieManager
(
const
PlatformWebViewCookieManagerCreationParams
());
await
cookieManager
.
setAcceptThirdPartyCookies
(
controller
.
platform
as
AndroidWebViewController
,
true
);
}
// 3. Register the web view.
await
MobileAds
.
instance
.
registerWebView
(
controller
);
}
}
Load the URL
You can now load a URL and display your web content through WebViewController
.
We recommend that you load this test URL: https://google.github.io/webview-ads/test/
to test the integration prior to
using your own URL. The web page will show an error if JavaScript is not
enabled.
import
'package:google_mobile_ads/google_mobile_ads.dart'
;
import
'package:webview_flutter/webview_flutter.dart'
;
import
'package:webview_flutter_android/webview_flutter_android.dart'
;
@override
class
WebViewExampleState
extends
State<WebViewExample>
{
late
final
WebViewController
controller
;
@override
void
initState
()
{
super
.
initState
();
createWebView
();
}
void
createWebView
()
async
{
controller
=
WebViewController
();
// 1. Enable JavaScript in the web view.
await
controller
.
setJavaScriptMode
(
JavaScriptMode
.
unrestricted
);
// 2. Enable third-party cookies for Android.
if
(
controller
.
platform
is
AndroidWebViewController
)
{
AndroidWebViewCookieManager
cookieManager
=
AndroidWebViewCookieManager
(
const
PlatformWebViewCookieManagerCreationParams
());
await
cookieManager
.
setAcceptThirdPartyCookies
(
controller
.
platform
as
AndroidWebViewController
,
true
);
}
// 3. Register the web view.
await
MobileAds
.
instance
.
registerWebView
(
controller
);
// 4. Load the URL.
await
controller
.
loadRequest
(
Uri
.
parse
(
'https://google.github.io/webview-ads/test/'
));
}
The test URL shows green status bars for a successful integration if the
following conditions apply:
-
WebView
connected to the Google Mobile Ads SDK
- JavaScript enabled
- Third-party cookies work (not expected on iOS devices)
- First-party cookies work
View the source code
of our test URL. You can then replace the test URL with your URL. You can also
use a proxy tool such as Charles
to capture your
app's HTTPS traffic and inspect the ad requests for a &scar=
parameter.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License
, and code samples are licensed under the Apache 2.0 License
. For details, see the Google Developers Site Policies
. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-09-04 UTC.
[[["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"]],["Last updated 2025-09-04 UTC."],[[["\u003cp\u003eThe WebView API for Ads enables in-app ad monetization within web content displayed using \u003ccode\u003eWebViewController\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eRegister your \u003ccode\u003eWebViewController\u003c/code\u003e with the Google Mobile Ads SDK to enable this functionality.\u003c/p\u003e\n"],["\u003cp\u003eEnsure JavaScript and third-party cookies (for Android) are enabled in your \u003ccode\u003eWebViewController\u003c/code\u003e for optimal ad serving.\u003c/p\u003e\n"],["\u003cp\u003eYou can monetize ads served from Ad Manager or AdSense within your web content using this API.\u003c/p\u003e\n"],["\u003cp\u003eTest your integration using the provided test URL before deploying to production.\u003c/p\u003e\n"]]],["The WebView API enables in-app ad monetization for web content using `WebViewController` with AdSense code or Google Publisher Tags. Key actions include registering `WebViewController` objects with the Google Mobile Ads SDK via `registerWebView()`, enabling JavaScript, and allowing third-party cookies on Android. Ensure your app uses the correct SDK and dependencies and add metadata to bypass identifier checks. Load a test URL to verify the integration before using your own. Both the Mobile Ads SDK and WebView API methods are available for monetization.\n"],null,["The WebView API for Ads allows in-app ad monetization using\n[`WebViewController`](//pub.dev/documentation/webview_flutter/latest/webview_flutter/WebViewController-class.html).\nIf you display web content that implements ads with\n[AdSense code](//support.google.com/adsense/answer/9274634) or\n[Google Publisher Tag](//support.google.com/admanager/answer/181073)\nin your app through `WebViewController`, you should use this API to enable ads\nmonetization. To learn more, see the\n\n[AdSense](//support.google.com/adsense/answer/48182#trs)\nand [Ad Manager](//support.google.com/admanager/answer/6310245) policies.\n\n\n1.\n\n Monetize by making ad requests with Google Mobile Ads SDK\n\n : You can monetize your app by making ad requests to\n\n Ad Manager with\n Google Mobile Ads SDK by implementing [ad formats for mobile\n app](//support.google.com/admanager/answer/6238696).\n\n\n [Learn more](/ad-manager/mobile-ads-sdk/flutter/quick-start).\n2.\n\n Monetize by using the WebView API for Ads\n\n : If your app uses `WebViewController` to display web content that serves ads from\n [Ad Manager](//support.google.com/admanager) or\n [AdSense](//support.google.com/adsense), use the WebView API for Ads to register\n `WebViewController` objects with Google Mobile Ads SDK. The\n JavaScript in the [AdSense code](//support.google.com/adsense/answer/9274634)\n or [Google Publisher Tag](//support.google.com/admanager/answer/181073)\n builds and sends ad requests so you don't need to make any ad requests with\n the SDK. Keep in mind that only the mobile web and desktop web\n [inventory formats](//support.google.com/admanager/answer/9796545)\n are available using this API.\n\n If you don't own the web content in a `WebViewController`, you are still\n encouraged to use this API to help protect advertisers from spam and\n improve monetization for the web publishers that provided the content.\n\nNote that you can do either option, or even both, in the same app.\n\nThis guide is intended to help you integrate the WebView API for Ads into your\niOS app.\n\nBefore you begin\n\nBefore you start using the WebView API for Ads, make sure you do the following:\n\n- Use [Google Mobile Ads SDK for Flutter plugin](/ad-manager/mobile-ads-sdk/flutter/quick-start#import_the_mobile_ads_sdk) with version 3.0.0 or higher in your app.\n- Add [`webview_flutter`](//pub.dev/packages/webview_flutter) as a dependency in your `pubspec.yaml` file.\n- Add [`webview_flutter_android`](//pub.dev/packages/webview_flutter_android) with version 3.7.0 or higher in your app.\n\nBypass the check for application identifier \n\nAndroid\n\nAdd the following `\u003cmeta-data\u003e` tag in your `AndroidManifest.xml` file to\nbypass the check for the `APPLICATION_ID`. If you miss this step,\nGoogle Mobile Ads SDK might throw an\n[`IllegalStateException`](//developer.android.com/reference/java/lang/IllegalStateException)\non app start. \n\n \u003c!-- Bypass APPLICATION_ID check for WebView API for Ads --\u003e\n \u003cmeta-data\n android:name=\"com.google.android.gms.ads.INTEGRATION_MANAGER\"\n android:value=\"webview\"/\u003e\n\niOS\n\nUpdate the `Runner/Info.plist` file with the key and string value below to\nbypass a check for the `GADApplicationIdentifier`. If you miss this step,\nGoogle Mobile Ads SDK might throw a `GADInvalidInitializationException`\non app start. \n\n \u003c!-- Bypass GADApplicationIdentifier check for WebView API for Ads --\u003e\n \u003ckey\u003eGADIntegrationManager\u003c/key\u003e\n \u003cstring\u003ewebview\u003c/string\u003e\n\nRegister the WebViewController\n\nTo improve in-app ad monetization of ads within a\n`WebViewController` that uses [AdSense\ncode](//support.google.com/adsense/answer/9274634) or [Google Publisher\nTags](//support.google.com/admanager/answer/181073), follow the steps\nlisted below:\n\n1. Enable JavaScript in the `WebViewController`. Failure to do so can cause\n ads not to load.\n\n2. To improve your users' ad experience and be consistent with Chrome's\n [cookie policy](//policies.google.com/technologies/cookies), enable\n third-party cookies on your `AndroidWebViewController` instance.\n\n3. Register the `WebViewController` instance by calling the\n [`registerWebView()`](//pub.dev/documentation/google_mobile_ads/latest/google_mobile_ads/MobileAds/registerWebView.html)\n method provided by Google Mobile Ads SDK.\n\n import 'package:google_mobile_ads/google_mobile_ads.dart';\n import 'package:webview_flutter/webview_flutter.dart';\n import 'package:webview_flutter_android/webview_flutter_android.dart';\n\n @override\n class WebViewExampleState extends State\u003cWebViewExample\u003e {\n late final WebViewController controller;\n\n @override\n void initState() {\n super.initState();\n\n createWebView();\n }\n\n void createWebView() async {\n controller = WebViewController();\n // 1. Enable JavaScript in the web view.\n await controller.setJavaScriptMode(JavaScriptMode.unrestricted);\n // 2. Enable third-party cookies for Android.\n if (controller.platform is AndroidWebViewController) {\n AndroidWebViewCookieManager cookieManager = AndroidWebViewCookieManager(\n const PlatformWebViewCookieManagerCreationParams());\n await cookieManager.setAcceptThirdPartyCookies(\n controller.platform as AndroidWebViewController, true);\n }\n // 3. Register the web view.\n await MobileAds.instance.registerWebView(controller);\n }\n }\n\nLoad the URL\n\nYou can now load a URL and display your web content through `WebViewController`.\nWe recommend that you load this test URL:\n`https://google.github.io/webview-ads/test/` to test the integration prior to\nusing your own URL. The web page will show an error if JavaScript is not\nenabled. \n\n import 'package:google_mobile_ads/google_mobile_ads.dart';\n import 'package:webview_flutter/webview_flutter.dart';\n import 'package:webview_flutter_android/webview_flutter_android.dart';\n\n @override\n class WebViewExampleState extends State\u003cWebViewExample\u003e {\n late final WebViewController controller;\n\n @override\n void initState() {\n super.initState();\n\n createWebView();\n }\n\n void createWebView() async {\n controller = WebViewController();\n // 1. Enable JavaScript in the web view.\n await controller.setJavaScriptMode(JavaScriptMode.unrestricted);\n\n // 2. Enable third-party cookies for Android.\n if (controller.platform is AndroidWebViewController) {\n AndroidWebViewCookieManager cookieManager = AndroidWebViewCookieManager(\n const PlatformWebViewCookieManagerCreationParams());\n await cookieManager.setAcceptThirdPartyCookies(\n controller.platform as AndroidWebViewController, true);\n }\n\n // 3. Register the web view.\n await MobileAds.instance.registerWebView(controller);\n\n // 4. Load the URL.\n await controller.loadRequest(Uri.parse('https://google.github.io/webview-ads/test/'));\n }\n\nThe test URL shows green status bars for a successful integration if the\nfollowing conditions apply:\n\n- `WebView` connected to the Google Mobile Ads SDK\n- JavaScript enabled\n- Third-party cookies work (not expected on iOS devices)\n- First-party cookies work\n\nView the [source code](//github.com/google/webview-ads/blob/main/test/index.html)\nof our test URL. You can then replace the test URL with your URL. You can also\nuse a proxy tool such as [Charles](//www.charlesproxy.com/) to capture your\napp's HTTPS traffic and inspect the ad requests for a `&scar=` parameter."]]