Link Search Menu Expand Document

4.1.5 version

Table of Contents

What’s New in ExpoFP Fplan version 4.1.5

Bugs have been fixed.

Installation

Cocoapods:

pod 'ExpoFpFplan', '4.1.5'

UIKit

Usage

import UIKit
import ExpoFpFplan

class ViewController: UIViewController {
    var fplanUiView: UIFplanView!

    override func loadView() {
        fplanUiView = UIFplanView()
        self.view = fplanUiView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        fplanUiView.load("https://demo.expofp.com")
    }

    override func viewWillDisappear(_ animated: Bool) {
        fplanUiView.destoy()
    }
}

Stop UIFplanView.
After you finish working with UIFplanView, you need to stop it.
To do this, you need to call the ‘destroy’ function:

fplanUiView.destoy()

Offline mode

ExpoFP SDK provides the following offline modes:

  1. Default - ExpoFP SDK itself caches all the necessary data during the initial loading of the plan.

  2. Opening a zip archive with a plan - you can download the plan archive from the “Integration options” page (windows section), add this archive to your application (Resources.bundle) and then open this plan using the “openZip()” function.

Example:

import UIKit
import ExpoFpFplan

class ViewController: UIViewController {
    var fplanUiView: UIFplanView!

    override func loadView() {
        fplanUiView = UIFplanView()
        self.view = fplanUiView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let zipFilePath = Bundle.main.path(forResource: "Resources.bundle/demo", ofType: "zip")!
        fplanUiView.openZip(zipFilePath)
    }

    override func viewWillDisappear(_ animated: Bool) {
        fplanUiView.destoy()
    }
}

Functions

Open plan:

fplanUiView.load("https://demo.expofp.com")

Stop UIFplanView:

fplanUiView.destoy()

Select booth:

fplanUiView.selectBooth("720")

Select exhibitor:

fplanUiView.selectExhibitor("RPMXPO")

Build route:

fplanUiView.selectRoute(Route(from: "720", to: "751", exceptInaccessible: false))

Set current position(Blue-dot):

fplanUiView.setCurrentPosition(BlueDotPoint(x: 22270, y: 44900), true)

Clear floor plan:

fplanUiView.clear()

Events

Floor plan ready event

This event is called when the plan initialization process has successfully completed.

fplanUiView.setOnFpReadyCallback {
   print("[OnFpReady]")      
}

Floor plan init error event

This event is called when an error occurs while initializing the plan.

fplanUiView.setOnFpErrorCallback { errorCode, description in
   print("[OnFpError] errorCode=\(errorCode); description=\(description)")      
}

Select booth event

This event is called when a booth is clicked.

fplanUiView.setOnBoothClickCallback { id, name in
   print("[OnBoothClick] id=\(id); name=\(name)")
}

Route create event

This event is called when the route is successfully built.

fplanUiView.setOnBuildDirectionCallback { direction in
    print(direction)
}

Details open event

This event is called when opening a panel with information, it can be a panel with information about an open booth, a route, etc.

fplanUiView.setOnDetailsClickCallback { details in
   print("[OnDetailsClick]")
   print(details)
}

Exhibitor custom button click event

This event is called after clicking a custom button in the panel with information about the exhibitor.

fplanUiView.setOnExhibitorCustomButtonClickCallback { externalId, buttonNumber, buttonUrl in
   print("[OnExhibitorCustomButtonClick] externalId=\(externalId); buttonNumber=\(buttonNumber); buttonUrl=\(buttonUrl)")
}

SwiftUI

Usage

import SwiftUI
import ExpoFpFplan

@main
struct FplanApp: App {
    
    var fplanView = FplanView()
    
    var body: some Scene {
        WindowGroup {
            VStack
            {
                fplanView.onAppear{
                    fplanView.load("https://demo.expofp.com")
                }
                .onDisappear {
                    fplanView.destoy()
                }
            }
        }
    }
}

Stop FplanView.
After you finish working with FplanView, you need to stop it.
To do this, you need to call the ‘destroy’ function:

