Situm’s core functionality centers around positioning. Before exploring how to integrate and start positioning in your app, it’s important to understand how to configure positioning effectively and follow best practices to ensure optimal performance and accuracy. This foundational knowledge will help you tailor Situm’s capabilities to the unique requirements of your app and venue.
To configure Situm’s positioning, we rely on a feature called Remote Configuration. Remote Configuration allows you to manage location settings directly from Situm Dashboard and automatically apply updates to all your users without needing app updates. This ensures streamlined configuration management and immediate propagation of changes, saving significant development and deployment effort.
Setting up the Remote Configuration #
In Situm Dashboard, you can change the Situm SDK positioning configuration by using the Remote Configuration panel available on the “My organization” menu, as it is shown in image below.

All the options in this panel have a brief description of what they do, and a link to the relevant documentation. When you are done with the changes, just click on “Save Configurations” and the next time you start the positioning the changes will be applied.
Best Practices for Configuring your App #
When configuring your app for indoor or outdoor positioning, follow these general recommendations to optimize performance:
Indoor Positioning Sensors #
- WiFi and BLE: Always enable WiFi and BLE unless your venue does not have WiFi access points or BLE beacons. These are critical for accurate indoor positioning.
- GPS: Enable GPS only if your venue includes outdoor areas where positioning is required. Make sure to configure GPS geofences for these areas.
- Beacon Filters: Use beacon filters only if your beacons have UUIDs different from the default ones scanned by Situm.
- Barometer, Compass, Gyroscope: Keep these sensors enabled unless there is a specific reason to disable them, as they significantly improve positioning accuracy.
Indoor Positioning Options #
- Motion Mode: Set to “By foot” by default. Use other options for use cases like forklifts, cars, or augmented reality applications.
- Foreground Service: Always enable the foreground service for Android apps if you need background tracking.
- Route Adjustment: Enable route adjustment to let Situm adjust positioning to the user’s route. While this slightly improves accuracy, user preference may vary, so test before deploying.
- Real-Time Updates: Use the lowest update frequency possible to conserve battery life. Only use fast updates if you need real-time information in Situm’s Real-Time Panel.
Building vs Global Mode: Building Detection
- Building vs Global Mode: If your app is limited to one venue, specify the building ID. For multiple venues, use building detectors or programmatically override the building ID to allow automatic venue detection.
- Venue Detectors: Combine BLE and WiFi for optimal venue detection when possible.
- GPS with Geofences: Always enable GPS geofences if GPS is activated. This ensures seamless positioning in venues with both indoor and outdoor areas.
Outdoor Positioning Options
- Enable outdoor positioning only if your app tracks users outdoors. This feature is primarily for tracking applications, not wayfinding.
The Remote Configuration has many more parameters. Usually the default values are a good choice but please read the explanations/documentation and decide for yourself. When in doubt, ask us at support@situm.com.
Enabling Remote Configuration in your app #
Please note! For a complete code example, please check our Quickstart guides (Android, iOS, Cordova, Capacitor, React Native, Flutter).
To enable Remote Configuration for your app, you need to configure your app to use it. This involves setting a flag indicating that your app should rely on the Remote Configuration from the Situm Dashboard. Once enabled, all location requests will automatically fetch the latest configuration settings from Situm’s servers. In case that you don’t have connection when the SDK is downloading the configuration, the last cached configuration will be used (or the default one if there isn’t any).
// Enable Remote Configuration SitumSdk.configuration().setUseRemoteConfig(true); ... // Start positioning using Remote Configuration SitumSdk.locationManager().requestLocationUpdates(new LocationRequest.Builder().build(), locationListener);
// Enable Remote Configuration SITServices.setUseRemoteConfig(true); ... // Start positioning using Remote Configuration SITLocationManager.sharedInstance().requestLocationUpdates(nil)
// Enable Remote Configuration cordova.plugins.Situm.setUseRemoteConfig(true); ... // Start positioning using Remote Configuration cordova.plugins.Situm.requestLocationUpdates({});
// Enable Remote Configuration SitumPlugin.setConfiguration({useRemoteConfig: true}); ... // Start positioning using Remote Configuration SitumPlugin.requestLocationUpdates();
// Enable Remote Configuration situmSdk.setConfiguration(ConfigurationOptions( useRemoteConfig: true)); ... // Start positioning using Remote Configuration situmSdk.requestLocationUpdates(LocationRequest());
Overriding the Remote Configuration #
In some scenarios, you may need to override specific parameters of the Remote Configuration programmatically, such as selecting a specific building. When overriding parameters:
- Local settings take priority over Remote Configuration.
- Only the parameters explicitly overridden are replaced, and all others continue to use the Remote Configuration.
To do this, you’ll just need to modify the LocationRequest (Android, iOS, Cordova/Capacitor, React Native, Flutter) with the proper configuration. More info here.
Please note! Overriding configuration is optional but may reduce the benefits of using the Remote Configuration
Example: Overriding the Building Identifier #
The most common scenario for overriding the Remote Configuration is when your app manages multiple venues, and you already know which venue the positioning should take place in. This is typical in cases where:
- You have a separate app dedicated to each venue.
- Your app includes a venue selector that allows users to choose the venue.
In such situations, instead of relying on the Situm SDK to automatically detect the venue (Global Mode), you can programmatically specify the building ID (Building Mode). By doing this, the SDK bypasses the venue detection step, which not only simplifies the positioning process but also accelerates the time it takes to establish the first location.
Here are some code examples that show how to do this:
// Empty location request builder LocationRequest.Builder locationRequestBuilder = new LocationRequest.Builder(); // Local changes overriding remote configuration values locationRequestBuilder.setBuildingIdentifier("1234"); // Start positioning overriding the building identifier (rest of configurations as per Remote Config) SitumSdk.locationManager.requestLocationUpdates(locationRequestBuilder.build(), locationListener);
// Empty location request var locationRequest = LocationRequest() // Local changes overriding remote configuration values locationRequest.buildingId = "1234" // Start positioning overriding the building identifier (rest of configurations as per Remote Config) SITLocationManager.sharedInstance().requestLocationUpdates(request) // Start location with all remote configuration parameters but building identifier (specified programmatically)
//Start positioning overriding the building identifier (rest of configurations as per Remote Config) cordova.plugins.Situm.requestLocationUpdates( { buildingIdentifier: "1234" });
// Start positioning overriding the building identifier (rest of configurations as per Remote Config) SitumPlugin.requestLocationUpdates({buildingIdentifier: 1234 })
// Start positioning overriding the building identifier (rest of configurations as per Remote Config) situmSdk.requestLocationUpdates(LocationRequest( buildingIdentifier:"1234"));