Passer au contenu principal
Les Live Activities sont une fonctionnalité iOS relativement nouvelle et nécessitent une implémentation native, ce qui peut poser des défis lors de l’utilisation de frameworks multiplateformes comme React Native, Flutter, Unity, Cordova, etc. Pour simplifier le processus, le SDK de OneSignal inclut des fonctionnalités qui minimisent les exigences de code natif, permettant une intégration rationalisée des Live Activities sur les plateformes prises en charge.

Prérequis

  • La dernière version de notre SDK.
  • iOS 16.1+ et iPadOS 17+
  • Utilisez une clé APNs .p8. Apple ne prend pas en charge les certificats p12 avec les Live Activities.
  • Xcode 14 ou supérieur

Configuration

1. Configurer notre SDK

Assurez-vous d’avoir configuré la version la plus récente de notre SDK Mobile sur votre application. Les Live Activities ne sont pas disponibles pour les sites web ni avec notre SDK Web.

2. Ajouter la nouvelle méthode setupDefault

Pour indiquer au SDK OneSignal de gérer le cycle de vie LiveActivity pour le type DefaultLiveActivityAttributes, vous pouvez appeler la méthode setupDefault. Cette méthode vous permet d’utiliser à la fois les API Démarrer Live Activity et Mettre à jour Live Activity pour démarrer/mettre à jour/terminer la Live Activity par défaut.
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. Créer un Widget Activity

1

Mettre à jour votre Info.plist

Dans Xcode, ouvrez le Info.plist de votre cible principale, ajoutez la clé Supports Live Activities en tant que Boolean, et définissez-la sur YES.

Ajouter la clé Supports Live Activities à Info et définir sa valeur sur Boolean YES

Lors de la mise à jour des Live Activities, vous avez la possibilité de définir une “priorité” qu’Apple utilise pour déterminer l’urgence de la mise à jour. Apple dispose de seuils internes pour limiter les demandes qui utilisent trop fréquemment l’indicateur de priorité élevée.Si vos cas d’utilisation pour les Live Activities nécessitent des mises à jour de haute priorité plus fréquentes, vous pouvez ajouter la clé NSSupportsLiveActivitiesFrequentUpdates à votre Info.plist en tant que type Boolean défini sur YES comme indiqué dans la documentation développeur d’Apple. Les utilisateurs verront une boîte de dialogue lorsque la Live Activity dépasse son budget push, et s’ils autorisent la Live Activity à continuer, le budget sera automatiquement augmenté pour une expérience utilisateur fluide.
2

Créer une Widget Extension

Dans Xcode, allez dans Fichier > Nouveau > Cible… > Widget Extension.

Ajouter une nouvelle cible Widget Extension pour votre application dans Xcode.

Sélectionnez et appuyez sur Suivant.Configurez la Widget Extension en fournissant un nom (exemple : OneSignalWidget) et assurez-vous que Include Live Activity est sélectionné. Ensuite, cliquez sur Terminer.

Options de Widget Extension pour une Live Activity.

Cliquez sur Don’t Activate si vous êtes invité à activer le schéma.

Options de Widget Extension pour une Live Activity.

3

Ajouter OneSignalXCFramework à votre Podfile

Trouvez le nom de votre cible d’extension widget dans la liste des Cibles de votre projet. Le nom de l’exemple est OneSignalWidgetExtension.

Trouver le nom de votre cible d'extension widget

Ouvrez votre Podfile et ajoutez le code suivant. Remplacez OneSignalWidgetExtension par le nom de votre cible d’extension widget.
Podfile
target 'OneSignalWidgetExtension' do
  #use_frameworks!
  pod 'OneSignalXCFramework', '>= 5.0.0', '< 6.0'
end
Fermez Xcode et exécutez pod repo update && pod install pour installer le pod OneSignalLiveActivities.

4. Configurer le fichier LiveActivity.swift

Dans Xcode, ouvrez le fichier WidgetExtensionLiveActivity.swift. Ouvrez le panneau Inspecteur sur le côté droit de l’écran. Dans Target Membership, cliquez sur le bouton + et sélectionnez votre cible Runner.

Autoriser l'appartenance à la cible principale

Mettez à jour le contenu de WidgetExtensionLiveActivity.swift avec la mise en page Live Activity par défaut suivante. Les valeurs dans ce Widget peuvent être modifiées selon ce que vous souhaitez afficher sur le widget, la méthode setupDefault gérera la définition de la structure pour ces attributs.
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)
        }
    }
}


Tester la Live Activity

  1. Démarrez l’application
  2. Consultez tous les champs possibles dans notre référence API Démarrer Live Activity. La structure de ces champs peut différer selon la façon dont vous avez configuré votre interface utilisateur. Par exemple :
  • "event_updates" : Ce sont les données dynamiques qui peuvent être mises à jour après le démarrage de la Live Activity (tout ce qui suit context.state dans l’exemple de code). Comme nous avons context.state.data, nous ajouterions un objet data à ce champ et tous les champs supplémentaires qu’il contient comme le dictionnaire message que nous avons ajouté dans l’exemple de code. Pour l’utilisation, voir l’exemple de requête ci-dessous.
  • "event_attributes" : Ce sont les données statiques définies dans la requête push to start, et qui conservent la même valeur jusqu’à ce que la Live Activity soit supprimée ou écrasée.
  1. Lors de l’utilisation de push to start, vous définissez le "activity_id" dans la requête, plutôt que dans le code. L’utilisation d’Activity ID différents démarrera de nouvelles Live Activities. L’utilisation du même Activity ID écrasera le widget qui utilise actuellement cet ID.
  2. Assurez-vous d’avoir modifié l’ID d’application OneSignal dans le chemin de votre url, et la clé API Rest dans l’en-tête Authorization. Le type DefaultActivityAttributes ne peut pas être modifié si vous utilisez la configuration par défaut. Veuillez également noter que le type d’activité ajouté à votre chemin est sensible à la casse et doit correspondre à ce qui est défini soit par vous, soit à l’activité par défaut utilisée dans l’exemple ci-dessous.
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éthodes de bas niveau

Ce sont des méthodes optionnelles à utiliser si vous souhaitez générer votre propre jeton Push To Start, qui a également été ajouté dans la dernière version du SDK. L’utilisation de ces méthodes nécessite d’interagir davantage avec Xcode et de générer votre propre jeton pour Push To Start avec Swift. Vous pouvez trouver un guide à ce sujet ici.
//Setting the Push To Start Token
OneSignal.LiveActivities.setPushToStartToken(activityType: string, token: string)

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