Skip to content
Deeyo Dela Cruz edited this page Apr 19, 2023 · 61 revisions

Welcome to the Mist vBLE iOS SDK Manual!

Table of Contents:

  1. Introduction
  2. System requirements
  3. Installation
  4. Concepts
    1. App Permissions
    2. Access Token
    3. Floor Plan
    4. Positioning AP
    5. Path towards floor plan
    6. Virtual Beacon
    7. Zones
    8. App Wakeup
  5. Integration steps
  6. Methods Available in IndoorLocationManager
  7. FAQs

Introduction

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.

System requirements

  1. Hardware Requirements:

    1. Mist Access Point with vBLE support (AP) - very important
    2. - Mist uses an AP with 16 vBLE Antennas to get the position of device in the floor.
    3. iPhone- since iOS Simulators doesn’t have Bluetooth support, we need physical device to test it out.
  2. Software Requirements:

    1. Xcode: 12 or later.
    2. iOS deployment Target: 13.0 or later.
    3. Access to Mist Account
    4. Mobile SDK secret

Installation

Installation using Cocoa-pods

Follow the steps to integrate Cocoa-Pod in the Xcode project or [Refer CocoaPods Getting Started guide]:

  1. 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
  2. Initilize project

    $pod init
    • this will create a folder and required files in the project directory
  3. 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
    
  4. Go back to the terminal and Run the command in your project directory to complete the SDK installation with Cocoapods.

    $pod install
  5. Open <<projectname>>.xcworkspace and build. This way, you can get the benefit of the pod and its installed packages.

  6. 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.

Installation using Swift Package Manager

We are currently in the phase to provide support for SPM and hoping to update SPM Support in upcoming releases.

Installation - Manually using the framework

  • 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 .

Concepts

Things needed to make SDK ready to work.

There are some of the important steps to be configured initially to get started with an SDK

  1. App Permissions.
  2. Access token.
  3. Floor plan - (MistMap)
  4. The positioning of Access point (AP) in floor plan.

And the following are necessary on the need basis,

  1. Path towards the floor plan.
  2. The Virtual beacons as per our needs.
  3. Region/ Zones.
  4. App wakeup.

App Permissions

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:

  1. Location Permission.:
    1. Privacy - Location When in Use Usage Authorization.
      • To listen for iBeacon and other location services in foreground.
    2. Privacy - Location Always Usage Authorization.
      • To listen for iBeacon and other location services even in background.
  2. Bluetooth Permission:
    1. Privacy - Bluetooth Peripheral Usage Description.
      • To listen and make use of Bluetooth in foreground.
    2. Privacy - Bluetooth Always Usage Description.
      • To listen and make use of Bluetooth in background.

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

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
  • 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

Floor plan - (MistMap)

  • 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
  • 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
  • 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 of AP

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

Path towards the floor plan. - (For Wayfinding use case)

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
  • You will see the Following options
Screenshot 2023-04-15 at 8 26 54 PM
  • 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

for more [https://www.mist.com/documentation/adding-wayfinding-paths/]

Virtual Beacons

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
  • 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
  • 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
  • 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

Zones

  • 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

As same as virtual beacons, we have options to edit and delete the zones.

App Wakeup

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.


Integration Steps:

You can find the sample app over https://github.com/gurunarayanancse/MistSDKDRDemo.

  1. Import MistSDK

    Swift:

    import MistSDK

    Obj-c:

    #import <MistSDK/MistSDK.h>
  2. 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>"];
    
  3. Start Listening to the beacons which are relevant to organization.

  4. Assign an IndoorLocationDelegate.

    Swift:

    indoorLocationManager?.start (with: self)

    Obj-c:

    [_indoorLocationManager startWithIndoorLocationDelegate:self];
    
  5. Once we have done all the steps, we will be able to get all the required parameters in the respective delegate methods.

  6. There are roughly around five delegates available, and they are

    1. IndoorLocationDelegate.
    2. ZonesDelegate.
    3. MapsListDelegate.
    4. VirtualBeaconsDelegate.
    5. ClientInformationDelegate.


IndoorLocationDelegate

Required methods to be overridden.

  1.  func didUpdateRelativeLocation(_ relativeLocation: MistPoint!) -> Void
  2.  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

  1. errorMessage of type NSString,
  2. 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

  1. TokenName of type String.
  2. 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; 
    }
