集成适用于广告的 WebView API

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

WebView API for Ads 支持使用 WebView 在应用内实现广告创收。如果您通过 WebView 在应用中展示植入了 AdSense 代码Google 发布商代码的广告的网络内容,则应使用此 API 来启用广告创收。如需了解详情,请参阅AdMob 政策

  1. 通过 Google 移动广告 SDK 发出广告请求,从而创收

    通过实现适用于移动应用的广告格式,您可以利用 Google 移动广告 SDK 向 AdMob 发出广告请求,从而通过应用创收。

    了解详情

  2. 使用 WebView API for Ads 创收

    如果您的应用使用 WebView 显示用于投放来自 Ad ManagerAdSense 广告的网页内容,请使用 WebView API for Ads 向 Google 移动广告 SDK 注册 WebView 对象。AdSense 代码Google 发布商代码中的 JavaScript 负责构建并发送广告请求,因此您无需使用 SDK 发出任何广告请求。 请注意,只有移动网站和桌面版网站广告资源格式才可使用此 API。

    如果您不是 WebView 中的网页内容的所有者,我们仍建议您使用此 API 帮助广告客户防范垃圾内容,并提高提供相应内容的网站发布商的创收能力。

请注意,您可以在同一应用中执行这两种操作,也可以同时采用这两种方式。

本指南旨在帮助您将 WebView API for Ads 集成到 Android 应用中。

前提条件

  • Google 移动广告 SDK 20.6.0 或更高版本
  • Android API 级别 21 或更高级别
  • AndroidManifest.xml 文件中添加以下 <meta-data> 标记,以绕过对 APPLICATION_ID 的检查。如果您缺少此步骤,Google 移动广告 SDK 可能会在应用启动时抛出 IllegalStateException

    <!-- Bypass APPLICATION_ID check for WebView API for Ads -->
      <meta-data
          android:name="com.google.android.gms.ads.INTEGRATION_MANAGER"
          android:value="webview"/>
    

将 WebView 添加到布局

如需在 activity 中显示网页内容,您可以将 WebView 放在相应的 XML 布局文件中。以下示例展示了 activity 的 WebView

# activity_main.xml
...
<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
/>
...

或者,您可以通过编程方式创建 WebView

Java

WebView webView = new WebView(this);

Kotlin

var webView: WebView? = WebView(this)

启用第三方 Cookie

为了提升用户的广告体验,并确保其与 Chrome 的 Cookie 政策保持一致,请在 WebView 实例上启用第三方 Cookie。

Java

CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);

Kotlin

CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true)

注册 WebView

使用该 API 的第一步是注册每个可以展示广告的 WebView。您需要使用 Google 移动广告 SDK 提供的 registerWebView() 方法,与每个 WebView 中的 AdSense 代码Google 发布商代码中的 JavaScript 处理程序建立连接:

  1. WebView 中启用 JavaScript。否则可能会导致下一步中的测试网页发生错误,并导致广告无法加载。
  2. 为获得最佳效果,请启用第三方 Cookie(请先注册您的 WebView)。
  3. 我们建议在完成所有涉及界面的任务后,在第一个网址加载完毕之前尽早调用 registerWebView()。以下示例展示了如何在 MainActivityonCreate() 方法中注册 WebView

    Java

    package ...
     
    import ...
    import android.webkit.CookieManager;
    import android.webkit.WebView;
    import com.google.android.gms.ads.MobileAds;
     
    public class MainActivity extends AppCompatActivity {
     private WebView webView;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       webView = findViewById(R.id.webview);
       // Enable JavaScript in the WebView.
       webView.getSettings().setJavaScriptEnabled(true);
       // Enable third-party cookies.
       CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
       ...
       // Register the WebView.
       MobileAds.registerWebView(webView);
       ...
     }
     ...
    }
    

    Kotlin

    package ...
     
    import ...
    import android.webkit.CookieManager
    import android.webkit.WebView
    import com.google.android.gms.ads.MobileAds
     
    class MainActivity : AppCompatActivity() {
     lateinit var webView: WebView
     
     override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)
       webView = findViewById(R.id.webview)
       // Enable JavaScript in the WebView.
       webView.settings.javaScriptEnabled = true
       // Enable third-party cookies.
       CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true)
       ...
       // Register the WebView.
       MobileAds.registerWebView(webView)
       ...
     }
     ...
    }

加载网址

您现在可以使用 loadUrl() 方法加载网址并通过 WebView 显示网页内容。我们建议您加载此测试网址 (https://webview-api-for-ads-test.glitch.me/),以便在使用您自己的网址之前测试集成。

Java

  package ...

  import ...
  import android.webkit.CookieManager;
  import android.webkit.WebView;
  import com.google.android.gms.ads.MobileAds;

  public class MainActivity extends AppCompatActivity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      webView = findViewById(R.id.webview);
      // Enable JavaScript in the WebView.
      webView.getSettings().setJavaScriptEnabled(true);
      // Enable third-party cookies.
      CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
      ...
      // Register the WebView.
      MobileAds.registerWebView(webView);
      webView.loadUrl("https://webview-api-for-ads-test.glitch.me/");
      ...
    }
    ...
  }

Kotlin

  package ...

  import ...
  import android.webkit.CookieManager
  import android.webkit.WebView
  import com.google.android.gms.ads.MobileAds

  class MainActivity : AppCompatActivity() {
    lateinit var webView: WebView

    override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      webView = findViewById(R.id.webview)
      // Enable JavaScript in the WebView.
      webView.settings.javaScriptEnabled = true
      // Enable third-party cookies.
      CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
      ...
      // Register the WebView.
      MobileAds.registerWebView(webView)
      webView.loadUrl("https://webview-api-for-ads-test.glitch.me/")
      ...
    }
    ...
  }

如果集成成功,应用会显示“WebView 与 GMA SDK 的集成已确认!”。然后,您可以使用自己的网址替换测试网址。