<br />

Network tracing lets you see network activities relating to the Google Mobile
Ads SDK. This can be useful in debugging your Google Mobile Ads implementation.

A key reason to use network tracing instead of tools such as [Charles
Proxy](https://www.charlesproxy.com) is that it works with **all** versions of
Android and devices running a supported version of Google play services. This
isn't the case with proxying tools due to changes in
[trusted CAs and certificates in place since Android 7.0](https://developer.android.com/about/versions/nougat/android-7.0#default_trusted_ca).

This guide explains how to enable network tracing for debugging purposes.

## Enable tracing

To enable network tracing, [enable developer
options](https://developer.android.com/studio/debug/dev-options) for your device.
Then, launch the **Google Settings** app and select the **Ads** option:

![](https://developers.google.com/static/admob/images/google_settings.png)

Assuming you have developer options enabled and the feature is available, your
screen would then look like this:

![](https://developers.google.com/static/admob/images/ads_settings.png)

Select the **Enable debug logging for ads** option to bring up following dialog:

![](https://developers.google.com/static/admob/images/enable_logging.png)

Tap **OK** and you're then presented with an advertising identifier that ends
with `10ca1ad1abe1`:

![](https://developers.google.com/static/admob/images/logging_enabled.png)

You are now able to see all the output from the network logging in logcat. To
filter only Information-level Ads output to both the screen and a file, issue
the following command:

```bash
adb logcat '*:S' Ads:I Ads-cont:I | tee logs.txt
```

## Output

Standard platform-appropriate console logs are used to output the network logs.

Console log messages always begin with the string `GMA Debug BEGIN`,
`GMA Debug CONTENT`, or `GMA Debug FINISH`, so you can search or filter on these
strings. For each network log, the first log message is `GMA Debug BEGIN`,
the last log message is `GMA Debug FINISH`, and the network log content begins
with `GMA Debug CONTENT`. If content is too long to fit on a line, it is split
among multiple lines, each line beginning with `GMA Debug CONTENT`.

### Console output example

    I/Ads     ( 4660): GMA Debug BEGIN
    I/Ads     ( 4660): GMA Debug CONTENT {"timestamp":1510679993741,...}
    I/Ads     ( 4660): GMA Debug FINISH

## JSON output example

Here are some samples of JSON output from logcat:

### onNetworkRequest

```json
{
  "timestamp": 1510679994904,
  "event": "onNetworkRequest",
  "components": [
    "ad_request_cf5ab185-3c3f-4f01-9f56-33da2ae110f2",
    "network_request_6553bc32-1d44-4f18-9dd0-5c183abbeb90"
  ],
  "params": {
    "firstline": {
      "uri": "http://googleads.g.doubleclick.net/pagead/ads?carrier=....",
      "verb": "GET"
    },
    "headers": [
      {
        "name": "User-Agent",
        "value": "Mozilla/5.0 (Linux; Android 5.0.2;..."
      }
    ]
  }
}
```

### onNetworkResponse

```json
{
  "timestamp": 1510679995295,
  "event": "onNetworkResponse",
  "components": [
    "ad_request_cf5ab185-3c3f-4f01-9f56-33da2ae110f2",
    "network_request_6553bc32-1d44-4f18-9dd0-5c183abbeb90"
  ],
  "params": {
    "firstline": {
      "code": 200
    },
    "headers": [
      {
        "name": null,
        "value": "HTTP/1.1 200 OK"
      },
      {
        "name": "X-Google-DOS-Service-Trace",
        "value": "main:pagead"
      },
      {
        "name": "Content-Type",
        "value": "text/html; charset=UTF-8"
      },
      ...
    ]
  }
}
```

### onNetworkResponseBody

```json
{
  "timestamp": 1510679995375,
  "event": "onNetworkResponseBody",
  "components": [
    "ad_request_cf5ab185-3c3f-4f01-9f56-33da2ae110f2",
    "network_request_6553bc32-1d44-4f18-9dd0-5c183abbeb90"
  ],
  "params": {
    "bodydigest": "B2520049D02F3C70A12AD1BC0D1B58A4",
    "bodylength": 122395
  }
}
```