Set Up Google Maps
Configure react-native-maps with a Google Maps API key on iOS and Android, and restrict the key so it cannot be abused.
This guide covers adding react-native-maps to a React Native app with a Google Maps API key on Android, and the iOS alternative.
Quick Answer
Create a Google Cloud API key with the Maps SDK for Android (and Maps SDK for iOS, if used) enabled, restrict it by package name/SHA-1 or bundle ID, place it in your Android manifest (or app.json for Expo), enable billing on the project, and confirm the map actually renders on a real device or emulator.
1. iOS Can Skip This Entirely
react-native-maps defaults to Apple Maps on iOS, which needs no API key at all. You only need a Google key on iOS if you specifically want Google's map provider there too.
2. Create and Restrict the API Key
In Google Cloud Console → APIs & Services → Credentials, create an API key, then immediately restrict it:
- enable only Maps SDK for Android (and Maps SDK for iOS if needed);
- restrict the key to your app's package name and SHA-1 signing fingerprint (see Add Google Sign-In for how to get the fingerprint).
An unrestricted key embedded in a shipped app can be extracted and used by anyone against your billing.
3. Enable Billing
Maps SDK requires a billing account attached to the Google Cloud project, even though Google provides a monthly free usage credit. The map will not render, and you'll see a "For development purposes only" watermark or a blank grey tile, until billing is enabled.
4. Add the Key to Your App
Expo: in app.json, under android.config.googleMaps.apiKey.
Bare React Native: in android/app/src/main/AndroidManifest.xml, inside the <application> tag:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_KEY_HERE" />
Common Issues
Grey/blank map on Android almost always one of: the key is missing, Maps SDK for Android isn't enabled on the key, or billing isn't enabled on the project.
Map works on iOS but not Android expected if you haven't configured a Google key; iOS uses Apple Maps by default and doesn't need one.
Unexpected billing charges the key wasn't restricted, and something (or someone) outside your app is using it. Restrict by package name and fingerprint immediately.
Map renders in debug but not in a release build the release signing key's SHA-1 fingerprint wasn't added to the key's Android restriction; debug and release use different signing keys.
Verification Checklist
- the API key has only the specific Maps SDKs you use enabled;
- the key is restricted by package name and SHA-1 fingerprint (both debug and release);
- billing is enabled on the Google Cloud project;
- the map renders correctly on both a debug and a release Android build.