ZonesDelegate.

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.
  1. 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.).
  2. 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.

  1. didRangeVirtualBeacon
    func didRangeVirtualBeacon(_ mistVirtualBeacon: MistVirtualBeacon!) -> Void
    Using this delegate method, we can get the current ranging beacon, which is near to us.

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.

  1. 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

  1. 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];


Methods Available in IndoorLocationManager

  1. -(void) startWithIndoorLocationDelegate: (id ) delegate;
  2. -(void) stop;
  3. -(NSArray*) getWayfindingPathTo:(Position*) destination;
  4. +(NSUUID *)getMistUUID;
  5. +(void)clearMistUUID;
  6. -(void)saveClientInformation:(NSString *)clientName withDelegate: (id)clientInformationDelegate;
  7. -(void)getClientInformationwithDelegate:(id)clientInformationDelegate;

1 - StartWithIndoorLocationDelegate

  1. This method will start the MistSDK.
  2. This is the instance method, means that it should only be invoked via object of the class
  3. It will take an indoorLocationDelegate as a parameter. So that we can be able to override the callbacks defined in indoorLocationDelegate protocol.
  4. And it returns void.
  5. Usage:

  • Swift:
    let indoorLocationManager = IndoorLocationManager.sharedInstance(MistConstants.mistAccessToken) indoorLocationManager?.start (with: self)
  • Obj-C:
    self.indoorLocationManager = [IndoorLocationManager sharedInstance: @"<AccessToken>"];
    [_indoorLocationManager startWithIndoorLocationDelegate:self];

2 - Stop

  1. This method will stop MistSDK.
  2. This is also the instance method, so invocation should be via instance of class only.
  3. It doesn’t take any arguments and won’t return anything.
  4. Usage:

  • Swift:
    indoorLocationManager?.stop()
  • Obj-C:
    [_indoorLocationManager stop];

3 - getWayfindingPathTo.

  1. This method will return a list of nodes to be traversed when we want to draw the path towards the destination.
  2. This is also the instance method, so invocation should be via instance of class only.
  3. We should pass the destination - (an object of type Position) as an argument.
  4. It will return a sequence of nodes to be traversed in an array format of type [Node].
  5. Usage:

  • Swift:
    let nodes = indoorLocationManager?.getWayfindingPath(to: Position.init(makeX: 10, y: 10))
  • Obj-C:
    NSArray *nodes = [_indoorLocationManager getWayfindingPathTo:[Position positionMakeX:10 Y: 10]];

4 - GetMistUUID.

  1. MistUUIDis the unique user id provided to the user who is in the session actively.
  2. This method will give us the current Mist User UUID from the server.
  3. 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.
  4. It doesn’t take any arguments. [Node].
  5. It returns the unique identifier of type NSUUID to the caller function.
  6. Usage:

  • Swift:
    let userUniqueID = IndoorLocationManager.getMistUUID()
  • Obj-C:
    NSUUID *userUniqueID = [IndoorLocationManager getMistUUID];

5 - clearMistUUID.

  1. If the user wants to remove the user reference id for some reason, they can use clearMistUUI() method.
  2. 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.
  3. It doesn’t take any arguments.
  4. Usage:

  • Swift:
    IndoorLocationManager.clearMistUUID()
  • Obj-C:
    [IndoorLocationManager clearMistUUID];

6 - saveClientInformation.

  1. This method saves the client information to the mist server - (client is the current user in the session).
  2. 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.
  3. 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.
  4. Usage:

  • Swift:
    indoorLocationManager?.saveClientInformation(" <username> ", with: self)
  • Obj-C:
    [_indoorLocationManager saveClientInformation:"<username>" withDelegate:self]
  1. And the result will be returned in the call backs of ClientInformationDelegate.

7 - getClientInformationwithDelegate.

  1. It fetches the client information from the server and returns to the application in the form of ClientInformationDelegate
  2. Usage:

  • Swift:
    indoorLocationManager?.getClientInformationwithDelegate(self)
  • Obj-C:
    [self.indoorLocationManager getClientInformationwithDelegate:self];

ClientInformationDelegate.

  1. -(void) onSuccess:(NSString*) clientName;
  2. -(void) onError:(ErrorType )errorType andMessage:(NSString*) errorMessage;

OnSuccess

  1. It will be triggered upon the success of the Updating process.
  2. 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

  1. This will be triggered if there is a failure in the updating process.
  2. 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
    }

Release Notes

Release Notes

Getting Started

Integration Guide

Legacy [Deprecated]

Legacy Integration Document

Clone this wiki locally