Usage Examples for iOS apps
1. Documentation
In Swift, the SDK is used through the TelematicsSDKios class. In Objective-C, use the TelematicsSDKObjC class, which exposes the same functionality with completion blocks and Objective-C compatible types.
2. Usage
Here you have some usage examples of the TelematicsSDK.
A typical integration follows this flow:
- Initialize the SDK with the user's tokens (2.1).
- Register the vehicle (2.3).
- Make sure all permissions are granted (2.5).
- Start the telematics service (2.6).
2.1 Initialization
Initialize the SDK when your application starts.
The SDK is initialized with the access token and refresh token of the authenticated user, together with the base URL of the telematics platform provided by Sentilant. These values are obtained by your application from your authentication backend.
| Option | Required | Description |
|---|---|---|
baseURL | Yes | Base URL of the telematics platform. A host (telematics.example.com) or a full URL (https://telematics.example.com) is accepted. |
token | Yes | Access token of the user. |
tokenExpires | No | Expiry of the access token, as an ISO 8601 timestamp (e.g. 2026-11-03T12:43:29.562522Z). |
refreshToken | No | Refresh token of the user. Supplying it enables automatic token renewal. |
refreshTokenExpires | No | Expiry of the refresh token, as an ISO 8601 timestamp. |
When a refresh token is supplied, the SDK renews the access token on its own, before it expires or when the server rejects it. Your application does not need to provide new tokens while the session remains valid. Without a refresh token, the SDK uses the access token as-is until it stops working.
TelematicsTokenInitOptions throws a TelematicsInitOptionsError if the base URL or the token is empty, if the base URL is not valid, or if an expiry is not a valid ISO 8601 timestamp.
After a successful initialization, the SDK retrieves the authenticated user automatically. No additional login call is required.
The SDK cannot renew tokens while the app is not running. Choose a refresh token lifetime long enough for your usage pattern, and handle re-authentication as described in 2.2 Session lifecycle.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
let sdk = TelematicsSDKios()
do {
let options = try TelematicsTokenInitOptions(
baseURL: "TELEMATICS_BASE_URL",
token: "ACCESS_TOKEN",
tokenExpires: "ACCESS_TOKEN_EXPIRES",
refreshToken: "REFRESH_TOKEN",
refreshTokenExpires: "REFRESH_TOKEN_EXPIRES"
)
sdk.initSDK(options: options) { (error: TelematicsSDKException?) in
if let error = error {
// Handle initialization error
} else {
// Initialization succeeded
}
}
} catch {
// Invalid options (TelematicsInitOptionsError)
}
@import TelematicsSDK;
TelematicsSDKObjC *sdk = [TelematicsSDKObjC new];
[sdk initSDKWithBaseURL:@"TELEMATICS_BASE_URL"
accessToken:@"ACCESS_TOKEN"
accessTokenExpires:@"ACCESS_TOKEN_EXPIRES"
refreshToken:@"REFRESH_TOKEN"
refreshTokenExpires:@"REFRESH_TOKEN_EXPIRES"
completion:^(TSDKErrorObjC * _Nullable error) {
if (error) {
// Handle initialization error (including invalid options)
} else {
// Initialization succeeded
}
}];
2.2 Session lifecycle
Authentication invalidated
Set the onAuthenticationInvalidated callback to be notified when the SDK can no longer authenticate.
| Reason | Objective-C value | Session destroyed | Description |
|---|---|---|---|
.refreshTokenExpired | 0 | Yes | The refresh token expired. |
.refreshTokenRejected | 1 | Yes | The server rejected the refresh token. |
.accountInactive | 2 | No | The user account is inactive. The credentials remain valid. |
.accessDenied | 3 | No | The server refused access. The credentials remain valid. |
.accessTokenRejected | 4 | Yes | The server rejected the access token of a session without a refresh token. |
reason.invalidatesSession is true when the session was destroyed. In that case the SDK has already stopped telemetry and removed the user and vehicle. To restore the session:
- obtain new tokens and call
initSDKagain; - set the vehicle again (
setVehicle); - call
startTelematicsServiceagain. Telemetry does not restart by itself.
Data collected before the invalidation is kept on the device and is uploaded automatically once the session is restored.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
sdk.onAuthenticationInvalidated = { (reason: TelematicsAuthInvalidationReason) in
if reason.invalidatesSession {
// Session destroyed: obtain new tokens, call initSDK, setVehicle and startTelematicsService
} else {
// Access refused (e.g. inactive account): the session is kept
}
}
@import TelematicsSDK;
sdk.onAuthenticationInvalidated = ^(NSInteger reason) {
// 0 = refreshTokenExpired, 1 = refreshTokenRejected, 2 = accountInactive,
// 3 = accessDenied, 4 = accessTokenRejected
BOOL sessionDestroyed = (reason == 0 || reason == 1 || reason == 4);
if (sessionDestroyed) {
// Session destroyed: obtain new tokens, call initSDK, setVehicle and startTelematicsService
} else {
// Access refused (e.g. inactive account): the session is kept
}
};
Session state
getSessionState() returns what the SDK knows about its session, without making any request. It can be called from any thread.
| Status | Objective-C value | Description |
|---|---|---|
.notAuthenticated | 0 | No credentials: the SDK was never initialized, or the user logged out. |
.verified | 1 | The server accepted the current access token (at lastVerifiedAt). |
.unverified | 2 | There are credentials, but the server has not confirmed them yet. |
.denied | 3 | The server refused access (e.g. inactive account). New credentials would not help. |
.invalid | 4 | The server rejected the session. New tokens must be provided through initSDK. |
The returned TelematicsSessionState also exposes:
invalidationReason: the reason for the.invalidor.deniedstatus, ornil.isAutoRenewing:trueif the SDK holds a refresh token and renews the access token on its own.recoverableUntil: until when the session can be kept alive without new tokens (ISO 8601), ornilif unknown.lastVerifiedAt: when the server last accepted the access token (ISO 8601), ornil.
The status reflects the last answer from the server, not a live check.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
let state = sdk.getSessionState()
if state.status == .invalid {
// Obtain new tokens and call initSDK again
}
@import TelematicsSDK;
TSDKSessionStateObjC *state = [sdk getSessionState];
if (state.status == 4) { // invalid
// Obtain new tokens and call initSDK again
}
Current user
Retrieve the identifier and the name of the authenticated user using getCurrentUserInfo:
- Swift
- Objective-C
import Foundation
import TelematicsSDK
sdk.getCurrentUserInfo(
success: { (userId: Int, userName: String) in
// Current user fetched successfully
},
failure: { (error: TelematicsSDKException) in
// Handle error fetching current user
}
)
@import TelematicsSDK;
[sdk getCurrentUserInfoWithSuccess:^(NSNumber *userId, NSString *userName) {
// Current user fetched successfully
} failure:^(TSDKErrorObjC *error) {
// Handle error fetching current user
}];
Logout
logout() ends the session of the current user. It:
- stops telemetry, if the telematics service is running;
- tries to send the telemetry data still stored on the device to the server;
- ends the session, removing the credentials, the user and the vehicle from the SDK.
Data that could not be sent before the session ended (for example, without network) is kept on the device and is sent after the next successful initSDK.
After logout, the session state is .notAuthenticated. To use the SDK again, call initSDK with the tokens of the new session.
- Swift
- Objective-C
sdk.logout()
[sdk logout];
2.3 Vehicle Management
Set the user vehicle using the setVehicle method. The vehicle type, add reason and fuel type are identifier codes returned by getVehicleTypes, getAddVehicleReasons and getFuelTypes. Each of these methods returns a dictionary where the key is the name and the value is the identifier code. In Swift these methods are async; in Objective-C they use a completion block.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
Task {
let fuelTypes = await sdk.getFuelTypes() // e.g. ["Diesel": 1, "Gasoline": 2, ...]
let vehicleTypes = await sdk.getVehicleTypes()
let addReasons = await sdk.getAddVehicleReasons()
guard let fuelType = fuelTypes.values.first,
let vehicleType = vehicleTypes.values.first,
let addReason = addReasons.values.first else {
return
}
sdk.setVehicle(plate: "plate123", internalPlate: "internalPlate", type: vehicleType, addReason: addReason, fuelType: fuelType) { (result: TelematicsSDKException?) in
DispatchQueue.main.async {
if let result = result {
// Handle error setting vehicle
} else {
// Vehicle set successfully
}
}
}
}
@import TelematicsSDK;
[sdk getFuelTypesWithCompletion:^(NSDictionary<NSString *, NSNumber *> * _Nonnull fuelTypes) {
NSNumber *fuelType = fuelTypes.allValues.firstObject;
[sdk getVehicleTypesWithCompletion:^(NSDictionary<NSString *, NSNumber *> * _Nonnull vehicleTypes) {
NSNumber *vehicleType = vehicleTypes.allValues.firstObject;
[sdk getAddVehicleReasonsWithCompletion:^(NSDictionary<NSString *, NSNumber *> * _Nonnull addReasons) {
NSNumber *addReason = addReasons.allValues.firstObject;
if (!fuelType || !vehicleType || !addReason) {
// Handle missing static data
return;
}
[sdk setVehicleWithPlate:@"plate123"
internalPlate:@"internalPlate"
type:vehicleType.integerValue
addReason:addReason.integerValue
fuelType:fuelType.integerValue
completion:^(TSDKErrorObjC * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
// Handle error setting vehicle
} else {
// Vehicle set successfully
}
});
}];
}];
}];
}];
If the vehicle already exists, it can be set by its license plate only. The vehicle details are returned on success, or an error if no vehicle with that plate exists:
- Swift
- Objective-C
import Foundation
import TelematicsSDK
sdk.setVehicle(
plate: "plate123",
success: { (vehicle: TelematicsVehicleDetails) in
// Vehicle set successfully
},
failure: { (error: TelematicsSDKException) in
// Vehicle not found or error setting vehicle
}
)
@import TelematicsSDK;
[sdk setVehicleWithPlate:@"plate123"
success:^(TSDKVehicleDetailsObjC *vehicle) {
// Vehicle set successfully
} failure:^(TSDKErrorObjC *error) {
// Vehicle not found or error setting vehicle
}];
Other vehicle methods:
getCurrentVehicleInfo(success:failure:): returns the details of the current vehicle, or an error if no vehicle is set.clearVehicle(): removes the current vehicle from the SDK.
2.4 Report vehicle kms
Report the vehicle's current kilometers using the reportKilometers method:
- Swift
- Objective-C
import Foundation
import TelematicsSDK
sdk.reportKilometers(kilometers: 1200, observations: "Routine check") { (result: TelematicsSDKException?) in
DispatchQueue.main.async {
if let result = result {
// Handle error reporting kilometers
} else {
// Kilometers reported successfully
}
}
}
@import TelematicsSDK;
[sdk reportKilometersWithKilometers:1200
observations:@"Routine check"
completion:^(TSDKErrorObjC * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
// Handle error reporting kilometers
} else {
// Kilometers reported successfully
}
});
}];
Other kilometer methods:
correctKilometers(kilometers:observations:correctionCount:callback:): corrects the odometer reading, applying the value to the given number of past records.getEstimatedMileage(): returns the estimated current mileage in kilometers, or-1if it cannot be estimated.
2.5 Permission Handling
Check the permissions manually using the checkPermissions and getRequiredPermissions methods:
- Swift
- Objective-C
import Foundation
import TelematicsSDK
let missingPermissions = sdk.checkPermissions()
if missingPermissions.isEmpty {
// All required permissions are granted
} else {
// Request missing permissions
}
let requiredPermissions = sdk.getRequiredPermissions()
// requiredPermissions = ["Location Permission", "Background Location Permission", "Motion and Fitness Permission"]
@import TelematicsSDK;
NSArray<NSString *> *missingPermissions = [sdk checkPermissions];
if (missingPermissions.count == 0) {
// All required permissions are granted
} else {
// Request missing permissions
}
NSArray<NSString *> *requiredPermissions = [sdk getRequiredPermissions];
// requiredPermissions = @[
// @"Location Permission",
// @"Background Location Permission",
// @"Motion and Fitness Permission"
// ];
To react to permission changes while the app is running, see 2.12 Permission Callbacks.
2.6 Telematics Service
Start and stop the telematics service as needed. Before starting, the SDK validates that the session is valid, that a user and a vehicle are set and that all permissions are granted. If any of these checks fails, the service is not started and the callback receives an error. In Swift, startTelematicsService is async.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
// Start the service
Task {
await sdk.startTelematicsService { (result: TelematicsSDKException?) in
DispatchQueue.main.async {
if let result = result {
// Handle error starting telematics service
} else {
// Telematics service successfully started
}
}
}
}
// Check if the service is running
let isRunning = sdk.isTelematicsServiceRunning()
// Stop the service
sdk.stopTelematicsService { (result: TelematicsSDKException?) in
DispatchQueue.main.async {
if let result = result {
// Handle error stopping telematics service
} else {
// Telematics service successfully stopped
}
}
}
@import TelematicsSDK;
// Start the service
[sdk startTelematicsServiceWithCompletion:^(TSDKErrorObjC * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
// Handle error starting telematics service
} else {
// Telematics service successfully started
}
});
}];
// Check if the service is running
BOOL isRunning = [sdk isTelematicsServiceRunning];
// Stop the service
[sdk stopTelematicsServiceWithCompletion:^(TSDKErrorObjC * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
// Handle error stopping telematics service
} else {
// Telematics service successfully stopped
}
});
}];
setServiceCode(serviceCode:callback:) changes the service code used by the telematics service.
2.7 Attention Detection
While the telematics service is running, the SDK can detect on the device, using a machine learning model, when the user is handling the phone while driving. Each detection produces an attention event.
- Attention detection is enabled by default and runs only while the telematics service is running, including when telemetry is restored after the app is relaunched.
- Use
setAttentionDetectionEnabled(false)to disable it. The choice is persisted and applies immediately if the service is running. While disabled, no detection work is done, which reduces battery usage. Telemetry collection is not affected. - Attention events are stored on the device and uploaded to the platform automatically, in the same way as telemetry data.
- Each event covers a 10 second window. A new window starts every 5 seconds, so a continuous distraction produces several events.
Set the onAttentionEvent callback to receive the events in your application. It is called on the main thread. Setting a new callback replaces the previous one; set it to nil to stop receiving events. Events detected while no callback is set are not delivered later.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
sdk.onAttentionEvent = { (event: TelematicsAttentionEvent) in
// event.type -> .phoneDistraction
// event.startDate / event.endDate -> window
// event.confidence -> 0...1
}
// Enable or disable attention detection
sdk.setAttentionDetectionEnabled(true)
let enabled = sdk.isAttentionDetectionEnabled
@import TelematicsSDK;
sdk.onAttentionEvent = ^(TSDKAttentionEventObjC *event) {
// event.type -> @"phone_distraction"
// event.startTimestampMs / event.endTimestampMs -> window, epoch milliseconds
// event.confidence -> 0...1
};
// Enable or disable attention detection
[sdk setAttentionDetectionEnabled:YES];
BOOL enabled = sdk.isAttentionDetectionEnabled;
TelematicsAttentionEvent fields:
| Field | Type | Description |
|---|---|---|
id | UUID | Unique identifier of the event. |
type | TelematicsAttentionEventType | Event type. Currently .phoneDistraction. |
startTimestampMs / endTimestampMs | Int64 | Start and end of the window, epoch milliseconds. Also available as startDate / endDate. |
confidence | Double | Detection confidence, from 0 to 1. |
averageSpeedMps | Double? | Mean GPS speed during the window in m/s. |
latitude / longitude | Double? | Position of the first valid GPS fix in the window. |
horizontalAccuracyM | Double? | Horizontal accuracy of that fix in meters. |
locationTimestampMs | Int64? | Time of that fix, epoch milliseconds. |
detectorVersion | String | Identifier of the detector that produced the event. |
toDictionary() returns the event as a dictionary with the same keys used on Android and React Native. In Objective-C, TSDKAttentionEventObjC exposes the same fields (optional values as NSNumber) and the dictionary in dictionary.
2.8 Trips
Retrieves the trips list for an optional date range.
startTs and endTs are provided as Date/NSDate and are sent to the backend as UTC ISO-8601 query parameters. If both values are nil, the SDK calls the endpoint without date filters and tries to return all trips.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
// Example: fetch trips from the last 7 days until now
let endTs = Date()
let startTs = Calendar.current.date(byAdding: .day, value: -7, to: endTs)
// If you want no filtering, pass nil for both.
sdk.getTripsList(
startTs: startTs,
endTs: endTs,
success: { trips in
DispatchQueue.main.async {
// trips: [TelematicsTripResume]
print("Trips count: \(trips.count)")
}
},
failure: { error in
DispatchQueue.main.async {
print("Failed to get trips list: \(error)")
}
}
)
@import TelematicsSDK;
// Example: fetch trips from the last 7 days until now
NSDate *endTs = [NSDate date];
NSDate *startTs = [NSCalendar.currentCalendar dateByAddingUnit:NSCalendarUnitDay
value:-7
toDate:endTs
options:0];
// If you want no filtering, pass nil for both.
[sdk getTripsListWithStartTs:startTs
endTs:endTs
success:^(NSArray<TSDKTripResumeObjC *> *trips) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Trips count: %lu", (unsigned long)trips.count);
});
} failure:^(TSDKErrorObjC *error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Failed to get trips list: %@", error);
});
}];
To retrieve the details of a single trip, use getTripById(tripId:includeSamples:success:failure:), which returns a TelematicsTripDetails. Set includeSamples to true to include the trip samples in the response.
2.9 User metrics summary
Retrieves the user metrics summary for an optional date range.
startTs and endTs are provided as Date/NSDate and are sent to the backend as UTC ISO-8601 query parameters. If both values are nil, the SDK calls the endpoint without date filters.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
// Example: fetch metrics for the current month
let calendar = Calendar.current
let now = Date()
let startOfMonth = calendar.date(from: calendar.dateComponents([.year, .month], from: now))
let endTs = now
sdk.getMetricsSummary(
startTs: startOfMonth,
endTs: endTs,
success: { metrics in
DispatchQueue.main.async {
// metrics: TelematicsMetricsSummary
print("Metrics summary: \(metrics)")
}
},
failure: { error in
DispatchQueue.main.async {
print("Failed to get metrics summary: \(error)")
}
}
)
@import TelematicsSDK;
// Example: fetch metrics for the current month
NSDate *now = [NSDate date];
NSDateComponents *components = [NSCalendar.currentCalendar components:(NSCalendarUnitYear | NSCalendarUnitMonth)
fromDate:now];
NSDate *startOfMonth = [NSCalendar.currentCalendar dateFromComponents:components];
[sdk getMetricsSummaryWithStartTs:startOfMonth
endTs:now
success:^(TSDKMetricsSummaryObjC *metrics) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Metrics summary: %@", metrics);
});
} failure:^(TSDKErrorObjC *error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Failed to get metrics summary: %@", error);
});
}];
getActivityMetricsSummary(startTs:endTs:success:failure:) returns the activity metrics summary (TelematicsActivityMetricsSummary) for an optional date range.
2.10 Telematics Periods
Retrieve the telematics periods within an optional date range. isProcessed filters by processed state and can be nil.
getTelematicsPeriods(startTs:endTs:isProcessed:page:success:failure:): one page of periods (TelematicsPeriodsPage).pagecan benilto use the default page. An overload withoutpageis also available.getAllTelematicsPeriods(startTs:endTs:isProcessed:success:failure:): the full list of periods.getTelematicsPeriod(id:success:failure:): the details of a single period.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
let endTs = Date()
let startTs = Calendar.current.date(byAdding: .month, value: -1, to: endTs)
sdk.getAllTelematicsPeriods(
startTs: startTs,
endTs: endTs,
isProcessed: nil,
success: { (periods: [TelematicsPeriod]) in
// Telematics periods fetched successfully
},
failure: { (error: TelematicsSDKException) in
// Handle error fetching telematics periods
}
)
@import TelematicsSDK;
NSDate *endTs = [NSDate date];
NSDate *startTs = [NSCalendar.currentCalendar dateByAddingUnit:NSCalendarUnitMonth
value:-1
toDate:endTs
options:0];
[sdk getAllTelematicsPeriodsWithStartTs:startTs
endTs:endTs
isProcessed:nil
success:^(NSArray<TSDKTelematicsPeriodObjC *> *periods) {
// Telematics periods fetched successfully
} failure:^(TSDKErrorObjC *error) {
// Handle error fetching telematics periods
}];
2.11 Manual Events
Manual events allow the user to mark, during a trip, the moment a specific driving event happened (for example, a hard braking or a distraction).
The SDK records the event type with the current time and the latest location collected by the SDK, and sends it to the server. The event is therefore meant to be inserted while a trip is being recorded.
Later, when analysing the trip, the manual events can be compared with the events detected automatically by the SDK. For example, if a manual distraction event is marked at minute 10 of a trip, you can check whether a distraction event was also detected at that minute, and use this comparison to validate the trip and assess the reliability of the event detection.
Register a manual event using insertManualEvent. The available types are defined in TelematicsManualEventType: .abruptAccelerationHighSpeed, .abruptAccelerationLowSpeed, .hardBrakingHighSpeed, .hardBrakingLowSpeed, .hardCornering, .speeding, .distraction, .walking, .driving, .stopped, .tripStart and .tripEnd.
import Foundation
import TelematicsSDK
Task {
await sdk.insertManualEvent(eventType: .hardBrakingHighSpeed) { (result: TelematicsSDKException?) in
if let result = result {
// Handle error inserting the event
}
}
}
2.12 Permission Callbacks
The SDK exposes three callbacks that allow the application to react to permission changes and telemetry interruptions while the app is running. See Permissions Runtime Behavior for details.
- Swift
- Objective-C
import Foundation
import TelematicsSDK
// Register iOS permission & telemetry callbacks
sdk.onPermissionsMissing = { (missingPermissions: [String]) in
DispatchQueue.main.async {
if missingPermissions.isEmpty {
// Permissions are now consistent with SDK requirements
} else {
// One or more mandatory permissions are missing
}
}
}
sdk.onPermissionsLostWhileRunning = { (lostAt: Date, missingPermissions: [String]) in
DispatchQueue.main.async {
// Telemetry was interrupted due to permission removal while it was expected to be running
// lostAt indicates when telemetry became invalid
// missingPermissions contains the permissions that were removed
}
}
sdk.onTelemetryGapDetected = { (from: Date, to: Date) in
DispatchQueue.main.async {
// A telemetry interruption (gap) was detected
// • from: moment telemetry stopped producing samples
// • to: moment telemetry resumed
// Telemetry should be already running again at this point
}
}
@import TelematicsSDK;
// Register iOS permission & telemetry callbacks
sdk.onPermissionsMissing = ^(NSArray<NSString *> *missingPermissions) {
dispatch_async(dispatch_get_main_queue(), ^{
if (missingPermissions.count == 0) {
// Permissions are now consistent with SDK requirements
} else {
// One or more mandatory permissions are missing
}
});
};
sdk.onPermissionsLostWhileRunning = ^(NSDate *lostAt, NSArray<NSString *> *missingPermissions) {
dispatch_async(dispatch_get_main_queue(), ^{
// Telemetry was interrupted due to permission removal while it was expected to be running
// lostAt indicates when telemetry became invalid (timestamp of the last saved sample)
// missingPermissions contains the permissions that were removed
});
};
sdk.onTelemetryGapDetected = ^(NSDate *from, NSDate *to) {
dispatch_async(dispatch_get_main_queue(), ^{
// A telemetry interruption (gap) was detected
// • from: moment telemetry stopped producing samples
// • to: moment telemetry resumed
// Telemetry should be already running again at this point
});
};
2.13 Errors
In Swift, errors are delivered as TelematicsSDKException or one of its subclasses. In Objective-C, they are delivered as TSDKErrorObjC.
| Exception | When |
|---|---|
TelematicsSDKNotAuthenticatedException | The SDK has no valid session. |
TelematicsSDKSessionExpiredException | The session expired (subclass of TelematicsSDKNotAuthenticatedException). |
TelematicsSDKMissingUserException | No user is set. |
TelematicsSDKMissingVehicleException | No vehicle is set. |
TelematicsSDKMissingPermissionException | One or more required permissions are not granted. |