iOS MeData Service
This documentation is for iOS SDK 2.1.x
Functions
saveMeDataRecord
public func saveMeDataRecord(
name: String,
values: Any?,
onSuccess: @escaping () -> Void,
onError: ((Error) -> Void)? = nil
)
Saves a new MeData record for the specified definition.
Parameters:
name: String— MeData definition name.values: Any?— Encoded record value(s), must match the definition’s value type.onSuccess: () -> Void— Called when the record is saved successfully.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getMeDataDefinitions
public func getMeDataDefinitions(
onSuccess: @escaping ([MeDataDefinition]) -> Void,
onError: ((Error) -> Void)? = nil
)
Retrieves all available MeData definitions from local storage.
Parameters:
onSuccess: ([MeDataDefinition]) -> Void— Called with the list of definitions.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getMeDataDefinition
public func getMeDataDefinition(
name: String,
onSuccess: @escaping (MeDataDefinition?) -> Void,
onError: ((Error) -> Void)? = nil
)
Retrieves a single MeData definition by its name.
Parameters:
name: String— MeData definition name.onSuccess: (MeDataDefinition?) -> Void— Called with the definition or nil.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getMeDataCategories
public func getMeDataCategories(
onSuccess: @escaping ([MeDataCategory]?) -> Void,
onError: ((Error) -> Void)? = nil
)
Returns the list of MeData categories used for grouping and UI organization.
Parameters:
onSuccess: ([MeDataCategory]?) -> Void— Called with the category list or nil.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getMeDataDefinitionsByCategory
public func getMeDataDefinitionsByCategory(
name: String,
onSuccess: @escaping ([MeDataDefinition]?) -> Void,
onError: ((Error) -> Void)? = nil
)
Retrieves MeData definitions that belong to the specified category.
Parameters:
name: String— Category name.onSuccess: ([MeDataDefinition]?) -> Void— Called with the definitions or nil.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getMeDataRecords
public func getMeDataRecords(
name: String,
onSuccess: @escaping ([MeDataRecord]?) -> Void,
onError: ((Error) -> Void)? = nil
)
Retrieves all recorded values for the given MeData definition.
Parameters:
name: String— MeData definition name.onSuccess: ([MeDataRecord]?) -> Void— Called with the records or nil.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getLastMeDataRecord
public func getLastMeDataRecord(
name: String,
onSuccess: @escaping (MeDataRecord?) -> Void,
onError: ((Error) -> Void)? = nil
)
Returns the most recent MeData record for the specified definition.
Parameters:
name: String— MeData definition name.onSuccess: (MeDataRecord?) -> Void— Called with the latest record or nil.onError: ((Error) -> Void)? = nil— Called when an error occurs.
collectMeData
public func collectMeData(
meDataDefinitionNames: [String],
onSuccess: @escaping ([String: Any]) -> Void,
onError: ((Error) -> Void)? = nil
)
Collects the requested MeData items and returns a key–value map.
Parameters:
meDataDefinitionNames: [String]— List of MeData definition names to collect.onSuccess: ([String: Any]) -> Void— Called with a map of definition name to collected value.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getAggregatedMeDataRecord
public func getAggregatedMeDataRecord(
name: String,
startDate: Double,
endDate: Double,
aggregation: Aggregation,
aggregationInterval: AggregationInterval? = nil,
onSuccess: @escaping (AggregatedMeDataRecord) -> Void,
onError: ((Error) -> Void)? = nil
)
Aggregates the numeric MeData records in the given date range into a single record. When aggregationInterval is provided, values are first reduced per interval window using the interval’s own aggregation, and aggregation is then applied over the interval results. A record is always returned; its value is nil when the range holds no numeric data.
Parameters:
name: String— MeData definition name. The definition must be ofNUMBERdata type.startDate: Double— Start of the range, epoch milliseconds.endDate: Double— End of the range, epoch milliseconds.aggregation: Aggregation— Aggregation applied over the range.aggregationInterval: AggregationInterval? = nil— Optional windowing;secondsmust be greater than 0.onSuccess: (AggregatedMeDataRecord) -> Void— Called with the aggregated record.onError: ((Error) -> Void)? = nil— Called when an error occurs.
getAggregatedMeDataRecordIntervals
public func getAggregatedMeDataRecordIntervals(
name: String,
startDate: Double,
endDate: Double,
aggregationInterval: AggregationInterval,
onSuccess: @escaping ([AggregatedMeDataRecord]) -> Void,
onError: ((Error) -> Void)? = nil
)
Splits the given date range into windows of aggregationInterval.seconds and returns one aggregated record per window. Every window in the range is present in the result, in ascending order; windows that hold no numeric record carry a nil value.
Parameters:
name: String— MeData definition name. The definition must be ofNUMBERdata type.startDate: Double— Start of the range, epoch milliseconds.endDate: Double— End of the range, epoch milliseconds.aggregationInterval: AggregationInterval— Window length and the aggregation applied inside each window;secondsmust be greater than 0.onSuccess: ([AggregatedMeDataRecord]) -> Void— Called with one record per window.onError: ((Error) -> Void)? = nil— Called when an error occurs.
Classes
MeDataDefinition
public struct MeDataDefinition: Codable, Hashable {
public var id: String
public var name: String
public var text: String
public var source: String
public var script: Script?
public var valueDef: ValueDefinition?
public var category: MeDataCategory?
public var iconUrl: String?
public var description: String?
public var sharable: Bool? = false
public var hidden: Bool? = false
public var storageSettings: MeDataStorageSettings?
public var question: Question?
}
ValueDefinition
public struct ValueDefinition: Codable, Hashable {
public var type: String // DataType
public var constraints: ValueTypeConstraints?
public var multivalued: Bool?
public var multiValueConstraints: MultiValueConstraints?
public var enumerated: Bool?
public var enumeratedValues: [EnumeratedValue]?
public var enumeratedValueConstraints: EnumeratedValueConstraints?
}
ValueTypeConstraints
public struct ValueTypeConstraints: Codable, Hashable {
public var minValue: Int?
public var maxValue: Int?
public var regex: String?
public var allowCamera: Bool?
public var allowGallery: Bool?
}
MultiValueConstraints
public struct MultiValueConstraints: Codable, Hashable {
public var minValue: Int
public var maxValue: Int
}
EnumeratedValue
public struct EnumeratedValue: Codable, Hashable {
public var id: String?
public var text: String
public var name: String
public var description: String?
public var imageUrl: String?
}
EnumeratedValueConstraints
public struct EnumeratedValueConstraints: Codable, Hashable {
public var allowNone: Bool?
public var allowIdk: Bool?
public var allowNa: Bool?
public var allowOther: Bool?
}
MeDataCategory
public struct MeDataCategory: Codable, Hashable {
public var id: String
public var name: String
public var text: String
public var iconUrl: String?
public var description: String?
}
MeDataStorageSettings
public struct MeDataStorageSettings: Codable, Hashable {
public var onlyIfChanged: Bool?
public var longLimit: Int?
}
Question
public struct Question: Codable, Hashable {
public var id: String?
public var name: String
public var text: String
public var description: String?
public var imageUrl: String?
}
MeData
public struct MeData: Codable {
public var id: String
public var definitionName: String
public var firstValueSaveDate: Int64
public var lastValueSaveDate: Int64
public var lastValueId: String
public var records: [MeDataRecord]
}
MeDataRecord
public struct MeDataRecord: Codable {
public var id: String
public var meDataDefinitionId: String
public var notAvailable: Bool
public var date: Int64
public var values: [MeDataValue]
}
MeDataValue
public struct MeDataValue: Codable {
public var id: String
public var evName: String?
public var value: String
}
AggregatedMeDataRecord
public struct AggregatedMeDataRecord: Equatable, Codable {
public let startDate: Double // epoch milliseconds
public let endDate: Double // epoch milliseconds
public let value: Double? // nil = no data in the range/window, not a measured 0
}
AggregationInterval
public struct AggregationInterval: Equatable {
public let seconds: Int64 // window length, must be greater than 0
public let aggregation: Aggregation // applied inside each window
}
Aggregation
public enum Aggregation: String {
case sum = "SUM"
case min = "MIN"
case max = "MAX"
case avg = "AVG"
}
ValueTypeConstraints
public struct ValueTypeConstraints: Codable, Hashable {
var minValue: Int?
var maxValue: Int?
var regex: String?
var allowCamera: Bool?
var allowGallery: Bool?
}
DataType
public enum DataType: String, Codable {
case STRING
case NUMBER
case BOOLEAN
case DATETIME
case IMAGE
case VIDEO
case OBJECT
}
MeDataType
public enum MeDataType: String, Codable {
case NATIVE = "NATIVE"
case QA_BASED = "QA"
case API_BASED = "API_BASED"
case SCRIPTED = "SCRIPT"
case INFERRED = "INFERRED"
}