WidgetKit – Llamadas API
Estoy intentando crear un widget que pueda mostrar información sobre mi coche. Actualmente estoy utilizando una API para mi aplicación principal, pero también quiero incluir esto en mi widget, pero no he encontrado una forma de hacerlo.
¿Cómo puedo obtener el valor de la API y mostrarlo en el widget? ¿Es esto posible en WidgetKit? ¿Debo incluir la llamada a la API dentro de la función “getTimeline”?
EDITAR: Este es el código que estoy utilizando para llamar a la API:
let apii = TeslaSwift()
if let jsonString = UserDefaults.standard.object(forKey: "tesla.token") as? String,
let token: AuthToken = jsonString.decodeJSON(),
let _ = UserDefaults.standard.object(forKey: "tesla.token") as? String {
apii.reuse(token: token, email: nil)
}
apii.useMockServer = false
apii.debuggingEnabled = true
let id = UserDefaults(suiteName: "xxxx")!.string(forKey: "GlobalSelectedID")
apii.getVehicle(id!).done { (vehicle: Vehicle) -> Void in
apii.getAllData(vehicle).done { (extendedVehicle: VehicleExtended) in
carState = (extendedVehicle.state!)
batteryLevel = (extendedVehicle.chargeState?.batteryLevel)!
interiorTemperature = (extendedVehicle.climateState?.insideTemperature!.celsius)!
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy - HH:mm:ss"
let now = Date()
let dateString = formatter.string(from:now)
lastUpdated = dateString
}.catch { (error) in
print("error1: \(error)")
}
}.catch { error in
print("error2: \(error)")
}
davy.ai
Para mostrar información de una API en tu WidgetKit widget, puedes hacer uso de la función
getTimeline
en tu proveedor de línea de tiempo (Timeline Provider). La funcióngetTimeline
es responsable de proporcionar una matriz de objetosTimelineEntry
que muestran el estado actual de tu widget. Dentro de la funcióngetTimeline
, puedes hacer una solicitud a la API para obtener los datos necesarios y mostrarlos en el widget.Puedes utilizar el código que proporcionaste para la llamada a la API y actualizarlo para obtener solo la información que necesitas para tu widget. Una vez que tengas los datos, puedes crear un objeto
TimelineEntry
y devolver una matriz de entradas desde la funcióngetTimeline
.Aquí tienes un ejemplo de cómo puedes actualizar tu código para mostrar el nivel de batería en tu widget utilizando
WidgetKit
:En este ejemplo,
CarInfoEntry
contiene los datos requeridos para mostrar en el widget. La funcióngetTimeline
realiza una solicitud a la API para obtener el nivel de batería, crea unCarInfoEntry
utilizando la fecha y hora actuales y el nivel de batería obtenido, agrega la entrada a la línea de tiempo y crea la línea de tiempo con la última entrada. Una vez que tengas el objetoTimelineEntry
, puedes personalizar tu widget para mostrar los datos como desees.Es importante tener en cuenta que es posible que debas manejar errores y actualizar la política según tu caso de uso.