# Add a map to your mobile app The Metamaps SDK embeds maps in iOS, Android, and Flutter apps. Pass a `mapSlug` to display a map with search, spots, floor switching, and routes. Changes published from the admin console also reach the map in your app. ## Choose your platform | Platform | What the guide covers | Installation guide | |---|---|---| | iOS | Local Swift package, UIKit, Info.plist, and events | [iOS SDK](/developers/sdk/ios/) | | Android | Local Maven repository, Gradle, MapView, and events | [Android SDK](/developers/sdk/android/) | | Flutter | Path dependency, native setup, Widget, and Controller | [Flutter SDK](/developers/sdk/flutter/) | The installation guides use the same source documents as the public SDK. Read OS and toolchain requirements, installation code, permissions, and update instructions here. ## Display your first map 1. Get the SDK from the [public repository](https://github.com/boldright/Metamaps-SDK). 2. Follow your platform's guide to add dependencies and configure your app. 3. Set the published map's slug as `mapSlug`, then add the map view or widget to your screen. 4. Wait for the ready event before selecting a floor, showing a spot, or changing the destination. If the public URL is `https://metamaps.jp/d/example`, set `mapSlug` to `example`. You do not need an integration API key to display a published map. ## Current location with GPS If the map uses GPS for the current location, the map reads the device location when the user starts it, for example by tapping the location button. On iOS, the system asks for location permission the first time. On Android, declare `ACCESS_FINE_LOCATION` and `ACCESS_COARSE_LOCATION`. When the permission has not been granted yet, the map view asks your app through `permissionRequestHandler` (in Flutter, `onPermissionRequest`), and your app decides whether to show the system dialog; the SDK never shows it on its own. If the permission stays denied, the map view sends an error event whose `userAction` tells you what guidance to show. Check each platform's guide for the exact declarations. ## Voice input The map's search field and AI chat accept voice input. On iOS, add the microphone and speech recognition purpose strings; without them, the map hides its microphone button. On Android, declare `RECORD_AUDIO` to show the microphone button. When the user taps it before the permission is granted, the map view asks your app in the same way as for location; without a handler, the request is denied. Check each platform's guide for the exact declarations. ## Sharing, text size, and the voice guide - The map's share buttons open the system share sheet on both platforms. Your app needs no code for this. - The map's text keeps the same size regardless of the system font size setting, on both platforms. - The map's voice guide pauses when your app moves to the background or the screen locks, and does not resume on its own. Playing it in the background is planned for a later SDK version. ## Optional indoor positioning If a facility has installed beacons and enabled positioning in Metamaps, the SDK can show the user's location and accuracy circle. You do not need to enable positioning to display maps. Check each platform's guide for the required permission declarations and purpose strings. Positioning supports foreground use. It stops when the app moves to the background or the screen locks, and resumes when the app returns to the foreground. The public SDK also provides headless positioning for apps that use their own map UI. ## Initial view and map controls The [query parameter reference](/developers/sdk/query-parameters/) covers the initial floor, center, spot, and route. After the map is displayed, use the platform's `selectFloor`, `showSpot`, `setDestination`, and `setLanguage` methods as described in its guide. When the user opens a spot, the map adds a step to its history, as the web map does in a browser. Connect your app's back handling to the map's `canGoBack` and `goBack()` so that back closes that step first: on Android with an `OnBackPressedCallback`, and in Flutter with `PopScope`. The SDK does not register a back handler itself, so without this the Android back button closes your screen together with the map. On iOS, use them if your screen has its own back control. ## Distribution and releases Source code, samples, release tags, change history, and licenses are maintained in the [public SDK repository](https://github.com/boldright/Metamaps-SDK). Each installation guide includes an update workflow. Review the [changelog](https://github.com/boldright/Metamaps-SDK/blob/main/CHANGELOG.md) before updating the SDK.