Prácticas recomendadas para actividades en directo de iOS

Configuración de Live Activity

LiveActivity es una función introducida en iOS 16.1. Con el framework ActivityKit, se pueden iniciar actividades en directo para ver actualizaciones en tiempo real de la aplicación en Dynamic Island y en la pantalla de bloqueo. Por ejemplo, una aplicación de deportes permite a los usuarios iniciar una actividad en directo y ver las actualizaciones de un vistazo durante un partido (para obtener más información, consultar la guía de funciones de la versión de iOS).

  • Utilizar el framework ActivityKit en el proyecto principal para iniciar, actualizar y finalizar actividades en directo. Utilizar SwiftUI y WidgetKit en la extensión de widget para crear la interfaz de Live Activity.
  • Las actividades en directo se pueden iniciar, actualizar y finalizar no solo con ActivityKit, sino también mediante notificaciones push remotas.
  • La función de actualización mediante notificaciones push remotas para LiveActivity no admite certificados p12; es necesario configurar certificados p8.

Además, se debe tener en cuenta que Apple limita el número de notificaciones push de LiveActivity enviadas por hora. Si se necesita actualizar con frecuencia las notificaciones push de LiveActivity, es necesario añadir la entrada NSSupportsLiveActivitiesFrequentUpdates en el archivo info.plist y establecer su valor booleano en YES (para obtener más información, consultar iOS LiveActivity).

Añadir la funcionalidad de Live Activity al proyecto

Configuración

1. Configurar Info.plist

Añadir un par clave-valor en el archivo Info.plist del proyecto principal, donde la clave sea NSSupportsLiveActivities y el valor sea YES;

alt text

2. Añadir una extensión de widget

2.1 Crear un nuevo target

Acceder a File > New > Target.

2.2 Seleccionar Widget Extension

alt text

2.3 Configurar la extensión de widget

Marcar la casilla "Include Live Activity" alt text

Hacer clic en Finish

Xcode creará una Live Activity.

LiveActivityWidgetAttributes define los atributos de la actividad en directo, incluidos tanto los atributos mutables como los inmutables.

La estructura LiveActivityWidgetLiveActivity personaliza la apariencia de la actividad en directo.

alt text

A continuación, en LiveActivityWidgetBundle, habilita la visualización de la actividad en directo. alt text

3. Pruebas

Iniciar una actividad en directo en el proyecto principal, escuchar los cambios de su push token y comunicar el push token a EngageLab. Una vez comunicado correctamente, se puede utilizar el servicio de EngageLab para enviar mensajes a la LiveActivity en el móvil.

func startLiveActivity1() { let initialContentState = MTLAAttributes.ContentState(eventStr: "begin", eventTime: 1) let activityAttributes = MTLAAttributes(name: "LiveActivity", number: 33, tag: "") do { // Create Activity let activity = try Activity.request(attributes: activityAttributes, contentState: initialContentState, pushType: PushType.token) // Listen for pushToken changes Task { for await pushtoken in activity.pushTokenUpdates { let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined() // Register liveactivity with EngageLab to update notifications via liveactivityId on the push platform MTPushService.registerLiveActivity("my_define_liveactivity_id", pushToken: pushtoken, completion: { code, liveactivityId, token, seq in print("result:\(code)") }, seq: 1) } } } catch { print("Error requesting Live Activity \(error.localizedDescription).") } }
              
              func startLiveActivity1() {
    
    let initialContentState = MTLAAttributes.ContentState(eventStr: "begin", eventTime: 1)
    let activityAttributes = MTLAAttributes(name: "LiveActivity", number: 33, tag: "")
    
    do {
      // Create Activity
      let activity = try Activity.request(attributes: activityAttributes, contentState: initialContentState, pushType: PushType.token)
      
      // Listen for pushToken changes
      Task {
        for await pushtoken in activity.pushTokenUpdates {
          let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
          // Register liveactivity with EngageLab to update notifications via liveactivityId on the push platform
          MTPushService.registerLiveActivity("my_define_liveactivity_id", pushToken: pushtoken, completion: { code, liveactivityId, token, seq in
            print("result:\(code)")
          }, seq: 1)
        }
      }
      
    } catch {
      print("Error requesting Live Activity \(error.localizedDescription).")
    }
  }

            
Este bloque de código se muestra en una ventana flotante
  • A partir de iOS 17.2, Apple permite utilizar una notificación push para iniciar una actividad en directo, lo que depende de un pushToStartToken. Utilizar la función pushToStartTokenUpdates para escuchar los cambios del pushToStartToken de la actividad en directo y comunicarlo a EngageLab.
func pushToStart() { Task { if #available(iOS 17.2, *) { var beforeToken = "" for await pushtoken in Activity<MTLAAttributes>.pushToStartTokenUpdates { let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined() print("pushToStartToken: MTLAAttributes -> \(pushtokenstr)") if beforeToken == pushtokenstr { return } beforeToken = pushtokenstr MTPushService.registerLiveActivity("MTLAAttributes", pushToStartToken: pushtoken, completion: { code, alias, token, seq in print("register MTLAAttributes pushToStartToken result: \(pushtokenstr) result:\(code) seq:\(seq)") }, seq: seq()) } } else { // Fallback on earlier versions } } }
              
              func pushToStart() {
    Task {
      if #available(iOS 17.2, *) {
        var beforeToken = ""
        for await pushtoken in Activity<MTLAAttributes>.pushToStartTokenUpdates {
          
          let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
          print("pushToStartToken: MTLAAttributes -> \(pushtokenstr)")
          if beforeToken == pushtokenstr {
            return
          }
          beforeToken = pushtokenstr
          
          MTPushService.registerLiveActivity("MTLAAttributes", pushToStartToken: pushtoken, completion: { code, alias, token, seq in
            print("register MTLAAttributes pushToStartToken result: \(pushtokenstr) result:\(code) seq:\(seq)")
          }, seq: seq())
        }
      } else {
        // Fallback on earlier versions
      }
    }
}

            
Este bloque de código se muestra en una ventana flotante
Icon Solid Transparent White Qiyu
Contacto