Notifications : push et messages in-app

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
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
Plateforme Paquet Symbole iOS 16 produit SPM AppwinNotificationsAppwinNotificationsAndroid 7.0 (API 24) io.appwin:appwin-notificationsio.appwin.notifications.AppwinNotificationsFlutter 3.3 appwin_notificationsAppwinNotifications.instanceReact Native 0.73 @appwin/react-nativeAppwinNotifications - 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.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() }isReadyrelit le dernier verdict sans relancerinitialize().stop()défait tout ce questart()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 parAppwinCore.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 :
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 :
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énement | Qui l'envoie |
|---|---|
app_open, app_background, session_start, push_opt_in | Le SDK, après start() |
purchase | Toi, avec le montant dans les propriétés si la campagne segmente dessus |
custom_event | Toi, nommé par eventName |
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().
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 :
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
| Canal | Où ça s'affiche |
|---|---|
| Push mobile | Notification système, app fermée ou en arrière-plan |
| In-App | Modale, bandeau ou plein écran, app ouverte |
| Web push | Navigateur, via FCM |
| Mobile landing | Page 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
- Notifications → Campagnes → Nouvelle campagne.
- Nomme-la pour ton équipe, pas pour l'utilisateur : « Promo été - push iOS » se retrouve dans six mois.
- Choisis le canal, écris le titre et le message.
- Choisis une audience, ou pose des règles à la volée.
- Envoyer maintenant, ou Programmer à une date.
- 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églage | Ce qu'il décide |
|---|---|
| Déclencheur | L'événement qui fait entrer l'utilisateur dans le parcours |
| Étapes | Les messages, dans l'ordre, avec leurs délais |
| Règles de sortie | Ce 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é :
| Écart | Ce qu'il dit |
|---|---|
| Envoyés ≫ délivrés | Jetons périmés, ou mauvais environnement push |
| Délivrés ≫ ouverts | Le titre ne donne pas envie, ou le moment est mauvais |
| Ouverts ≫ cliqués | Le 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.