Notifications : push et messages in-app

L'éditeur d'automatisation d'Appwin : un déclencheur d'entrée, une étape de notification push et une sortie, avec l'audience et la fin de l'automatisation à droite.

Notifications envoie le bon message au bon moment : campagnes, parcours automatisés, messages in-app. Quatre canaux (push mobile, in-app, web push, mobile landing) partagent le même moteur d'audience et de mesure.

Le SDK enregistre les jetons et les événements ; tu montes campagnes et automatisations dans le dashboard, sous Notifications.

Installation

  1. 1

    Installe Appwin Core et Notifications

    Notifications repose sur Appwin Core. Pas encore installé ? Commence par le Quickstart, qui installe Core et tes modules pour chaque plateforme.

    Branche au moins une clé push : APNs pour iOS, FCM pour Android et le web. Sans clé, l'API simule les envois : une campagne semble partie sans que rien ne sorte. Vérifie tes clés avant le premier vrai envoi.

    Compatibilité et paquets par plateforme
    PlateformePaquetSymbole
    iOS 16produit SPM AppwinNotificationsAppwinNotifications
    Android 7.0 (API 24)io.appwin:appwin-notificationsio.appwin.notifications.AppwinNotifications
    Flutter 3.3appwin_notificationsAppwinNotifications.instance
    React Native 0.73@appwin/react-nativeAppwinNotifications
  2. 2

    Initialise Notifications

    initialize() demande le verdict serveur ; start() prend la main sur le reste : enregistrement push, événements de cycle de vie, réception temps réel et affichage des messages in-app. Un seul appel, au démarrage.

    swift
    import AppwinNotifications
    
    AppwinCore.configure(projectAppId: "ton-app-id")
    
    if await AppwinNotifications.initialize().isReady {
      // Demande l'autorisation push et enregistre le jeton APNs.
      await AppwinNotifications.start()
    }
    

    isReady relit le dernier verdict sans relancer initialize(). stop() défait tout ce que start() a posé : c'est pour une app qui coupe les campagnes sur une partie de sa vie (mode enfant, compte en pause), pas pour une déconnexion. La déconnexion passe par AppwinCore.logout(), qui retire l'identité derrière le ciblage.

Méthodes disponibles

Autorisation push et jetons

start() demande l'autorisation push et enregistre le jeton. Pour choisir le moment de la demande, ou transmettre toi-même le jeton Firebase sur Android, prends la main par plateforme.

Pour demander l'autorisation plus tard, à un moment où l'utilisateur comprend pourquoi, lance start(requestPushPermission: false), puis :

swift
let granted = try await AppwinNotifications.requestPushAuthorization()

Transmets les push silencieux pour que les messages in-app arrivent en cours de session plutôt qu'à la prochaine ouverture. Active le mode d'arrière-plan Remote notifications :

swift
func application(
  _ application: UIApplication,
  didReceiveRemoteNotification userInfo: [AnyHashable: Any]
) async -> UIBackgroundFetchResult {
  if await AppwinPush.handleMessage(userInfo) { return .newData }
  return .noData
}

handleMessage renvoie true quand le push était celui d'Appwin, false sinon : ton propre traitement continue.

Déclencher une automatisation

Une automatisation part d'un événement. Après start(), le SDK envoie déjà les événements de cycle de vie ; à toi d'envoyer ce que ton app est seule à savoir : un achat, un niveau fini, une étape d'onboarding.

ÉvénementQui l'envoie
app_open, app_background, session_start, push_opt_inLe SDK, après start()
purchaseToi, avec le montant dans les propriétés si la campagne segmente dessus
custom_eventToi, nommé par eventName
swift
try await AppwinNotifications.trackEvent(.purchase, properties: [
  "plan": "pro",
  "amount": "49.00",
])

try await AppwinNotifications.trackEvent(
  .customEvent,
  eventName: "onboarding_finished"
)

L'événement de sortie d'un parcours se pose au même endroit, et en même temps que le déclencheur : cf. Automatisations.

Rendre les messages in-app toi-même

Par défaut le SDK dessine les messages : presentPendingMessages() récupère ce qui attend, l'affiche et signale seul ce qu'il en advient. syncOnAppOpen() fait le même travail à l'ouverture, en enchaînant app_open puis fetchPendingMessages().

swift
try await AppwinNotifications.presentPendingMessages()

Un studio qui veut ses propres écrans prend l'autre chemin, et hérite alors de la mesure, sinon la campagne ne rapporte rien :

