Saltar al contenido

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 to

Añadir una Extensión de Widget

Anchor link to
  1. Crear un nuevo target

Ve a File > New > Target y selecciona Widget Extension.

  1. 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 to

Busca 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 to

Para 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.

  1. 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()
}
  1. Crea un archivo LiveActivityManager.swift para gestionar las Live Activities
import Foundation
import ActivityKit
import UIKit
import PushwooshFramework
import 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)")
}
}
}
  1. 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
  1. Para iniciar una Live Activity a través de una Notificación Push Remota, necesitas enviar el token pushToStartTokenUpdates a 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)
}
}
}
}
  1. Iniciar una Live Activity con una Notificación Push Remota

Gestionar las Live Activities

Anchor link to

El SDK de Pushwoosh para iOS proporciona los siguientes métodos para trabajar con Live Activities:

// Send Live Activity Push To Start Token to Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity ID
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methods
static 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 to

Pushwoosh 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 WidgetKit
import SwiftUI
import ActivityKit
import PushwooshFramework
import 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 to

A 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 PushwooshFramework
import PushwooshLiveActivities
Pushwoosh.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 Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity ID
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methods
static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)
static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)