In this page

Get AssetTrackingCallback ViewController

This example will provide step-by-step guidance on:

  1. Initializing Configurations with Default Values: Learn how to set up all configurations using default values, simplifying the integration process and ensuring a seamless start.

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

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

1class GetAssetCallbackViewController: UIViewController, AssetTrackingCallback {
2    @IBOutlet weak var startTrackingBtn: UIButton!
3    @IBOutlet weak var stopTrackingBtn: UIButton!
4    @IBOutlet weak var trackingStatus: UILabel!
5    @IBOutlet weak var locationInfo: UILabel!
6    
7    override func viewDidLoad() {
8        super.viewDidLoad()
9        AssetTracking.shared.initialize(apiKey: "YOUR_API_KEY")
10        
11        // Add this to confirm the protocol and receive callbacks
12        AssetTracking.shared.delegate = self
13
14        createAndBindAsset()
15        initView()
16    }
17    
18    override func viewWillAppear(_ animated: Bool) {
19        super.viewWillAppear(animated)
20        self.navigationController?.setNavigationBarHidden(false, animated: true)
21    }
22    
23    override func viewWillDisappear(_ animated: Bool) {
24        super.viewWillDisappear(animated)
25        self.navigationController?.setNavigationBarHidden(true, animated: true)
26    }
27    
28    override func viewDidDisappear(_ animated: Bool) {
29        super.viewDidDisappear(animated)
30        AssetTracking.shared.stopTracking()
31    }
32    
33    func initView(){
34        startTrackingBtn.addTarget(self, action: #selector(startTracking), for: .touchUpInside)
35        stopTrackingBtn.addTarget(self, action: #selector(stopTracking), for: .touchUpInside)
36        trackingStatus.text = ""
37        locationInfo.text = ""
38    }
39    
40    func createAndBindAsset(){
41        let attributes = ["attribute 1": "test 1", "attribute 2": "test 2"]
42        let assetProfile: AssetProfile = AssetProfile.init(customId: UUID().uuidString.lowercased(), assetDescription: "testDescription", name: "testName", attributes: attributes)
43        
44        AssetTracking.shared.createAsset(assetProfile: assetProfile) { assetCreationResponse in
45            let assetId = assetCreationResponse.data.id
46            
47            let toastView = ToastView(message: "Create asset successfully with id: " + assetId)
48            toastView.show()
49            
50            self.bindAsset(assetId: assetId)
51        } errorHandler: { error in
52            let errorMessage = error.localizedDescription
53            let toastView = ToastView(message: "Create asset failed: " + errorMessage)
54            toastView.show()
55        }
56    }
57    
58    func bindAsset(assetId: String) {
59        AssetTracking.shared.bindAsset(assetId: assetId) { responseCode in
60            let toastView = ToastView(message: "Bind asset successfully with id: " + assetId)
61            toastView.show()
62        } errorHandler: { error in
63            let errorMessage = error.localizedDescription
64            let toastView = ToastView(message: "Bind asset failed: " + errorMessage)
65            toastView.show()
66        }
67    }
68    
69    @objc func startTracking() {
70        AssetTracking.shared.startTracking()
71    }
72    
73    @objc func stopTracking() {
74        AssetTracking.shared.stopTracking()
75    }
76    
77    func onTrackingStart(assetId: String) {
78        updateTrackingStatus()
79    }
80    
81    func onTrackingStop(assetId: String, trackingDisableType: NBAssetTracking.TrackingDisableType) {
82        updateTrackingStatus()
83    }
84    
85    func onLocationSuccess(location: CLLocation) {
86        locationInfo.text = """
87                        --------- Location Info ---------
88            Latitude: \(location.coordinate.latitude)
89            Longitude: \(location.coordinate.longitude)
90            Altitude: \(location.altitude)
91            Accuracy: \(location.horizontalAccuracy)
92            Speed: \(location.speed)
93            Bearing: \(location.course)
94            Time: \(location.timestamp)
95            """
96    }
97    
98    func onLocationFailure(error: Error) {
99        locationInfo.text = "Failed to get location data: " + error.localizedDescription
100    }
101    
102    func onLocationServiceOff() {
103        showLocationAlert()
104    }
105    
106    func showLocationAlert() {
107        let alert = UIAlertController(title: "Location Services Disabled", message: "To enable location services, please go to Settings > Privacy > Location Services.", preferredStyle: .alert)
108        alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: nil))
109        
110        present(alert, animated: true, completion: nil)
111    }
112    
113    func updateTrackingStatus() {
114        let assetTrackingRunning = AssetTracking.shared.isRunning()
115        trackingStatus.text = "Tracking Status: \(assetTrackingRunning ? "ON" : "OFF")"
116        if !assetTrackingRunning {
117            locationInfo.text = ""
118        }
119    }
120}

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.

  1. The class also conforms to the AssetTrackingCallback protocol, which means that the class will receive callbacks from the AssetTracking class.

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

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

  4. The class has six methods to handle the callbacks from the AssetTracking class. These methods are:

    1. onTrackingStart(assetId: String): This method is called when the tracking for the asset starts.

    2. onTrackingStop(assetId: String, trackingDisableType: NBAssetTracking.TrackingDisableType): This method is called when the tracking for the asset stops.

    3. onLocationSuccess(location: CLLocation): This method is called when the location of the asset is successfully retrieved.

    4. onLocationFailure(error: Error): This method is called when the location of the asset cannot be retrieved.

    5. onLocationServiceOff(): This method is called when the location services are turned off.

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

  1. AssetTracking: This is the class that is responsible for tracking assets.

  2. AssetTrackingCallback: This is a protocol that must be adopted by classes that want to receive callbacks from the AssetTracking class.

  3. CLLocation: This is a class that represents a location on Earth.

DIDN'T FIND WHAT YOU LOOKING FOR?