Saltar al contenido principal
Las Live Activities son una característica relativamente nueva de iOS y requieren implementación nativa, lo que puede plantear desafíos al usar frameworks multiplataforma como React Native, Flutter, Unity, Cordova, etc. Para simplificar el proceso, el SDK de OneSignal incluye funcionalidad que minimiza los requisitos de código nativo, permitiendo una integración optimizada de Live Activity en plataformas compatibles.

Requisitos

  • La última versión de nuestro SDK.
  • iOS 16.1+ e iPadOS 17+
  • Use una clave APNs .p8. Apple no admite certificados p12 con Live Activities.
  • Xcode 14 o superior

Configuración

1. Configurar nuestro SDK

Asegúrese de haber configurado la versión más reciente de nuestro SDK móvil en su aplicación. Las Live Activities no están disponibles para sitios web ni con nuestro SDK web.

2. Agregar el nuevo método setupDefault

Para indicarle al SDK de OneSignal que administre el ciclo de vida de LiveActivity para el tipo DefaultLiveActivityAttributes, puede llamar al método setupDefault. Este método le permite usar tanto las APIs Iniciar Live Activity como Actualizar Live Activity para iniciar/actualizar/finalizar la Live Activity predeterminada.
import { OneSignal } from 'react-native-onesignal'

//Push To Start
OneSignal.LiveActivities.setupDefault()

//Launching the Live Activity from within the app (not needed for push to start)
const activityId = "my_activity_id"
const attributes = { title: "Sample Title" } ;
const content = { message: { en: "message" } };
OneSignal.LiveActivities.startDefault(activityId, attributes, content);

3. Crear Widget de actividad

1

Actualizar su Info.plist

En Xcode, abra el Info.plist de su objetivo principal, agregue la clave Supports Live Activities como Boolean y establézcala en YES.

Agregar clave Supports Live Activities a Info y establecer su valor en Boolean YES

Al actualizar Live Activities, tiene la opción de establecer una “prioridad” que Apple usa para determinar qué tan urgente es la actualización. Apple tiene umbrales internos en los que limitarán las solicitudes que usan la bandera de alta prioridad con demasiada frecuencia.Si sus casos de uso para Live Activities dependen de actualizaciones de alta prioridad más frecuentes, puede agregar la clave NSSupportsLiveActivitiesFrequentUpdates a su Info.plist como un tipo Boolean establecido en YES como se indica en Documentos para desarrolladores de Apple. Los usuarios verán un cuadro de diálogo cuando la Live Activity exceda su presupuesto push, y si permiten que la Live Activity continúe, el presupuesto se aumentará automáticamente para una experiencia de usuario fluida.
2

Crear una Widget Extension

En Xcode, vaya a File > New > Target… > Widget Extension.

Agregar un nuevo objetivo de Widget Extension para su aplicación en Xcode.

Seleccione y presione Next.Configure la Widget Extension proporcionando un nombre (ejemplo: OneSignalWidget) y asegúrese de que Include Live Activity esté seleccionado. Luego haga clic en Finish.

Opciones de Widget Extension para una Live Activity.

Haga clic en Don’t Activate si se le solicita activar el esquema.

Opciones de Widget Extension para una Live Activity.

3

Agregar OneSignalXCFramework a su Podfile

Encuentre el nombre de su objetivo de extensión de widget en la lista de objetivos de su proyecto. El nombre del ejemplo es OneSignalWidgetExtension.

Encontrar el nombre de su objetivo de extensión de widget

Abra su Podfile y agregue el siguiente código. Reemplace OneSignalWidgetExtension con el nombre de su objetivo de extensión de widget.
Podfile
target 'OneSignalWidgetExtension' do
  #use_frameworks!
  pod 'OneSignalXCFramework', '>= 5.0.0', '< 6.0'
end
Cierre Xcode y ejecute pod repo update && pod install para instalar el pod OneSignalLiveActivities.

4. Configurar el archivo LiveActivity.swift

En Xcode, abra el archivo WidgetExtensionLiveActivity.swift. Abra el panel Inspector en el lado derecho de la pantalla. Dentro de Target Membership, haga clic en el botón + y seleccione su objetivo Runner.

Permitir membresía de objetivo principal

Actualice el contenido de WidgetExtensionLiveActivity.swift con el siguiente diseño de Live Activity predeterminado. Los valores en este Widget se pueden cambiar a lo que desee que se muestre en el widget, el método setupDefault se encargará de definir la estructura para estos atributos.
Swift
import ActivityKit
import WidgetKit
import SwiftUI
import OneSignalLiveActivities

