7.5 KiB
Integrating and Configuring PenNavUI
Importing PenNavUI
Start by importing the PenNavUI framework into your project:
import PenNavUI
Conforming to PenNavInitializationDelegate
Implement the PenNavInitializationDelegate protocol in your view controller to handle initialization events:
extension ViewController: PenNavInitializationDelegate {
func onPenNavSuccess() {
// Handle successful initialization
}
func onPenNavInitializationError(errorType: PenNavUIError, errorDescription: String) {
// Handle initialization error
}
}
Configuring PenNavUIManager
Set up PenNavUIManager with the configuration values provided by our Customer Success Team:
PenNavUIManager.shared
.setClientKey("Your Client Key")
.setClientID("Your Client ID")
.setBaseURL(dataURL: "Your Data URL", positionURL: "Your Position URL")
.setServiceName(dataServiceName: "Your Data Service Name", positionServiceName: "Your Position Service Name")
.build()
- Example with more configuration :
PenNavUIManager.shared
.setClientKey("UGVuZ3VpbklOX1Blb")
.setClientID("ClientA")
.setUsername("UserA")
.setSimulationModeEnabled(isEnable: true)
.setBaseURL(dataURL: "https://temp.client.penguinin.com", positionURL: "https://temp.client.penguinin.com")
.setServiceName(dataServiceName: "api", positionServiceName: "pe")
.setIsShowUserName(false)
.setEnableReportIssue(enable: false)
.setLanguage("en")
.build()
Presenting the Map
After successful initialization, present the map by calling:
PenNavUIManager.shared.present(root: self, view: view)
Ensure the onPenNavSuccess method includes this call:
extension ViewController: PenNavInitializationDelegate {
func onPenNavSuccess() {
PenNavUIManager.shared.present(root: self, view: view)
}
func onPenNavInitializationError(errorType: PenNavUIError, errorDescription: String) {
// Handle initialization error
}
}
Configuring the Location Delegate
To get notified when the user is off campus, conform to the PILocationDelegate protocol:
extension ViewController: PILocationDelegate {
func onLocationOffCampus(location: CLLocationCoordinate2D) {
// Handle user location being off campus
}
}
Set the locationDelegate of PenNavUIManager:
PenNavUIManager.shared.locationDelegate = self
Configuring the Events Delegate
To handle map dismissal events, conform to the PIEventsDelegate protocol:
extension ViewController: PIEventsDelegate {
func onPenNavUIDismiss() {
// Handle map dismissal
}
}
Set the eventsDelegate of PenNavUIManager:
PenNavUIManager.shared.eventsDelegate = self
Reporting Issues
Enable issue reporting and handle it using the PIEventsDelegate protocol:
PenNavUIManager.shared.setEnableReportIssue(enable: true)
extension ViewController: PIEventsDelegate {
func onReportIssue(_ issue: PenNavUI.IssueType) {
// Handle issue reporting
Instabug.show()
}
}
Set the eventsDelegate of PenNavUIManager:
PenNavUIManager.shared.eventsDelegate = self
Navigating to Places
-
Using Reference IDs:
Navigate to a place using its reference ID:
PenNavUIManager.shared.navigate(to: "referenceID", completion: { success, error in // Handle navigation result }) -
Using Deep Links:
Configure deep linking to share places:
PenNavUIManager.shared.setDeepLinkScheme("app://", deepLinkDomain: "www.penguinin.com") PenNavUIManager.shared.setDeepLinkData(data: "YourDeepLinkData")
Simulating User Location
Enable simulation mode for testing purposes:
PenNavUIManager.shared
.setClientKey("Your Client Key")
.setClientID("Your Client ID")
.setBaseURL(dataURL: "Your Data URL", positionURL: "Your Position URL")
.setServiceName(dataServiceName: "Your Data Service Name", positionServiceName: "Your Position Service Name")
.setSimulationModeEnabled(isEnable: true)
.setUsername("Your Username")
.build()
Dismissing the PenNav SDK
When the PenNav SDK is no longer needed, dismiss it to free up resources:
PenNavUIManager.shared.dismiss()
Deprecated Methods
Avoid using the following deprecated methods:
setOutdoorEnable(isEnable:)setStepDetectionEnable(isEnable:)setTransitionEnable(isEnable:)
Handling Map Initialization Errors
Here are common errors and their descriptions:
| Error | Description |
|---|---|
| Missing Base URL | Specify a valid base URL. |
| Missing Data Service Name | Provide the required data service name. |
| Missing Position Service Name | Provide the required position service name. |
| Missing Client ID | Ensure a valid client ID is provided. |
| Invalid Client Key | Verify and provide a valid client key. |
| Missing Root Controller | Ensure a valid root controller is provided. |
| Missing View Container | Provide a valid view container. |
| Unauthorized | Check your authorization for the requested action. |
| Loading Data Error | Retry loading data. |
| OS Not Supported | Ensure the operating system is supported. |
| No Internet Connection | Verify your internet connection. |
| Sensors Initialization Error | Check sensor settings and retry. |
| Permissions Not Granted | Grant all necessary permissions. |
| Location Permission Not Granted | Grant location permission. |
| Bluetooth Permission Not Granted | Grant Bluetooth permission. |
| Location Services Turned Off | Enable location services. |
| Bluetooth Turned Off | Enable Bluetooth. |
User Guide for the Demo App
Before installing and running the Demo App, configure PenNavConfigurations.plist with the values provided by our Customer Success Team:
| Key | Value |
|---|---|
| ClientKey | Provided by the Customer Success Team |
| ClientId | Provided by the Customer Success Team |
| DataUrl | Provided by the Customer Success Team |
| PositionUrl | Provided by the Customer Success Team |
| DataServiceName | Provided by the Customer Success Team |
| PositionServiceName | Provided by the Customer Success Team |