Live Activities de iOS
Las Live Activities muestran los datos más actuales de tu aplicación en la pantalla de bloqueo del iPhone o iPad y en la Dynamic Island. Esta función permite a los usuarios ver información en vivo de un vistazo y realizar acciones rápidas relacionadas con la información mostrada.
Aquí tienes algunos ejemplos de uso de las Live Activities:
- Mostrar el estado de un pedido en una aplicación de entregas;
- Proporcionar una cuenta regresiva en tiempo real en una aplicación de entrenamiento;
- Mostrar información de seguimiento en una aplicación de taxi;
- Mostrar estadísticas de juego y puntuaciones actuales en una aplicación de deportes;
- Proporcionar pronósticos por hora en una aplicación del tiempo.
Puedes habilitar las Live Activities usando el SDK de Pushwoosh para iOS como se describe a continuación. Para gestionar las Live Activities y actualizar su contenido, utiliza el método /updateLiveActivity.
Configuración
Anchor link toAñadir una Extensión de Widget
Anchor link to- Crear un nuevo target
Ve a File > New > Target y selecciona Widget Extension.

- Configuración de la Extensión de Widget Por favor, introduce un nombre y asegúrate de seleccionar Include Live Activity y haz clic en Finish.

Configuración de Info.plist
Anchor link toBusca el archivo Info.plist en el target principal, inserta la clave “Supports Live Activities” y establece su valor en YES.
<key>NSSupportsLiveActivities</key> <true/>Habilitar las live activities desde la aplicación
Anchor link toPara habilitar las Live Activities, añade su código a tu extensión de widget existente o crea una nueva si tu aplicación aún no la tiene. Las Live Activities utilizan la funcionalidad de SwiftUI y WidgetKit para su interfaz de usuario. ActivityKit gestiona el ciclo de vida de cada Live Activity: su API se utiliza para solicitar, actualizar y finalizar una Live Activity y para recibir notificaciones push de ActivityKit. Puedes aprender más sobre las Live Activities en la documentación de Apple.
- Navega al archivo ContentView de tu proyecto en Xcode y crea un Button
import SwiftUI
struct ContentView: View { var body: some View { VStack(spacing: 20) {
Button(action: { LiveActivityManager.shared.startActivity() }, label: { Text("Start Live Activity") .foregroundColor(.white) .padding() .background(Color.blue) .cornerRadius(10) }) } .padding() }}
#Preview { ContentView()}
- Crea un archivo LiveActivityManager.swift para gestionar las Live Activities
import Foundationimport ActivityKitimport UIKitimport PushwooshFrameworkimport PushwooshLiveActivities
class LiveActivityManager: NSObject, ObservableObject { public static let shared: LiveActivityManager = LiveActivityManager()
private var currentActivity: Activity<FoodDeliveryAttributes>? = nil
override init() { super.init() }
func startActivity() { guard ActivityAuthorizationInfo().areActivitiesEnabled else { print("You can't start live activity.") return } do { let pushwooshData = PushwooshLiveActivityAttributeData(activityId: "activity_id") let atttribute = FoodDeliveryAttributes(orderNumber: "1234567", pushwoosh: pushwooshData) let initialState = FoodDeliveryAttributes.ContentState( status: "Preparing your meal", estimatedTime: "25 min", emoji: "👨🍳", pushwoosh: nil ) let activity = try Activity<FoodDeliveryAttributes>.request( attributes: atttribute, content: .init(state:initialState , staleDate: nil), pushType: .token ) self.currentActivity = activity
Task { for await pushToken in activity.pushTokenUpdates { let pushTokenString = pushToken.reduce("") { $0 + String(format: "%02x", $1) } print("Activity:\(activity.id) push token: \(pushTokenString)")
// MARK: - Send Push Token to Pushwoosh Pushwoosh.LiveActivities.startLiveActivity( token: pushTokenString, activityId: "activity_id" ) } } } catch { print("Start Activity Error: \(error.localizedDescription)") } }}- Eso es todo, ahora ejecutamos el proyecto y pulsamos el botón ‘Start Live Activity’. Luego navegamos a la pantalla de bloqueo y vemos la Live Activity creada.

Iniciar una Live Activity con una notificación push remota
Anchor link to- Para iniciar una Live Activity a través de una Notificación Push Remota, necesitas enviar el token
pushToStartTokenUpdatesa Pushwoosh.
func getPushToStartToken() { if #available(iOS 17.2, *) { Task { for await data in Activity<LiveActivityAttributes>.pushToStartTokenUpdates { let token = data.map {String(format: "%02x", $0)}.joined() print("Activity PushToStart Token: \(token)")
// Send `pushToStartTokenUpdates` token to Pushwoosh try await Pushwoosh.LiveActivities.sendPushToStartLiveActivity(token: token) } } }}- Iniciar una Live Activity con una Notificación Push Remota
Gestionar las Live Activities
Anchor link toEl SDK de Pushwoosh para iOS proporciona los siguientes métodos para trabajar con Live Activities:
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)También puedes actualizar las live activities por segmentos utilizando el parámetro Activity ID. Al crear una actividad, necesitas pasar un parámetro único de Activity ID en el método, que será relevante para un segmento de usuarios específico.
Por ejemplo, N usuarios se han suscrito al mismo evento en una Live Activity. Es necesario que el parámetro Activity ID sea único para todos estos N usuarios.
Cuando termines de trabajar con una Live Activity, utiliza estos métodos:
static func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)Método Setup().
Anchor link toPushwoosh simplifica la transferencia de IDs de actividad introduciendo la función PushwooshLiveActivities.setup, que gestiona todo el ciclo de vida de una Live Activity dentro de la aplicación. Esta función escucha automáticamente tanto las actualizaciones de token pushToStart como pushToUpdate. Al usar este método, la aplicación ya no necesita rastrear manualmente el inicio de las Live Activities ni gestionar las actualizaciones de token para las actualizaciones de actividad.
Recomendamos usar este método porque gestiona toda la administración de tokens de nuestro lado, reduciendo la cantidad de código que necesitas mantener en tu lado. Esto simplifica la integración y asegura una experiencia más fluida y eficiente para tu aplicación.
En el AppDelegate, asegúrate de importar PushwooshFramework y PushwooshLiveActivities y llama al método setup desde el módulo Pushwoosh.LiveActivities.
AppDelegate.swift
if #available(iOS 16.1, *) { Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)}FoodDeliveryAttributes
import WidgetKitimport SwiftUIimport ActivityKitimport PushwooshFrameworkimport PushwooshLiveActivities
struct FoodDeliveryAttributes: PushwooshLiveActivityAttributes { public struct ContentState: PushwooshLiveActivityContentState { var status: String var estimatedTime: String var emoji: String var pushwoosh: PushwooshLiveActivityContentStateData? }
var orderNumber: String var pushwoosh: PushwooshLiveActivityAttributeData}FoodDeliveryAttributes: Esta estructura se ajusta al protocolo PushwooshLiveActivityAttributes. Se utiliza para definir los atributos de una live activity dentro de la aplicación.
Guía de migración
Anchor link toA partir de la versión 6.8.0 del SDK de Pushwoosh para iOS, hemos actualizado la estructura del SDK. Los métodos de Live Activities ahora se acceden a través del módulo PushwooshLiveActivities.
Si estabas usando una versión del SDK de Pushwoosh para iOS anterior a la 6.8.0 y llamabas a los métodos listados a continuación, y desde entonces has actualizado a la versión 6.8.0 o posterior, por favor ten en cuenta los siguientes cambios:
static func setup<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type)static func defaultSetup()static func defaultStart(_ activityId: String, attributes: [String: Any], content: [String: Any])Ahora, para acceder a estos métodos, debes usar el módulo LiveActivity.
import PushwooshFrameworkimport PushwooshLiveActivitiesPushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)Pushwoosh.LiveActivities.defaultSetup()Pushwoosh.LiveActivities.defaultStart("activity_id", attributes: ["key_attribute": "value_attribute"], content: ["key_content": "value_content"])También hemos mantenido el soporte para los métodos a través de Pushwoosh.sharedInstance() como se lista a continuación, pero ten en cuenta que estos métodos serán obsoletos en futuras versiones.
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)