// Your struct name might be different here
@available(iOS 16.2, *)
struct OneSignalWidgetLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: DefaultLiveActivityAttributes.self) { context in
            // Lock screen / banner UI
            VStack {
                Spacer()

                Text("Title: " + (context.attributes.data["title"]?.asString() ?? ""))
                    .font(.headline)

                Spacer()

                HStack {
                    Spacer()
                    Text(context.state.data["message"]?.asDict()?["en"]?.asString() ?? "Default Message")
                    Spacer()
                }

                Text("INT: " + String(context.state.data["intValue"]?.asInt() ?? 0))
                Text("DBL: " + String(context.state.data["doubleValue"]?.asDouble() ?? 0.0))
                Text("BOL: " + String(context.state.data["boolValue"]?.asBool() ?? false))

                Spacer()
            }
            .activitySystemActionForegroundColor(.black)
            .activityBackgroundTint(.white)

        } dynamicIsland: { _ in
            DynamicIsland {
                // Expanded UI
                DynamicIslandExpandedRegion(.leading) {
                    Text("Leading")
                }
                DynamicIslandExpandedRegion(.trailing) {
                    Text("Trailing")
                }
                DynamicIslandExpandedRegion(.bottom) {
                    Text("Bottom")
                    // More content
                }
            } compactLeading: {
                Text("L")
            } compactTrailing: {
                Text("T")
            } minimal: {
                Text("Min")
            }
            .widgetURL(URL(string: "http://www.apple.com"))
            .keylineTint(Color.red)
        }
    }
}


Probar la Live Activity

  1. Inicie la aplicación
  2. Vea todos los campos posibles en nuestra referencia de la API Iniciar Live Activity. La estructura de estos campos puede diferir según cómo haya configurado su UI. Por ejemplo:
  • "event_updates": Estos son los datos dinámicos que se pueden actualizar después de que se haya iniciado la Live Activity (cualquier cosa después de context.state en el ejemplo de código). Dado que tenemos context.state.data, agregaríamos un objeto de datos a este campo y cualquier campo adicional dentro como el diccionario de mensajes que hemos agregado en el ejemplo de código. Para uso, vea el ejemplo de solicitud a continuación.
  • "event_attributes": Estos son los datos estáticos que se establecen en la solicitud push to start y permanecen con el mismo valor hasta que se elimine o sobrescriba la Live Activity.
  1. Al usar push to start, establece el "activity_id" en la solicitud, en lugar de en el código. Usar diferentes ID de actividad iniciará nuevas Live Activities. Usar el mismo ID de actividad sobrescribirá el widget que actualmente está usando ese ID.
  2. Asegúrese de haber cambiado el ID de aplicación de OneSignal en su ruta de URL y la clave de API REST en el encabezado de Autorización. El tipo DefaultActivityAttributes no se puede cambiar si está usando la configuración predeterminada. Tenga en cuenta también que el tipo de actividad agregado a su ruta distingue entre mayúsculas y minúsculas y debe coincidir con lo que está definido por usted o la actividad predeterminada utilizada en el ejemplo a continuación.
curl
curl --request POST \
     --url https://api.onesignal.com/apps/YOUR_APP_ID/activities/activity/DefaultLiveActivityAttributes \
     --header 'Authorization: key YOUR_REST_API_KEY' \
     --header 'Content-Type: application/json' \
     --header 'accept: application/json' \
     --data '
{
  "event": "start",
  "event_updates": {
    "data": {
      "message": {
        "en": "The message is nested in context.state.data[\"message\"] as a dictionary"
      },
      "intValue": 10,
      "doubleValue": 3.14,
      "boolValue": true
    }
  },
  "event_attributes": {
    "data": {
      "title": "this is set when the LA starts and does not get updated after"
    }
  },
  "activity_id": "my-activity-id",
  "name": "OneSignal Notification Name",
  "contents": {
    "en": "English Message"
  },
  "headings": {
    "en": "English Message"
  },
  "sound": "beep.wav",
  "priority": 10
}'

Métodos de bajo nivel

Estos son métodos opcionales para usar si desea generar su propio token Push To Start, que también se ha agregado en la última versión del SDK. El uso de estos métodos requiere que interactúe más con Xcode y genere su propio token para Push To Start con Swift. Puede encontrar una guía sobre esto aquí.
//Setting the Push To Start Token
OneSignal.LiveActivities.setPushToStartToken(activityType: string, token: string)

//Removing the Push To Start Token
OneSignal.LiveActivities.removePushToStartToken(activityType: string)