fplanView.destoy()

Offline mode

ExpoFP SDK provides the following offline modes:

  1. Default - ExpoFP SDK itself caches all the necessary data during the initial loading of the plan.

  2. Opening a zip archive with a plan - you can download the plan archive from the “Integration options” page (windows section), add this archive to your application (Resources.bundle) and then open this plan using the “openZip()” function.

Example:

import SwiftUI
import ExpoFpFplan

@main
struct FplanApp: App {
    
    var fplanView = FplanView()
    
    var body: some Scene {
        WindowGroup {
            VStack
            {
                fplanView.onAppear{
                    let zipFilePath = Bundle.main.path(forResource: "Resources.bundle/demo", ofType: "zip")!
                    fplanView.openZip(zipFilePath)
                }
                .onDisappear {
                    fplanView.destoy()
                }
            }
        }
    }
}

Functions

Open plan:

fplanView.load("https://demo.expofp.com")

Stop FplanView:

fplanView.destoy()

Select booth:

fplanView.selectBooth("720")

Select exhibitor:

fplanView.selectExhibitor("RPMXPO")

Build route:

fplanView.selectRoute(Route(from: "720", to: "751", exceptInaccessible: false))

Set current position(Blue-dot):

fplanView.setCurrentPosition(BlueDotPoint(x: 22270, y: 44900), true)

Clear floor plan:

fplanView.clear()

Events

Floor plan ready event

This event is called when the plan initialization process has successfully completed.

import SwiftUI
import ExpoFpFplan

@main
struct FplanApp: App {
    
    var fplanView = FplanView()
    
    var body: some Scene {
        WindowGroup {
            VStack
            {
                fplanView.onFpReady {
                    print("[OnFpReady]")
                }
                .onAppear {
                    fplanView.load("https://demo.expofp.com")
                }
                .onDisappear {
                    fplanView.destoy()
                }
            }
        }
    }
}

Select booth event

This event is called when a booth is clicked.

import SwiftUI
import ExpoFpFplan

@main
struct FplanApp: App {
    
    var fplanView = FplanView()
    
    var body: some Scene {
        WindowGroup {
            VStack
            {
                fplanView.onBoothClick { id, name in
                    print("[OnBoothClick] id=\(id); name=\(name)")
                }
                .onAppear {
                    fplanView.load("https://demo.expofp.com")
                }
                .onDisappear {
                    fplanView.destoy()
                }
            }
        }
    }
}

Route create event

This event is called when the route is successfully built.

import SwiftUI
import ExpoFpFplan

@main
struct FplanApp: App {
    
    var fplanView = FplanView()
    
    var body: some Scene {
        WindowGroup {
            VStack
            {
                fplanView.onBuildDirection { direction in
                    print(direction)
                }
                .onAppear {
                    fplanView.load("https://demo.expofp.com")
                }
                .onDisappear {
                    fplanView.destoy()
                }
            }
        }
    }
}

Details open event

This event is called when opening a panel with information, it can be a panel with information about an open booth, a route, etc.

import SwiftUI
import ExpoFpFplan

@main
struct FplanApp: App {
    
    var fplanView = FplanView()
    
    var body: some Scene {
        WindowGroup {
            VStack
            {
                fplanView.onDetailsClick { details in
                     print("[OnDetailsClick]")
                     print(details)
                }
                .onAppear {
                    fplanView.load("https://demo.expofp.com")
                }
                .onDisappear {
                    fplanView.destoy()
                }
            }
        }
    }
}

Exhibitor custom button click event

This event is called after clicking a custom button in the panel with information about the exhibitor.

import SwiftUI
import ExpoFpFplan

@main
struct FplanApp: App {
    
    var fplanView = FplanView()
    
    var body: some Scene {
        WindowGroup {
            VStack
            {
                fplanView.onExhibitorCustomButtonClick { externalId, buttonNumber, buttonUrl in
                    print("[OnExhibitorCustomButtonClick] externalId=\(externalId); buttonNumber=\(buttonNumber); buttonUrl=\(buttonUrl)")
                }
                .onAppear {
                    fplanView.load("https://demo.expofp.com")
                }
                .onDisappear {
                    fplanView.destoy()
                }
            }
        }
    }
}

There are 2 ways to use navigation in FplanView. The first way is to explicitly specify the provider. In this case, FplanView will start and stop the LocationProvider on its own.

let locationProvider: LocationProvider = ...
fplanView.load(URL, locationProvider: locationProvider)

The second way is to run in the background using GlobalLocationProvider when the program starts.

GlobalLocationProvider

Very often needed to run a location provider in the background, ExpoFP SDK has a GlobalLocationProvider for this. The GlobalLocationProvider runs once at program startup and work in the background.

let locationProvider: LocationProvider = ...
GlobalLocationProvider.initialize(locationProvider)
GlobalLocationProvider.start()

Using the GlobalLocationProvider in the UIFplanView(UIKit):

fplanUiView.load(URL, useGlobalLocationProvider: true)

Using the GlobalLocationProvider in the FplanView(SwiftUI):

fplanView.load(URL, useGlobalLocationProvider: true)

When the program terminates, the GlobalLocationProvider must also be stopped:

GlobalLocationProvider.stop();

CrowdConnected location provider

Setup

Сocoapods:

pod 'ExpoFpCrowdConnected', '4.1.5'

Import:

import ExpoFpCrowdConnected

Permissions(in Info.plist file):

<key>UIBackgroundModes</key>
<array>
	<string>location</string>
</array>

<key>NSLocationAlwaysUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

Initialization:

let locationProvider: LocationProvider = CrowdConnectedProvider(Settings("APP_KEY", "TOKEN", "SECRET"))

When using CrowdConnectedProvider, it is recommended to run it in the background (when the program starts) using the GlobalLocationProvider.

let locationProvider: LocationProvider = CrowdConnectedProvider(Settings("APP_KEY", "TOKEN", "SECRET"))
GlobalLocationProvider.initialize(locationProvider)
GlobalLocationProvider.start()

On initial startup, the CrowdConnectedProvider checks for permissions, if the permissions are delegated by the user then the CrowdConnectedProvider starts running, if there are no permissions, the CrowdConnectedProvider waits for any plan to open and requests the necessary permissions after the plan is opened. When opening a plan, you must specify “useGlobalLocationProvider” in the settings:

UIFplanView(UIKit):

fplanUiView.load(URL, useGlobalLocationProvider: true)

FplanView(SwiftUI):

fplanView.load(URL, useGlobalLocationProvider: true)

When the program terminates, the GlobalLocationProvider must also be stopped:

GlobalLocationProvider.stop();

Aliases

let settings = ExpoFpCrowdConnected.Settings("APP_KEY", "TOKEN", "SECRET")
settings.addAlias("KEY_1", "VALUE_1")
settings.addAlias("KEY_2", "VALUE_2")
let locationProvider: LocationProvider = CrowdConnectedProvider(settings)

IndoorAtlas location provider

Setup

Сocoapods:

pod 'ExpoFpIndoorAtlas', '4.1.5'

Import:

import ExpoFpIndoorAtlas

Permissions(in Info.plist file):

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

<key>NSLocationAlwaysUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

<key>NSBluetoothAlwaysUsageDescription</key>
<string>Bluetooth requested for better positioning experience.</string>

<key>NSBluetoothPeripheralUsageDescription</key>
<string>Bluetooth requested for better positioning experience.</string>

Initialization:

let locationProvider: LocationProvider = IndoorAtlasProvider(Settings("API_KEY", "API_SECRET_KEY"))

ExpoFP-GPS location provider

Setup

Сocoapods:

pod 'ExpoFpGpsProvider', '4.1.5'

Import:

import ExpoFpGpsProvider

Permissions(in Info.plist file):

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

<key>NSLocationAlwaysUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>Platform location requested for better indoor positioning experience.</string>

Initialization:

let locationProvider: LocationProvider = new GpsProvider(getApplication())