In this page

Simple Asset Tracking Example

This example guides you through the following steps:

  1. Initialization with Customized Configurations: Learn how to set up the SDK with customized configuration values, tailoring it to your specific requirements and preferences.

  2. Updating Configuration Settings at Runtime: Discover how to dynamically modify configuration settings such as LocationConfig, NotificationConfig, and DataTrackingConfig during the execution of your application. This flexibility empowers you to adapt the SDK to changing conditions and user needs in real time.

For all code examples, refer to iOS Tracking Android Code Examples

UpdateConfigurationViewController view source

1class UpdateConfigurationViewController: UIViewController {
2    @IBOutlet weak var updateLocationConfigBtn: UIButton!
3    @IBOutlet weak var updateNotificationConfigBtn: UIButton!
4    @IBOutlet weak var updateDataTrackingConfigBtn: UIButton!
5    @IBOutlet weak var configurationInfo: UILabel!
6    
7    override func viewDidLoad() {
8        super.viewDidLoad()
9        let assetTracking = AssetTracking.shared
10        
11        let locationConfig = LocationConfig(trackingMode: .ACTIVE)
12        locationConfig.distanceFilter = 5
13        assetTracking.setLocationConfig(config: locationConfig)
14        
15        let notificationConfig = NotificationConfig()
16        notificationConfig.showLowBatteryNotification = true
17        assetTracking.setNotificationConfig(config: notificationConfig)
18        
19        let dataTrackingConfig = DataTrackingConfig()
20        dataTrackingConfig.shouldClearLocalDataWhenCollision = false
21        assetTracking.setDataTrackingConfig(config: dataTrackingConfig)
22        
23        assetTracking.initialize(apiKey: "YOUR_API_KEY")
24        
25        createAsset()
26        initView()
27    }
28    
29    override func viewWillAppear(_ animated: Bool) {
30        super.viewWillAppear(animated)
31        self.navigationController?.setNavigationBarHidden(false, animated: true)
32    }
33    
34    override func viewWillDisappear(_ animated: Bool) {
35        super.viewWillDisappear(animated)
36        self.navigationController?.setNavigationBarHidden(true, animated: true)
37    }
38    
39    func initView(){
40        updateLocationConfigBtn.addTarget(self, action: #selector(updateLocationConfig), for: .touchUpInside)
41        updateNotificationConfigBtn.addTarget(self, action: #selector(updateNotificationConfig), for: .touchUpInside)
42        updateDataTrackingConfigBtn.addTarget(self, action: #selector(updateDataTrackingConfig), for: .touchUpInside)
43        configurationInfo.text = ""
44    }
45    
46    @objc  func updateLocationConfig(){
47        let locationConfig = AssetTracking.shared.getLocationConfig()
48        locationConfig.distanceFilter = 10
49        
50        AssetTracking.shared.updateLocationConfig(config: locationConfig)
51        
52        let newLocationConfig = AssetTracking.shared.getLocationConfig()
53        
54        configurationInfo.text = "The updated location config value is: " + String(newLocationConfig.distanceFilter)
55    }
56    
57    @objc func updateNotificationConfig() {
58        let notificationConfig = AssetTracking.shared.getNotificationConfig()
59        notificationConfig.showLowBatteryNotification = true
60        
61        AssetTracking.shared.updateNotificationConfig(config: notificationConfig)
62        
63        let newNotificationConfig = AssetTracking.shared.getNotificationConfig()
64        
65        configurationInfo.text = "The updated notificationConfig config value is: " + String(newNotificationConfig.showLowBatteryNotification)
66    }
67    
68    @objc func updateDataTrackingConfig() {
69        let dataTrackingConfig = AssetTracking.shared.getDataTrackingConfig()
70        dataTrackingConfig.shouldClearLocalDataWhenCollision = true
71        
72        AssetTracking.shared.updateDataTrackingConfig(config: dataTrackingConfig)
73        
74        let newDataTrackingConfig = AssetTracking.shared.getDataTrackingConfig()
75        
76        configurationInfo.text = "The updated dataTrackingConfig config value is: " + String(newDataTrackingConfig.shouldClearLocalDataWhenCollision)
77    }
78    
79    
80    func createAsset(){
81        let attributes = ["attribute 1": "test 1", "attribute 2": "test 2"]
82        let assetProfile: AssetProfile = AssetProfile.init(customId: UUID().uuidString.lowercased(), assetDescription: "testDescription", name: "testName", attributes: attributes)
83        
84        AssetTracking.shared.createAsset(assetProfile: assetProfile) { assetCreationResponse in
85            let assetId = assetCreationResponse.data.id
86            
87            let toastView = ToastView(message: "Create asset successfully with id: " + assetId)
88            toastView.show()
89            
90            self.bindAssetAndStartTracking(assetId: assetId)
91        } errorHandler: { error in
92            let errorMessage = error.localizedDescription
93            let toastView = ToastView(message: "Create asset failed: " + errorMessage)
94            toastView.show()
95        }
96    }
97    
98    func bindAssetAndStartTracking(assetId: String) {
99        AssetTracking.shared.bindAsset(assetId: assetId) { responseCode in
100            let toastView = ToastView(message: "Bind asset successfully with id: " + assetId)
101            toastView.show()
102            AssetTracking.shared.startTracking()
103        } errorHandler: { error in
104            let errorMessage = error.localizedDescription
105            let toastView = ToastView(message: "Bind asset failed: " + errorMessage)
106            toastView.show()
107        }
108    }
109    
110}

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 has three outlet properties: updateLocationConfigBtn, updateNotificationConfigBtn, and updateDataTrackingConfigBtn. These properties are linked to the corresponding UI elements in the view controller's storyboard.

  2. The class has three methods to update the location configuration, notification configuration, and data tracking configuration, respectively. These methods call the AssetTracking.shared.updateLocationConfig(), AssetTracking.shared.updateNotificationConfig(), and AssetTracking.shared.updateDataTrackingConfig() methods, respectively.

  3. The class has a createAsset() method to create a new asset.

  4. The class has a bindAssetAndStartTracking() method to bind the asset to the current view controller and start tracking it.

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. LocationConfig: This class represents the configuration for location tracking.

  3. NotificationConfig: This class represents the configuration for notification settings.

  4. DataTrackingConfig: This class represents the configuration for data tracking settings.

DIDN'T FIND WHAT YOU LOOKING FOR?