Get AssetTrackingCallback ViewController
This example will provide step-by-step guidance on:
-
Initializing Configurations with Default Values: Learn how to set up all configurations using default values, simplifying the integration process and ensuring a seamless start.
-
Creating and Binding a Simple Asset while Initiating Tracking: Discover how to create a basic asset, bind it to your application, and kickstart the tracking process, enabling real-time monitoring of asset locations.
-
Receiving AssetTrackingCallback in Your ViewController: Understand how to receive and utilize AssetTrackingCallback in your ViewController, enabling you to respond to tracking events and location updates effectively.
For all code examples, refer to iOS Tracking Android Code Examples
GetAssetCallbackViewController view source
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
class GetAssetCallbackViewController: UIViewController, AssetTrackingCallback { @IBOutlet weak var startTrackingBtn: UIButton! @IBOutlet weak var stopTrackingBtn: UIButton! @IBOutlet weak var trackingStatus: UILabel! @IBOutlet weak var locationInfo: UILabel! override func viewDidLoad() { super.viewDidLoad() AssetTracking.shared.initialize(apiKey: "YOUR_API_KEY") // Add this to confirm the protocol and receive callbacks AssetTracking.shared.delegate = self createAndBindAsset() initView() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(false, animated: true) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationController?.setNavigationBarHidden(true, animated: true) } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) AssetTracking.shared.stopTracking() } func initView(){ startTrackingBtn.addTarget(self, action: #selector(startTracking), for: .touchUpInside) stopTrackingBtn.addTarget(self, action: #selector(stopTracking), for: .touchUpInside) trackingStatus.text = "" locationInfo.text = "" } func createAndBindAsset(){ let attributes = ["attribute 1": "test 1", "attribute 2": "test 2"] let assetProfile: AssetProfile = AssetProfile.init(customId: UUID().uuidString.lowercased(), assetDescription: "testDescription", name: "testName", attributes: attributes) AssetTracking.shared.createAsset(assetProfile: assetProfile) { assetCreationResponse in let assetId = assetCreationResponse.data.id let toastView = ToastView(message: "Create asset successfully with id: " + assetId) toastView.show() self.bindAsset(assetId: assetId) } errorHandler: { error in let errorMessage = error.localizedDescription let toastView = ToastView(message: "Create asset failed: " + errorMessage) toastView.show() } } func bindAsset(assetId: String) { AssetTracking.shared.bindAsset(assetId: assetId) { responseCode in let toastView = ToastView(message: "Bind asset successfully with id: " + assetId) toastView.show() } errorHandler: { error in let errorMessage = error.localizedDescription let toastView = ToastView(message: "Bind asset failed: " + errorMessage) toastView.show() } } @objc func startTracking() { AssetTracking.shared.startTracking() } @objc func stopTracking() { AssetTracking.shared.stopTracking() } func onTrackingStart(assetId: String) { updateTrackingStatus() } func onTrackingStop(assetId: String, trackingDisableType: NBAssetTracking.TrackingDisableType) { updateTrackingStatus() } func onLocationSuccess(location: CLLocation) { locationInfo.text = """ --------- Location Info --------- Latitude: \(location.coordinate.latitude) Longitude: \(location.coordinate.longitude) Altitude: \(location.altitude) Accuracy: \(location.horizontalAccuracy) Speed: \(location.speed) Bearing: \(location.course) Time: \(location.timestamp) """ } func onLocationFailure(error: Error) { locationInfo.text = "Failed to get location data: " + error.localizedDescription } func onLocationServiceOff() { showLocationAlert() } func showLocationAlert() { let alert = UIAlertController(title: "Location Services Disabled", message: "To enable location services, please go to Settings > Privacy > Location Services.", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil)) present(alert, animated: true, completion: nil) } func updateTrackingStatus() { let assetTrackingRunning = AssetTracking.shared.isRunning() trackingStatus.text = "Tracking Status: \(assetTrackingRunning ? "ON" : "OFF")" if !assetTrackingRunning { locationInfo.text = "" } } }
Upon executing the code example provided above, your app's appearance will resemble the following snippet:

Code Highlights
The above code snippet is a class inherited from the UIViewController class, which is the base class for all view controllers in iOS.
-
The class also conforms to the AssetTrackingCallback protocol, which means that the class will receive callbacks from the AssetTracking class.
-
The class has four outlet properties: startTrackingBtn, stopTrackingBtn, trackingStatus, and locationInfo. These properties are linked to the corresponding UI elements in the view controller's storyboard.
-
The class has two methods to start and stop tracking the asset. These methods call the AssetTracking.shared.startTracking() and AssetTracking.shared.stopTracking() methods, respectively.
-
The class has six methods to handle the callbacks from the AssetTracking class. These methods are:
-
onTrackingStart(assetId: String): This method is called when the tracking for the asset starts.
-
onTrackingStop(assetId: String, trackingDisableType: NBAssetTracking.TrackingDisableType): This method is called when the tracking for the asset stops.
-
onLocationSuccess(location: CLLocation): This method is called when the location of the asset is successfully retrieved.
-
onLocationFailure(error: Error): This method is called when the location of the asset cannot be retrieved.
-
onLocationServiceOff(): This method is called when the location services are turned off.
-
showLocationAlert(): This method shows an alert to the user to turn on the location services.
-
Here is a more detailed explanation of some of the key concepts in the code:
-
AssetTracking: This is the class that is responsible for tracking assets.
-
AssetTrackingCallback: This is a protocol that must be adopted by classes that want to receive callbacks from the AssetTracking class.
-
CLLocation: This is a class that represents a location on Earth.