iOS SDApiManager Framework - scopetech/Mobile-Public GitHub Wiki

SDApiManager SDK Documentation

This document describes how ScopeTechnology framework "SDApiManager" works and how to integrate into your application. While the target audience is coders/developers, it brings better understanding for those who are not too tech-savvy as well.

SDApiManager framework main functionality is to provide an interface to backend wrapping up all necessary APIs.

1. Driving behaviour events filtering

It's possible to filter the following events: acceleration, breaking and cornering. It means that all the events whose have gforce value lower than defined in Tenant Settings (see Connected Cars Portal -> Tenant Settings > Group 16: Driver Behaviour) are filtered out.

1.1. Trips API

Using

SDApiManager.getTripsFor(timeInterval: CCTimeInterval, ignoreCache: Bool, complete: SDCompleteBlock)

events are already filtered out.

1.2. MZone Events API

Using

SDApiManager.getMZoneEvents(for: CCTimeInterval, complete: SDCompleteBlock)

filtering is handled by the app using the following functions:

    func getEvents() {
        let timeIntervalForTrip = // some CCTimeInterval
        SDApiManager.getMZoneEvents(for: timeIntervalForTrip) { [weak self] response in
            guard let eventsData = response.parsedObject as? MZoneDetailedTripResponse, let allEvents = eventsData.tripDetails as? [MZoneDetailedTrip] else {
                return
            }

            let filteredEvents = self?.filterEventsByThreshold(allEvents)
        }
    }
    
    func filterEventsByThreshold(_ events: [MZoneDetailedTrip]) -> [MZoneDetailedTrip] {
        return events.filter { event in
            guard let eventType = TripEventType(rawValue: event.eventType) else {
                return true
            }
            if eventType == .acceleration {
                return event.gForce() >= SDApiManager.getAccelerationThreshold()
            } else if eventType == .braking {
                return event.gForce() >= SDApiManager.getBrakingThreshold()
            } else if eventType == .cornering {
                return event.gForce() >= SDApiManager.getCorneringThreshold()
            }
            
            return true
        }
    }