swift
let messages = try await AppwinNotifications.fetchPendingMessages()

for message in messages {
  // Ton rendu à toi.
  try await AppwinNotifications.track(deliveryId: message.deliveryId, event: .opened)
}

Trois issues à signaler : opened (affiché), clicked (un bouton ou le corps du message a été touché, avec l'index du bouton) et dismissed (fermé sans rien faire). Ce sont les marches de l'entonnoir que tu liras dans Analytics : sans elles, la campagne semble n'avoir jamais été vue.

Les canaux

CanalOù ça s'affiche
Push mobileNotification système, app fermée ou en arrière-plan
In-AppModale, bandeau ou plein écran, app ouverte
Web pushNavigateur, via FCM
Mobile landingPage de destination rendue par le SDK

Une campagne peut combiner plusieurs canaux ; elle refuse de partir sans contenu sur au moins un.

Campagnes

Notifications → Campagnes. Un envoi ponctuel vers une audience. Cycle de vie : Brouillon → Programmée → En envoi → Envoyée, avec En pause et Archivée en dérivation. Un brouillon se garde autant qu'on veut ; programmer demande une date future et l'annulation reste possible tant que l'envoi n'a pas commencé.

Tutoriel : une première campagne

  1. Notifications → Campagnes → Nouvelle campagne.
  2. Nomme-la pour ton équipe, pas pour l'utilisateur : « Promo été - push iOS » se retrouve dans six mois.
  3. Choisis le canal, écris le titre et le message.
  4. Choisis une audience, ou pose des règles à la volée.
  5. Envoyer maintenant, ou Programmer à une date.
  6. Va voir Analytics une heure plus tard : envoyés, délivrés, ouverts, cliqués.

Un premier envoi se fait sur une audience étroite : un push mal formulé ne se rattrape pas et coûte des désinstallations.

Audiences

Notifications → Audiences. Des segments réutilisables, partagés entre campagnes et automatisations. Une audience combine des règles avec ET / OU : plateforme (iOS, Android, web), langue, plan, tags, appareils enregistrés sur le projet.

Le nombre d'utilisateurs correspondants est estimé en direct pendant que tu construis les règles : une audience qui tombe à zéro se voit avant l'envoi, pas après. Une campagne peut aussi porter ses règles en ligne, sans audience nommée ; à nommer dès que le segment ressert.

Automatisations

Notifications → Automatisations. Un parcours déclenché par le comportement, pas par une date : onboarding, réengagement, relance après abandon.

RéglageCe qu'il décide
DéclencheurL'événement qui fait entrer l'utilisateur dans le parcours
ÉtapesLes messages, dans l'ordre, avec leurs délais
Règles de sortieCe qui interrompt le parcours en cours de route
RéentréeÀ chaque déclenchement, jamais, jamais tant qu'il est actif, ou après un délai

Une automatisation combine push, e-mail et in-app dans un même parcours : le message suit l'utilisateur là où il est joignable.

Les règles de sortie ne sont pas optionnelles

Le déclencheur fait entrer, l'événement de sortie fait sortir. Une relance « tu n'as pas fini ton inscription » qui continue après l'inscription est le meilleur moyen de faire désinstaller ton app. Pose l'événement de sortie en même temps que le déclencheur, pas après. Les événements viennent du SDK, via trackEvent.

Templates

Notifications → Templates. Des modèles réutilisables pour les messages In-App et les Mobile Landings : modale, bandeau, plein écran. Un template porte la mise en forme, la campagne porte le contenu ; trois campagnes qui partagent une identité visuelle partagent un template.

Analytics

Notifications → Analytics. Ce que les envois ont produit : un entonnoir d'engagement (envoyés → délivrés → ouverts → cliqués), une répartition du volume par canal et par type (campagnes / automatisations), et la performance par message, message par message.

Ce qu'on regarde en priorité :

ÉcartCe qu'il dit
Envoyés ≫ délivrésJetons périmés, ou mauvais environnement push
Délivrés ≫ ouvertsLe titre ne donne pas envie, ou le moment est mauvais
Ouverts ≫ cliquésLe message promet autre chose que ce qu'il ouvre

Réglages

Notifications → Réglages.

  • Canaux push : état des intégrations APNs et FCM, avec un lien direct vers leur configuration.
  • SDK : activation du produit sur le projet ; sans elle, aucun jeton d'appareil n'est enregistré.
  • Préférences utilisateur : nombre maximum d'appareils par utilisateur, comportement au-delà, traitement des appareils sans opt-in.

Suite