-
Notifications
You must be signed in to change notification settings - Fork 5
Home
- Introduction
- System requirements
- Installation
- Concepts
- Integration steps
- Methods Available in IndoorLocationManager
- FAQs
The Indoor Location Service and Outdoor Location Service differ significantly. This is because most Outdoor Location Services rely on GPS and other Global Navigation Satellite Systems (GNSS), which are obstructed by buildings' roofs and walls. Consequently, GPS is not a suitable solution for our case study in terms of accuracy. To attain Indoor Location Services, we utilize MistSDK, which employs BLE technology for indoor positioning, wayfinding systems, proximity notification, and other functions.
MistSDKDR - Mist Software Development Kit Dead Rocketing.
By leveraging Mist's 16 vBLE antenna array Access point, Mist SDK facilitates an indoor blue dot experience. With this SDK, you will have the ability to determine the user's location and deliver proximity-based notifications utilizing Mist's patented vBeacon technology.
Why the word Dead Reckoning?
MistSDK employs a dead reckoning technique to compute the user's current location. It does so by using their previous location and extrapolating it based on known and estimated speeds over elapsed time. This implies that DR is devised to make use of all available location data that a user had when connected and continues to function as though the client is connected, even when facing disconnections or interruptions in the connection.
Important services offered by our Mist SDK:
- Indoor positioning system,
- Marking and chasing the blue dot in Mist Map.
- Virtual beacon.
- A Beacon, which is not actually present, but we are making an illusion of the beacon’s availability - (It can be done in mist portal, and we can create and place the beacon anywhere we want)
- Virtual Proximity notification.
- Pushing a Notification to the nearest device when there is a need. (Ex: SOS)
- Wayfinding
- To provide directions to the point of interest.
-
Hardware Requirements:
- Mist Access Point with vBLE support (AP) - very important - Mist uses an AP with 16 vBLE Antennas to get the position of device in the floor.
- iPhone- since iOS Simulators doesn’t have Bluetooth support, we need physical device to test it out.
-
Software Requirements:
- Xcode: 12 or later.
- iOS deployment Target: 13.0 or later.
- Access to Mist Account
- Mobile SDK secret
Follow the steps to integrate Cocoa-Pod in the Xcode project or [Refer CocoaPods Getting Started guide]:
-
Open the terminal and change directory to your project folder, and create and initialize Podfile using the commands below.
$ cd ./project_folder_path
- If pod not installed, run the below command
$ sudo gem install cocoapods
- If pod not installed, run the below command
-
Initilize project
$pod init
- this will create a folder and required files in the project directory
-
Open the Podfile created and add the package to the target section in the pod file.
target 'MyApp' do #Pods for MyApp pod 'MistSDKDR-Beta', '2.0.3' end
-
Go back to the terminal and Run the command in your project directory to complete the SDK installation with Cocoapods.
$pod install
-
Open <<projectname>>.xcworkspace and build. This way, you can get the benefit of the pod and its installed packages.
-
Add import MistSDK in swift OR #import <MistSDK/MistSDK.h> in Objective c to get started.
Note: Incase Mist SDK DR version is not compliant with bitcode. You need to set BitCode -> Enable = No in the build setting of your XCode Project.
We are currently in the phase to provide support for SPM and hoping to update SPM Support in upcoming releases.
- For the latest SDK version, download the MistSDK.framework.
- Drag and drop the MistSDK.framework in the project file.
- In your Xcode project file add MistSDK.framework to Targets > General > Framework, Libraries and Embedded contents > select Embed and Sign.
- Add `mport MistSDK in swift OR #import <MistSDK/MistSDK.h> in Objective c .
There are some of the important steps to be configured initially to get started with an SDK
- App Permissions.
- Access token.
- Floor plan - (MistMap)
- The positioning of Access point (AP) in floor plan.
And the following are necessary on the need basis,
- Path towards the floor plan.
- The Virtual beacons as per our needs.
- Region/ Zones.
- App wakeup.
To proceed, our SDK gathers certain sensitive information, which is deemed necessary. For instance, the SDK leverages Bluetooth to scan for BLE devices. Therefore, it is crucial to provide sufficient permissions to begin. These permissions include:
-
Location Permission.:
- Privacy - Location When in Use Usage Authorization.
- To listen for iBeacon and other location services in foreground.
- Privacy - Location Always Usage Authorization.
- To listen for iBeacon and other location services even in background.
- Privacy - Location When in Use Usage Authorization.
-
Bluetooth Permission:
- Privacy - Bluetooth Peripheral Usage Description.
- To listen and make use of Bluetooth in foreground.
- Privacy - Bluetooth Always Usage Description.
- To listen and make use of Bluetooth in background.
- Privacy - Bluetooth Peripheral Usage Description.
To provide those permissions open info.plist in a source code mode and add the following snippet.
<key>NSLocationWhenInUseUsageDescription</key>
<string> Mist wants to access the Location services </string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string> Mist wants to access the Location services in background </string> <key>NSBluetoothPeripheralUsageDescription</key>
<string> Mist wants to access the Bluetooth </string> <key>NSBluetoothAlwaysUsageDescription</key>
<string> Mist wants to access the Bluetooth in background </string>
Now we are done with adding permissions. So, the next step is to create an access token to enroll the organization to Mist Cloud.
Access token is the secret key which can be created from the Mist portal to authenticate the identity of an organization to Mist SDK.
Why is this Access token for?:
Mist is the platform that provides a solution to Indoor location Service. So, we must ensure that our potential clients (A Business which wants to use the SDK) should be registered as an organization to our Mist portal.
Token Creation Steps:
- To create an access token, we should have registered to Mist portal
- Go to Organization --> Mobile SDK as,
![Screenshot 2023-04-15 at 8 26 15 PM](https://user-images.githubusercontent.com/122332297/232232499-aaa34657-c2e0-4a86-ba3c-75faa2b15c40.png)
- Create a new invitation. It will ask for the organization name and once you give the name and hit save, you will get your token, Refer the image for better understanding.
![Screenshot 2023-04-15 at 8 26 15 PM](https://user-images.githubusercontent.com/122332297/232232538-4dcb2445-b54c-47ec-b8b1-8f2bbaddf16a.png)
- Our goal is to provide Indoor Location service, which entails navigating within buildings. Therefore, we require a map, specifically a floor plan of the building.
- With the help of mist portal, we can be able to upload the Floor plans and that will act as the Map. We term that as MistMap
Maps Supported
- Mist map: Map Type (jpeg, png, gif)
- Micello
- Jibestream
Conversion from Mist Coordinates to other maps Jibestream:
jibestreamX = (mistX1000)/mmpp
jibestreamY = (mistY1000)/mmpp
Where mmpp is MilliMeterPerPixel which is specific to map and will be provided by jibestream itself
How to add the Floor Plan in Mist Portal:
- Go to Location--> Live View – here it will show all of the existing floorplans, if there are none then it will tell you to add the floorplan with a button.
![Screenshot 2023-04-15 at 8 26 32 PM](https://user-images.githubusercontent.com/122332297/232232555-c68cd442-fd37-4d93-8a4f-0399a120972d.png)
- To add a floor plan, click on the "Add FloorPlan" or "Import FloorPlan" button based on your requirements. You will be prompted to provide a name for the floor. Once you have entered the name, press "Enter", and you will be asked to upload the floor plan image. Simply drag and drop the image into the designated area and click on the "Upload" button.
![Screenshot 2023-04-15 at 8 26 39 PM](https://user-images.githubusercontent.com/122332297/232232572-84a5fe71-919d-437b-8881-5ec656be39fa.png)
- The final step in configuring the floor plan is to add the PPM (Pixels per meter) value. This indicates the distance in meters that each pixel on the floor plan represents.
Positioning the AP in Mist Portal exactly as it is in the real world is crucial. Failing to do so will result in an inconsistent Mist Point, rendering it useless due to its lack of accuracy.
How to position the AP in the floor plan in Mist Portal
Go to Location -> Live View -> Setup Floorplan, from here you can see the list of APs that are claimed to that site and move them around to whereever you want.
This is one of the examples of floor plan with AP installed.
![Screenshot 2023-04-15 at 8 26 46 PM](https://user-images.githubusercontent.com/122332297/232232592-96ab55a3-d677-4585-8a27-bdc85eb06344.png)
Wayfinding paths can be created to help the location estimate gravitate towards the paths drawn out. To generate the path, we can use the Mist portal and define the route directly on the map. For that
- Go to Location -> Live View -> Choose the floor plan
- Click the Wayfinding paths button
![Screenshot 2023-04-15 at 8 26 50 PM](https://user-images.githubusercontent.com/122332297/232232602-4307212f-6ede-48dc-b529-7e3fddd932db.png)
- You will see the Following options
![Screenshot 2023-04-15 at 8 26 54 PM](https://user-images.githubusercontent.com/122332297/232232612-16ebbbc8-3fb5-49ee-9fa3-e43119b56c0c.png)
- Draw paths in areas where there will be people walking and moving through, be sure to draw paths in every area where you intended to utilize the SDK clients.
![Screenshot 2023-04-15 at 8 26 59 PM](https://user-images.githubusercontent.com/122332297/232232619-f0b3a1b5-9b9a-45bd-8b50-2547c6395116.png)
for more [https://www.mist.com/documentation/adding-wayfinding-paths/]
vBeacons are a Mist-patented technology that enables the provision of proximity-related information. The advantage of vBeacons is that they can be placed anywhere on the floorplan without concerns about battery life or relocation issues. Similar to real beacons, ranging APIs can be used for vBeacons. It’s important to note that these do not act as a stand in for real beacons and are only for proximity-related information. Meaning that placing these vBeacons on your floorplan will not help increase accuracy.
To add the vBeacons,
- Go to Location->Live View-> select the floor plan->click the Beacons and Zones
![Screenshot 2023-04-15 at 8 30 28 PM](https://user-images.githubusercontent.com/122332297/232232669-7b02012f-0cbc-4774-9fa5-08f1109508cc.png)
- Now the user can create and move the vBeacon wherever he wants. All the Green circles are vBeacons
![Screenshot 2023-04-15 at 8 27 05 PM](https://user-images.githubusercontent.com/122332297/232232694-1e353cfa-7e93-4bea-b953-15e40cad7a46.png)
- Furthermore, we have the flexibility to customize the beacon according to your requirements. If you wish to remove a beacon, you can choose the "Remove" option, or if you want to make any modifications to the beacon, you can select the "Edit" option.
![Screenshot 2023-04-15 at 8 27 09 PM](https://user-images.githubusercontent.com/122332297/232232706-fa801797-5392-4e7d-bd4c-6ee8c0058bf4.png)
- If you intend to edit a beacon, you should fill the necessary details in the edit popup and save the changes. On the other hand, if you wish to delete a beacon, simply click the "Delete" button.
![Screenshot 2023-04-15 at 8 27 13 PM](https://user-images.githubusercontent.com/122332297/232232711-5f4103b5-d0e6-4829-a782-0f80942be72d.png)
- A zone is a customized area defined on the Mist map that enables notifications to be sent to provide location-specific information to customers. We can send notifications when a user enters the specified zone in the Mist portal.
- To add zones, Go to Location->Live View-> select the floor plan->click the Beacons and Zones.
- And click add location Zone and drag the area on the floor plan to create the zone.
- Refer the highlighted area in the image for the zone.
![Screenshot 2023-04-15 at 8 27 18 PM](https://user-images.githubusercontent.com/122332297/232232716-94a229c9-3229-4747-ac6e-afe83d879977.png)
As same as virtual beacons, we have options to edit and delete the zones.
App wakeup refers to the act of bringing the app back to an active state when it enters the range of a registered beacon. This feature is primarily related to the app itself and not the SDK. However, you can initiate the SDK in the background when you receive the callback in the killed state and utilize it for analytics purposes instead of navigation or location.
For wakeup we are using the Apple CLBeaconRegion API using iBeacon in iOS. Apple had a method didEnterRegion and didExitRegion delegate methods in Core Location package to handle such a scenario better. For Android we are using ALTBeacon to achieve AppWakeup.
You can find the sample app over https://github.com/gurunarayanancse/MistSDKDRDemo.
-
Import MistSDK
Swift:
import MistSDK
Obj-c:
#import <MistSDK/MistSDK.h>
-
Create and Initialize the SDK with the access token that we get through token creation process.
Swift:
let indoorLocationManager = IndoorLocationManager.sharedInstance(MistConstants.mistAccessToken)
Obj-c:
self.indoorLocationManager = [IndoorLocationManager sharedInstance: @"<AccessToken>"];
-
Start Listening to the beacons which are relevant to organization.
-
Assign an IndoorLocationDelegate.
Swift:
indoorLocationManager?.start (with: self)
Obj-c:
[_indoorLocationManager startWithIndoorLocationDelegate:self];
-
Once we have done all the steps, we will be able to get all the required parameters in the respective delegate methods.
-
There are roughly around five delegates available, and they are
- IndoorLocationDelegate.
- ZonesDelegate.
- MapsListDelegate.
- VirtualBeaconsDelegate.
- ClientInformationDelegate.
Required methods to be overridden.
-
func didUpdateRelativeLocation(_ relativeLocation: MistPoint!) -> Void
-
func didReceivedOrgInfo(withTokenName tokenName: String!, andOrgID orgID: String!) -> Void
didUpdateRelativeLocation
This delegate method is a part of IndoorLocationDelegate which is very important to be overridden. So, the class whichever is trying to confirm IndoorLocationDelegate should override this method.
The main purpose of this method is to provide relativeLocation of type MistPoint, which gives us detailed information about the current location of the device.
MistPoint
Property | Datatype | What it infers |
---|---|---|
x | double | It is a spatial coordinate x |
y | double | It is a spatial coordinate y. |
lat | NSNumber | It mentions the current latitude of the device. |
lon | NSNumber | It mentions the current longitude of the device. |
hasMotion | bool | It tells us whether the device has a motion or not. |
latency | double | It provides the delay in getting the data. |
heading | NSNumber | It provides direction towards AP in degrees. |
map | MistMap | It provides all the information related to MistMap. |
Example:
Swift:
func didUpdateRelativeLocation(_ relativeLocation: MistPoint!){
self.mistPoint = relativeLocation
}
Obj-c:
(void)didUpdateRelativeLocation:(MistPoint *)relativeLocation {
_mistPoint = relativeLocation;
}
didUpdate(_ map: MistMap).
It will be called once the map gets updated – which means that, if the device moves from one floor to another floor, there will be a change in the floor map. In such a scenario this callback will be triggered with an updated floor map. It is also the required delegate method and should be overridden without fail.
MistMap
Property | Datatype | What it infers |
---|---|---|
name | String | It is the name of the map (Floor plan). |
Width, height | long | Width and height of the map. |
mapID | String | Unique identifier for the map. |
siteID | String | Site is a venue where our MistSDK is running – and this id refers to the unique identifier for the site. |
orgID | String | Organization ID. |
url | String | This is the url which contains the actual map. |
wayfindingPath | MistPath | It provides the path towards our goal destination. |
MistPath
Property | Datatype | What it infers |
---|---|---|
coordinate | String | It is spatial coordinate. |
name | String | Name of the route which is visible on the map |
mapID | String | Unique identifier for the map. |
nodes | list : PathNode | List of nodes to be traversed. |
pathID | String | Unique id for the path. |
Example:
Swift:
func didUpdate(_ map: MistMap!) {
self.mistMap = map
}
Obj-c:
(void)didUpdateMap:(MistMap *)map {
_mistMap = map;
}
didErrorOccur(_ withError:,withErrorMessgage).
This method will get called if the SDK faces any error rather than getting any positive response. And it will help us by giving two values
- errorMessage of type NSString,
- errorType of type ErrorType Enum.
ErrorType
Property | What it infers |
---|---|
.noResponse | This will be thrown when Mist cloud cannot send a response to the device. |
.responseParseError | This will be thrown, if we could not be able to parse the response from Mist server. |
.noBeaconsDetected | It will be thrown when there is no beacon available to scan. |
.noConnectionToCloud | It will be thrown when we cannot be able to establish a connection to our Mist cloud. |
.noDataConnection | It will be thrown when our device has no internet connection. |
.authFailure | If SDK could not authorize, we will get this issue. |
.serverOverloaded | This error will be thrown if our server is already overloaded, and it cannot process our request. |
.sdkNotStarted | This will be thrown when the SDK itself is not running. |
Example:
Swift:
func didErrorOccur(with errorType: ErrorType, andMessage errorMessage: String!) {
switch errorType{
case .noResponse:
// Handle noResponse Error
case .responseParseError:
// Handle responseParseError Error
case .noBeaconsDetected:
// Handle noBeaconsDetected Error
case .noConnectionToCloud:
// Handle noConnectionToCloud Error
case .noDataConnection:
// Handle noDataConnection Error
case .authFailure:
// Handle authFailure Error
case .serverOverloaded:
// Handle serverOverloaded Error
case .sdkNotStarted:
// Handle sdkNotStarted Error
}
}
Obj-c:
(void)didErrorOccurWithType:(ErrorType)errorType andMessage:(NSString *)errorMessage{
switch (errorType) {
case ErrorTypeNoResponse:
// handle ErrorTypeNoResponse break;
case ErrorTypeResponseParseError:
// handle ErrorTypeResponseParseError break;
case ErrorTypeNoBeaconsDetected:
// handle ErrorTypeNoBeaconsDetected break;
case ErrorTypeNoConnectionToCloud:
// handle ErrorTypeNoConnectionToCloud break;
case ErrorTypeNoDataConnection:
// handle ErrorTypeNoDataConnection break;
case ErrorTypeAuthFailure:
// handle ErrorTypeAuthFailure break;
case ErrorTypeServerOverloaded:
// handle ErrorTypeServerOverloaded break;
case ErrorTypeSDKNotStarted:
// handle ErrorTypeSDKNotStarted break;
}
}
didReceivedOrgInfo
This method will get called if the SDK can successfully authenticate our organization with an access token. It will give is the following values
- TokenName of type String.
- OrgID of type String.
Example:
Swift:
func didReceivedOrgInfo(withTokenName tokenName: String!, andOrgID orgID: String!) {
self.tokenName = tokenName
self.orgID = orgID
}
Obj-c:
(void)didReceivedOrgInfoWithTokenName:(NSString *)tokenName andOrgID:(NSString *)orgID{
_orgID = orgID;
_tokenName = tokenName;
}
As we already gone through, a zone is a custom area defined on the Mist map to get the notification to provide vicinity related information to your customer. And this delegate will get called when a device enters the defined zone area in the Mist portal.
-
func didEnter(_ mistZone: MistZone!) -> Void
-
func didExitZone(_ mistZone: MistZone!) -> Void
didEnter(_ mistZone: MistZone)
This delegate method will get called when the app enters our monitoring region - (the area where we implemented our Mist System).
Example:
Swift:
func didEnter(_ mistZone: MistZone!) {
print("Entered into MistZone \(mistZone)")
}
Obj-c:
(void)didEnterZone:(MistZone *)mistZone{
printf("Entered into the zone %s", mistZone.debugDescription);
}
didExitZone(_ mistZone: MistZone)
This delegate method will get called when the app exits from our monitoring region - (the area where we implemented our Mist System). Both above methods give us a mistZone object of type MistZone.
Example:
Swift:
func didExitZone(_ mistZone: MistZone!) {
print("Exit from MistZone \(mistZone)")
}
Obj-c:
(void)didExitZone:(MistZone *)mistZone{
printf("Exit from the zone %s", mistZone.debugDescription);
}
Note: Both methods are optional in this protocol- means that no need to override if any class conforming to ZonesDelegate but if we want to have a better experience, use this delegate as much effective as possible.
MistZone
Property | Datatype | What it infers |
---|---|---|
name | String | Name of the Zone. |
userID | String | Name of the Zone. |
orgID, siteID | String | They are just an identifier of the organization and a site where mist is implemented. |
zoneID | String | Unique Identifier for the zone. |
sinceTime | String | It tells from what time user is inside the zone. |
sinceTimeEpoch | long | It tells and gives the timer, and it says how long the device is active in a zone. |
sessionID | String | SDK Maintains a session in backend. And this id indicates the session of the current device inside the zone. |
zonePosition | ZonePosition | It gives the spatial coordinates of Three-dimensional plane |
ZonePosition
Property | Datatype | What it infers |
---|---|---|
x | double | Spatial coordinate X |
y | double | Spatial coordinate Y |
z | double | Spatial coordinate Z |
MapsListDelegate.
func didReceiveAllMaps(_ maps: [MistMap]!) -> Void.
- This delegate will give us maps for all sites in the entire organization. It gives us the array of maps which is supposed to be of MistMap type (properties were explained in detail – didUpdate(_map) delegate explanation.).
- And it is a mandatory method to be overridden, if the class wants to conform this MapsListDelegate protocol.
Example:
Swift:
func didReceiveAllMaps(_ maps: [MistMap]!) {
self.mapList = maps
}
Obj-c:
(void)didReceiveAllMaps:(NSArray<MistMap *> *)maps{
_mapList = maps;
}
VirtualBeaconsDelegate. As we already know, vBeacon can provide proximity related information and the good thing is you can move these vBeacon wherever we want to place them in your floorplan and never have to worry about any battery or relocation problems. And it will work as exactly same as physical beacon.
Required methods to be overridden.
- didRangeVirtualBeacon
Using this delegate method, we can get the current ranging beacon, which is near to us.
func didRangeVirtualBeacon(_ mistVirtualBeacon: MistVirtualBeacon!) -> Void
Example:
Swift:
func didRangeVirtualBeacon(_ mistVirtualBeacon: MistVirtualBeacon!) {
self. rangingvBeacon = mistVirtualBeacon
}
Obj-c:
(void)didRangeVirtualBeacon:(MistVirtualBeacon *)mistVirtualBeacon { _rangingvBeacon = mistVirtualBeacon;
}
Optional methods can be overridden on the need basis.
-
didUpdateVirtualBeaconList
It will return all the available virtual beacons placed on the floorplan whenever its position and other details are changed from the Mist portal.
func didUpdateVirtualBeaconList(_ mistVirtualBeacons: [MistVirtualBeacon]!) -> Void
Example:
Swift:
func didUpdateVirtualBeaconList(_ mistVirtualBeacons: [MistVirtualBeacon]!) {
self.vBeaconList = mistVirtualBeacons
}
Obj-c:
(void)didUpdateVirtualBeaconList:(NSArray<MistVirtualBeacon *> *)mistVirtualBeacons{
_vBeaconList = mistVirtualBeacons;
}
It returns the object/ array of Objects of the type MistVirtualBeacon.
Properties of MistVirtualBeacon
MistVirtualBeacon
Property | Datatype | What it infers |
---|---|---|
name | String | Name of the Virtual beacon |
orgID | String | Organization Identifier |
siteID | String | Site/ Venue id |
mapID | String | Floorplan id |
vbID | String | Unique Identifier of the Virtual beacon on Mist portal |
vbUUID | long | vBeacon UUID |
vbMajor | String | Major value of vBeaconsession of the current device inside the zone. |
vbMinor | long | Minor value of vBeacon |
position | BeaconPosition | It Mentions where exactly the vBeacon is positioned in floor plan. |
additionalInf | AdditionalInfo | Additional information on the vBeacons |
message | String | Any custom messages entered on mist portal.it will be Used for Notification purpose. |
power | long | It’s the power of the vBeacon, to increase the sensing strength. So that the device can sense the vBeacon in a specified distance. |
BeaconPosition
Property | Datatype | What it infers |
---|---|---|
x | double | Spatial coordinate X of vBeacon. |
y | double | Spatial coordinate Y of vBeacon. |
z | double | Spatial coordinate Z of vBeacon. |
AdditionalInfo
Property | Datatype | What it infers |
---|---|---|
proximity | String | Proximity of the device with vBeacon, like: 1. immediate 2. near 3. far 4. unknown |
distance | double | It tells how much distance a device from the vBeacon. |
rssi | double | Signal strength |
orientation | long | Orientation of device towards the vBeacon |
direction | String | Direction towards the vBeacon |
- And finally, we simply call the stop function in the indoor Location manager to stop the SDK. a. Swift: IndoorLocationManager?.stop () b. Obj-c:[_indoorLocationManager stop];
- -(void) startWithIndoorLocationDelegate: (id ) delegate;
- -(void) stop;
- -(NSArray*) getWayfindingPathTo:(Position*) destination;
- +(NSUUID *)getMistUUID;
- +(void)clearMistUUID;
- -(void)saveClientInformation:(NSString *)clientName withDelegate: (id)clientInformationDelegate;
- -(void)getClientInformationwithDelegate:(id)clientInformationDelegate;
- This method will start the MistSDK.
- This is the instance method, means that it should only be invoked via object of the class
- It will take an indoorLocationDelegate as a parameter. So that we can be able to override the callbacks defined in indoorLocationDelegate protocol.
- And it returns void.
- Usage:
- Swift:
let indoorLocationManager = IndoorLocationManager.sharedInstance(MistConstants.mistAccessToken) indoorLocationManager?.start (with: self)
- Obj-C:
self.indoorLocationManager = [IndoorLocationManager sharedInstance: @"<AccessToken>"]; [_indoorLocationManager startWithIndoorLocationDelegate:self];
- This method will stop MistSDK.
- This is also the instance method, so invocation should be via instance of class only.
- It doesn’t take any arguments and won’t return anything.
- Usage:
- Swift:
indoorLocationManager?.stop()
- Obj-C:
[_indoorLocationManager stop];
- This method will return a list of nodes to be traversed when we want to draw the path towards the destination.
- This is also the instance method, so invocation should be via instance of class only.
- We should pass the destination - (an object of type Position) as an argument.
- It will return a sequence of nodes to be traversed in an array format of type [Node].
- Usage:
- Swift:
let nodes = indoorLocationManager?.getWayfindingPath(to: Position.init(makeX: 10, y: 10))
- Obj-C:
NSArray *nodes = [_indoorLocationManager getWayfindingPathTo:[Position positionMakeX:10 Y: 10]];
- MistUUIDis the unique user id provided to the user who is in the session actively.
- This method will give us the current Mist User UUID from the server.
- This is a class method, so invocation should be via Name of the class. It's like invoking a static method with a reference of a class Name.
- It doesn’t take any arguments. [Node].
- It returns the unique identifier of type NSUUID to the caller function.
- Usage:
- Swift:
let userUniqueID = IndoorLocationManager.getMistUUID()
- Obj-C:
NSUUID *userUniqueID = [IndoorLocationManager getMistUUID];
- If the user wants to remove the user reference id for some reason, they can use clearMistUUI() method.
- It will clear the current session of the user from backend. And the user can call getMistUUID()again if he wishes to create and get a new id for the current user.
- It doesn’t take any arguments.
- Usage:
- Swift:
IndoorLocationManager.clearMistUUID()
- Obj-C:
[IndoorLocationManager clearMistUUID];
- This method saves the client information to the mist server - (client is the current user in the session).
- The user can send his name to server via this method, SDK will invoke the API update the username to server. After this process we can easily find the user in the map via this name.
- It takes the username and the ClientInformationDelegate as a parameter. And it doesn’t return anything. Since this is an asynchronous function, we deal with delegate pattern to get a response from this method.
- Usage:
- Swift:
indoorLocationManager?.saveClientInformation(" <username> ", with: self)
- Obj-C:
[_indoorLocationManager saveClientInformation:"<username>" withDelegate:self]
- And the result will be returned in the call backs of ClientInformationDelegate.
- It fetches the client information from the server and returns to the application in the form of ClientInformationDelegate
- Usage:
- Swift:
indoorLocationManager?.getClientInformationwithDelegate(self)
- Obj-C:
[self.indoorLocationManager getClientInformationwithDelegate:self];
- -(void) onSuccess:(NSString*) clientName;
- -(void) onError:(ErrorType )errorType andMessage:(NSString*) errorMessage;
OnSuccess
- It will be triggered upon the success of the Updating process.
- It will give us the updated clientName.
- Swift:
func onSuccess(_ clientName: String!) { print(clientName ?? "") }
- Obj-C:
-(void)onSuccess:(NSString *)clientName { NSLog(@"client name %@", clientName); }
OnError
- This will be triggered if there is a failure in the updating process.
- and it will help us by giving two values
- errorMessage of type NSString,
- errorType of type ErrorType Enum.
- (For error type, please go through the list of errors mentioned in the table at the didErrorOccur section in IndoorLocationDelegate.)
- Swift:
func onError(_ errorType: ErrorType, andMessage errorMessage: String!) { //handleErrorCases, for more go through didErrorOccur section in IndoorLocationDelegate }
- Obj-C:
-(void)onError:(ErrorType)errorType andMessage:(NSString *)errorMessage { //handleErrorCases, for more go through didErrorOccur section in IndoorLocationDelegate }
For further questions please reach out to support@mist.com