---
title: Install with Expo
description: Install and configure React Native Google Mobile Ads in an Expo project using the config plugin and a development build.
---

**Start here: Expo + a development build.** This is the recommended install path for most apps.

This module contains custom native code and is **not** supported by Expo Go. You must use a
[development build](https://docs.expo.dev/develop/development-builds/introduction/) — typically with
[`expo-dev-client`](https://docs.expo.dev/develop/development-builds/introduction/) and/or
[EAS Build](https://docs.expo.dev/build/introduction/).

Bare React Native CLI projects: see [Install with React Native CLI](/installation/react-native).

## 1. Install the package

```bash
npx expo install react-native-google-mobile-ads
```

## 2. Configure your App IDs (config plugin)

Add the Expo config plugin to your `app.json`, `app.config.js`, or `app.config.ts`. For these
changes to take effect, rebuild native code and install the new build on your device (see
[Generate native projects](#4-generate-native-projects-prebuild-once) below).

Before you can display ads you must have a [Google AdMob account](https://apps.admob.com) and an
App ID for each platform — see [Configuration](/configuration) for where to find the App ID.

```json
// <project-root>/app.json
{
  "expo": {
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "androidAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx",
          "iosAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx"
        }
      ]
    ]
  }
}
```

Full plugin option reference: [Config plugin reference](/config-plugin).

<Info>
  **Single source for Expo App IDs:** put them on the config plugin only. You do **not** also need a
  root-level `react-native-google-mobile-ads` JSON block with `ios_app_id` / `android_app_id`. The
  plugin writes `GADApplicationIdentifier` / Android `APPLICATION_ID` during prebuild. A legacy
  build-script warning about a missing root `ios_app_id` or `android_app_id` can still appear; it is
  safe to ignore when the plugin already injected the IDs.
</Info>

## 3. Add a development client (`expo-dev-client` / EAS)

If you do not already have a development build workflow, install the Expo development client:

```bash
npx expo install expo-dev-client
```

Then create a development build — via EAS or a local prebuild + `run:*` — as described in the next
section.

## 4. Generate native projects (prebuild once)

After installing the module or changing plugin config, generate native projects **once**, then build
each platform:

```bash
npx expo prebuild

# iOS
npx expo run:ios

# Android
npx expo run:android
```

If you use EAS instead of local `run:*`, create a new development build (EAS runs prebuild as part of
the build):

```bash
npm install --global eas-cli

# Online
eas build --profile development

# Local
eas build --profile development --local
```

Re-run prebuild (or create a new EAS build) whenever you change App IDs or other plugin options.

## Enable SKAdNetwork to track conversions (iOS)

The Google Mobile Ads SDK supports conversion tracking using Apple's SKAdNetwork, which lets Google
and participating third-party buyers attribute an app install even when the IDFA is not available.
Add the advised
[SKAdNetwork identifiers](https://developers.google.com/admob/ios/3p-skadnetworks)
to your project as described below. Note that these identifiers are subject to change and should be
updated regularly.

```json
// <project-root>/app.json
{
  "expo": {
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "androidAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx",
          "iosAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx",
          "skAdNetworkItems": [
            "cstr6suwn9.skadnetwork",
            "4fzdc2evr5.skadnetwork",
            "2fnua5tdw4.skadnetwork",
            "ydx93a7ass.skadnetwork",
            "p78axxw29g.skadnetwork",
            "v72qych5uu.skadnetwork",
            "ludvb6z3bs.skadnetwork",
            "cp8zw746q7.skadnetwork",
            "3sh42y64q3.skadnetwork",
            "c6k4g5qg8m.skadnetwork",
            "s39g8k73mm.skadnetwork",
            "wg4vff78zm.skadnetwork",
            "3qy4746246.skadnetwork",
            "f38h382jlk.skadnetwork",
            "hs6bdukanm.skadnetwork",
            "mlmmfzh3r3.skadnetwork",
            "v4nxqhlyqp.skadnetwork",
            "wzmmz9fp6w.skadnetwork",
            "su67r6k2v3.skadnetwork",
            "yclnxrl5pm.skadnetwork",
            "t38b2kh725.skadnetwork",
            "7ug5zh24hu.skadnetwork",
            "gta9lk7p23.skadnetwork",
            "vutu7akeur.skadnetwork",
            "y5ghdn5j9k.skadnetwork",
            "v9wttpbfk9.skadnetwork",
            "n38lu8286q.skadnetwork",
            "47vhws6wlr.skadnetwork",
            "kbd757ywx3.skadnetwork",
            "9t245vhmpl.skadnetwork",
            "a2p9lx4jpn.skadnetwork",
            "22mmun2rn5.skadnetwork",
            "44jx6755aq.skadnetwork",
            "k674qkevps.skadnetwork",
            "4468km3ulz.skadnetwork",
            "2u9pt9hc89.skadnetwork",
            "8s468mfl3y.skadnetwork",
            "klf5c3l5u5.skadnetwork",
            "ppxm28t8ap.skadnetwork",
            "kbmxgpxpgc.skadnetwork",
            "uw77j35x4d.skadnetwork",
            "578prtvx9j.skadnetwork",
            "4dzt52r2t5.skadnetwork",
            "tl55sbb4fm.skadnetwork",
            "c3frkrj4fj.skadnetwork",
            "e5fvkxwrpn.skadnetwork",
            "8c4e2ghe7u.skadnetwork",
            "3rd42ekr43.skadnetwork",
            "97r2b46745.skadnetwork",
            "3qcr597p9d.skadnetwork"
          ]
        }
      ]
    ]
  }
}
```

## App Tracking Transparency (iOS)

Apple requires apps to display the App Tracking Transparency authorization request for accessing the
IDFA (leaving the choice to the user, whether to use personalized or non-personalized ads). Within
your project's configuration file, you have to provide a user tracking usage description:

```json
// <project-root>/app.json
{
  "expo": {
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "androidAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx",
          "iosAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx",
          "userTrackingUsageDescription": "This identifier will be used to deliver personalized ads to you."
        }
      ]
    ]
  }
}
```

See [Consent & privacy basics](/consent-basics) for how to request App Tracking Transparency
authorization at runtime.

## Optionally configure iOS static frameworks

This module does **not** require static frameworks for a normal Expo install. Use them only when
another dependency intentionally needs `use_frameworks! :linkage => :static`.

<Warning>
  Coexistence with React Native Firebase is covered on [Using with React Native
  Firebase](/firebase). Prefer RNFB's modern **dynamic + SPM** path there. Do **not** treat the
  snippet below as the React Native Firebase recipe (static alone with RNFB's default SPM mode fails
  at `pod install`).
</Warning>

On Expo, enable static frameworks with `expo-build-properties` only — you do **not** set the bare
Podfile global `$RNGoogleMobileAdsAsStaticFramework` (that flag is for [React Native
CLI](/installation/react-native#optionally-configure-ios-static-frameworks); the podspec defaults
to non-static unless overridden). [Follow the official `expo-build-properties`
instructions](https://docs.expo.dev/versions/latest/sdk/build-properties/) and merge:

```json
// <project-root>/app.json
{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "ios": {
            "useFrameworks": "static"
          }
        }
      ]
    ]
  }
}
```
