---
title: Maps
description: A library that provides access to Google Maps on Android and Apple Maps on iOS.
sourceCodeUrl: https://github.com/expo/expo/tree/main/packages/expo-maps
packageName: expo-maps
platforms: ["ios", "android"]
iconUrl: /static/images/packages/expo-maps.png
isAlpha: true
hasVideoLink: true
---
> **important** **This library is currently in alpha and will frequently experience breaking changes.** It is not available in the Expo Go app – use [development builds](/develop/development-builds/introduction/) to try it out.
## Installation
<br />
## Configuration
Expo Maps provides access to the platform native map APIs on Android and iOS.
- **Apple Maps (available on only)**. No additional configuration is required to use it after installing this package.
- **Google Maps (available on only)**. While Google provides a Google Maps SDK for iOS, Expo Maps supports it exclusively on Android. If you want to use Google Maps on iOS, you can look into using an [alternative library](https://reactnative.directory/) or [writing your own](/modules/overview/).
### Google Cloud API setup
**Before you can use Google Maps on Android**, you need to register a Google Cloud API project, enable the Maps SDK for Android, and add the associated configuration to your Expo project.
> If you have already registered a project for another Google service on Android, such as Google Sign In, you enable the **Maps SDK for Android** on your project and jump to step 4.
<Step label="1">
**Register a Google Cloud API project and enable the Maps SDK for Android**
- Open your browser to the [Google API Manager](https://console.developers.google.com/apis) and create a project.
- Once it's created, go to the project and enable the **Maps SDK for Android**.
</Step>
<Step label="2">
**Copy your app's SHA-1 certificate fingerprint**
<Tabs>
<Tab label="For Google Play Store">
- **If you are deploying your app to the Google Play Store**, you'll need to [upload your app binary to Google Play console](/submit/android/) at least once. This is required for Google to generate your app signing credentials.
- Go to the **[Google Play Console](https://play.google.com/console) > (your app) > Release > Setup > App integrity > App Signing**.
- Copy the value of **SHA-1 certificate fingerprint**.
</Tab>
<Tab label="For development builds">
- If you have already created a [development build](/develop/development-builds/introduction/), your project will be signed using a debug keystore.
- After the build is complete, go to your [project's dashboard](https://expo.dev/accounts/[username]/projects/[project-name]), then, under **Project settings** > click **Credentials**.
- Under **Application Identifiers**, click your project's package name and under **Android Keystore** copy the value of **SHA-1 Certificate Fingerprint**.
</Tab>
</Tabs>
</Step>
<Step label="3">
**Create an API key**
- Go to [Google Cloud Credential manager](https://console.cloud.google.com/apis/credentials) and click **Create Credentials**, then **API Key**.
- In the modal, click **Edit API key**.
- Under **Key restrictions** > **Application restrictions**, choose **Android apps**.
- Under **Restrict usage to your Android apps**, click **Add an item**.
- Add your `android.package` from **app.json** (for example: `com.company.myapp`) to the package name field.
- Then, add the **SHA-1 certificate fingerprint's** value from step 2.
- Click **Done** and then click **Save**.
</Step>
<Step label="4">
**Add the API key to your project**
- Copy your **API Key** into your **app.json** under the `android.config.googleMaps.apiKey` field.
- Create a new development build, and you can now use the Google Maps API on Android with `expo-maps`.
</Step>
## Permissions
To display the user's location on the map, you need to declare and request location permission beforehand. You can configure this using the built-in [config plugin](/config-plugins/introduction/) if you use config plugins in your project ([EAS Build](/build/introduction) or `npx expo run:[android|ios]`). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect.
```json app.json
{
"expo": {
"plugins": [
[
"expo-maps",
{
"requestLocationPermission": true,
"locationPermission": "Allow $(PRODUCT_NAME) to use your location"
}
]
]
}
}
```
## Usage
```tsx
if (Platform.OS === 'ios') {
return ;
} else if (Platform.OS === 'android') {
return ;
} else {
return Maps are only available on Android and iOS;
}
}
```
## API
```js
// ApplesMaps.View and GoogleMaps.View are the React components
```
## Permissions
### Android
To show the user's location on the map, the `expo-maps` library requires the following permissions:
- `ACCESS_COARSE_LOCATION`: for approximate device location
- `ACCESS_FINE_LOCATION`: for precise device location
### iOS
The following usage description keys are used by this library: