LogoLogo
CMSGitHubSupportBook a demo
  • Documentation
  • Academy
  • Help Center
  • Welcome
  • SDKS & Frameworks
    • Web
      • Getting Started
        • Prerequisites
          • MapsIndoors
          • Map Engine Provider
            • Option 1: Get your Mapbox Access Token
            • Option 2: Get your Google Maps API Keys​
          • Map Engine Setup
        • Getting Started: MapsIndoors
      • Map Visualization
        • Highlight, Hover and Select
        • Remove Labels from Buildings and Venues
        • Change Building Outline
        • Managing Collisions Based on Zoom Level
        • 3D Maps
          • Managing your 3D Maps
        • Base Map Styling - Google Maps
        • Managing feature visibility for Mapbox
      • Wayfinding
        • Directions
        • Directions Service
          • Tailoring the directions to your specific needs
        • Directions Renderer
          • Customizing the Route Animation
        • Multi-stop navigation
          • Custom Icons
        • User's Location as Point of Origin
      • Search
        • Search Operations
        • Searching
        • Using External ID, Geospatial Joins
        • Utilizing MapsIndoors Web Components and Other Searches
      • Map Management
      • Data Visualization
        • Display Heatmap Overlay
      • Other guides
        • Authentication
          • Single Sign-On
            • SSO Configuration
            • SSO Authorisation
          • 2-Factor Authentication
          • Password Reset
        • Application User Roles
        • Custom Properties
        • Display Language
        • Language
        • User Positioning
          • Show User's Location aka. Blue Dot
          • Using Cisco DNA Spaces
        • Working with Events
        • Turn Off Collisions Based on Zoom Level
        • Remove Labels from Buildings and Venues for Web
        • Synchronizing data for a subset of venues
        • Custom Floor Selector
      • Display Rules in Practice
      • Offline Data
      • Managing map visibility
    • Android
      • Getting Started
        • Prerequisites
        • Create a New Project
        • Show a Map
        • Create a Search Experience
        • Getting Directions
        • Enable Live Data
        • Integrating MapsIndoors into your own App
        • Migrating from V3 to V4
          • Migrating to Mapbox V11
      • Directions
        • Directions Service
        • Directions Renderer
          • User's Location as Point of Origin
        • Wayfinding Instructions
          • See Route Element Details
        • Using multi-stop navigation
      • Searching
        • Searching on a Map
        • Creating a Search Experience
      • Switching Solutions
      • Caching & Offline Data
      • Display Language
      • Displaying Objects
        • Application User Roles
        • Getting a Polygon from a Location
        • Location Clustering
        • Location Data Sources
        • Location Details
        • Turn Off Collisions Based on Zoom Level
        • Enabling and Disabling features on the map
      • Change Building Outline Color
      • Event Logging
      • Configuring a menu with AppConfig
      • Display Heatmap Overlay
      • Custom Properties
      • Custom Floor Selector
      • External IDs
      • User Positioning
        • Show User's Location aka. Blue Dot
        • Using Cisco DNA Spaces
        • Using Google Fused Location Provider
        • Using Indoor Atlas
        • Using CrowdConnected
      • Authentication
        • Single Sign-On
          • SSO Configuration
          • SSO Authorisation
        • 2-Factor Authentication
        • Password Reset
      • Display Rules in Practice
        • Label styling through Display Rules
      • Highlight and Select
    • iOS
      • Getting Started
        • Prerequisites
        • Set Up Your Environment
        • Display a Map
        • Search
        • Getting Directions
        • Migrating from v3 to v4
      • Directions
        • Directions Renderer
          • User's Location as Point of Origin
        • Wayfinding Instructions
          • See Route Element Details
        • Directions Service
        • Using multi-stop navigation
      • Searching
        • Searching on a Map
        • Creating a Search Experience
      • Caching & Offline Data
      • Displaying Objects
        • Application User Roles
        • Getting a Polygon from a Location
        • Location Details
        • Turn Off Collisions Based on Zoom Level
        • Enabling and Disabling features on the map
      • Custom Floor Selector
      • Change Building Outline Color
      • Custom Map Padding
      • Custom Properties
      • Display Rules in Practice
        • Label styling through Display Rules
      • Switching Solutions
      • Show User's Location aka. Blue Dot
        • Using Indoor Atlas
        • Using Cisco DNA Spaces
        • Using CrowdConnected
      • Highlight and Select
      • Display Language
    • React Native
      • Getting Started
        • Prerequisites
        • Project Setup
        • Displaying a Map
        • Creating a Search Experience
        • Getting Directions
        • Enabling Live Data
      • Showing Blue Dot
    • Flutter
      • Getting Started
        • Prerequisites
        • Create a New Project
        • Show a Map
        • Create a Search Experience
        • Getting Directions
      • Migration Guide
    • Integration API
      • Integration API Access
        • Access with Swagger
        • Access with Postman
        • Access with Python
        • Client credentials flow
      • Data Description
      • Reverse Geocoding
      • Route Access
      • OpenAPI Specification
    • Built-In Map Edits
      • Getting started
      • Authentication
      • Release notes
      • Reference docs
  • Products
    • Product Overview
    • CMS
      • Interface Overview
      • Display Rules
      • Location Types
      • Categories
      • Media Library
        • 2D Models and Icons
        • 3D Models
      • Editing Data
      • Solution Settings
      • Settings
      • Data Concepts
      • User Roles
      • Route Network
        • Barrier Route Element
        • Door Route Element
      • Additional Location Details
    • Map Template
      • Getting Started
        • Web Component
        • React Component
      • Configuration
        • Query Parameters
        • Categories
      • Customization
      • Deploying Map Template to a cloud storage provider
      • 2D/3D Visibility Switch
      • External customization of the Map Template
      • Location Details configuration
      • Kiosk
        • QR code configuration
    • Web App
  • Other
    • Map Design
      • Map Design System
      • Using a Custom Mapbox MapStyle
      • 2D Models
    • Changelog
      • Web SDK
        • V4
        • V3
      • Android SDK
        • V4
        • V3
      • iOS SDK
        • V4
        • V3
      • React Native SDK
      • Flutter SDK
      • MI Components
      • Map Template
    • Glossary
  • Legacy Docs
    • Android SDK V3
      • Getting Started
        • Prerequisites
        • Create a New Project
        • Show a Map
        • Create a Search Experience
        • Getting Directions
        • Enable Live Data
        • Integrating MapsIndoors into your own App
    • iOS SDK V3
      • Getting Started
        • Prerequisites
        • Set Up Your Environment
        • Display a Map
        • Search
        • Directions
        • Live Data
        • Integrating MapsIndoors into your own App
      • Inspect Route Element for iOS v3
      • Using Cisco DNA Spaces
      • Using Indoor Atlas
      • Switching Solutions
      • Show User's Location aka. Blue Dot
      • Application User Roles
      • Getting a Polygon from a Location
      • Location Details
  • MapsIndoors SDK Firewall
  • Google Analytics & Logging
  • Reference Docs
    • Web SDK
    • Android SDK
    • iOS SDK
    • React Native SDK
    • Flutter SDK
Powered by GitBook
On this page
  • Add Swift Package to your app project
  • Using Swift Package Manager in Xcode
  • Using Swift Package Manager Manifest
  • Fork the project
  • Get iOS permissions
  • Show the user position on the map
  • App Lifecycle

Was this helpful?

Export as PDF
  1. SDKS & Frameworks
  2. iOS
  3. Show User's Location aka. Blue Dot

Using CrowdConnected

To get started with CrowdConnected positioning, you can either create your own implementation by using the MPPositionProvider interface from the MapsIndoors SDK to visualize position updates from CrowdConnected or you can use the MapsIndoors CrowdConnected Positioning Provider, which handles this work for you, requiring minimal setup. This guide shows how to make use of it.

This guide assumes you already have an app with MapsIndoors.

Add Swift Package to your app project

First, add the MapsIndoors CrowdConnected Swift Package to your dependencies

Using Swift Package Manager in Xcode

  1. In Xcode, open your project.

  2. Go to File -> Add Package Dependencies…

  3. Enter the repository URL for the MapsIndoors CrowdConnected package (https://github.com/MapsPeople/mapsindoors-crowdconnected-ios.git)

  4. Follow the prompts to select the package and target for installation.

Using Swift Package Manager Manifest

Add the following to your Package.swift file:

dependencies: [
    .package(url: "https://github.com/MapsPeople/mapsindoors-crowdconnected-ios.git", .upToNextMajor(from: "1.0.0")),
]

Fork the project

Get iOS permissions

Ensure your Info.plist file includes the necessary privacy-sensitive usage descriptions for location services, as required by both the MapsIndoors and CrowdConnected SDKs. This typically includes:

  • NSLocationWhenInUseUsageDescription

  • NSLocationAlwaysAndWhenInUseUsageDescription (if your app requires background location)

  • NSBluetoothPeripheralUsageDescription (since your app needs to use Bluetooth for the CrowdConnected IPS to work)

When you provide the necessary keys and initialize the CrowdConnected Position Provider, the user will be prompted to grant the required permissions.

Show the user position on the map

The last step to get the positioning shown on the map is to enable it in MPMapControl. This is typically done when creating the MPMapControl, but it can be turned on at any time. In the following example we turn on positioning when creating our MPMapControl.

import MapsIndoorsCore
import MapsIndoors_CrowdConnected

MPMapsIndoors.shared.positionProvider = CrowdConnectedPositionProvider(appKey: "<YOUR_APP_KEY>", token: "<YOUR_TOKEN>", secret: "<YOUR_SECRET>")
mapControl = MPMapsIndoors.createMapControl(mapConfig: mapConfig)
mapControl?.showUserPosition = true

If you keep a reference to the position provider, it makes it easy to enable and disable positioning at any time:

class YourMapController {
  private var positionProvider: CrowdConnectedPositionProvider?
  private var mapControl: MPMapControl?

  init() {
    positionProvider = CrowdConnectedPositionProvider(appKey: "<YOUR_APP_KEY>", token: "<YOUR_TOKEN>", secret: "<YOUR_SECRET>")
    MPMapsIndoors.shared.positionProvider = positionProvider
  }

  func enablePositioning() {
    mapControl?.showUserPosition = true
    positionProvider?.startPositioning()
  }

  func disablePositioning() {
    mapControl?.showUserPosition = false
    positionProvider?.stopPositioning()
  }
}

App Lifecycle

It is important to ensure that your user positioning implementation respects the iOS App Lifecycle. The position provider should be properly started, paused, and resumed according to the app lifecycle to prevent memory leaks or unexpected behavior.

Example Using UISceneDelegate

class MySceneDelegate: UISceneDelegate {

    var crowdConnectedPositionProvider: CrowdConnectedPositionProvider?

    func sceneDidBecomeActive(_ scene: UIScene) {
        crowdConnectedPositionProvider?.startPositioning(nil)
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        crowdConnectedPositionProvider?.stopPositioning(nil)
    }

}

Last updated 6 days ago

Was this helpful?

If you prefer more control, want to understand how it works, or want to customize the positioning provider package, you can go to the publicly available GitHub project. The source code is hosted at . By forking the repository, you create your own copy of the project, which you can modify to suit your specific requirements while retaining the base functionality.

Your lifecycle implementation will be slightly different if your app is using the scene-based life-cycle or app-based life-cycle as described in . Basically, you will want to consider stopping the position provider when the app is in the background and resuming it when the app is in the foreground by implementing the appropriate lifecycle methods from either UISceneDelegate or UIApplicationDelegate.

MapsIndoors CrowdConnected Package GitHub Repository
Apple's documentation about app life-cycle management