Passer à la navigation principale
Mobile Guides

Guide de mise en œuvre de la notification push Expo 2026

Martin Donadieu

Martin Donadieu

Spécialiste du contenu

Guide de mise en œuvre de la notification push Expo 2026

Vous êtes probablement à un point où l'application fonctionne, les utilisateurs ont signé, et le produit souhaite maintenant des flux de re-engagement qui ressentent la nativité. Les rappels de panier. Les invitations de révision. Les alertes de nouveaux messages. Les annonces de mise à jour. La première impulsion est souvent de « simplement brancher la notification push », puis une semaine plus tard, vous êtes en train de déboguer pourquoi un appareil reçoit des alertes, le simulateur semble s'enregistrer correctement, et personne ne peut expliquer pourquoi les appuis ne lancent pas l'écran approprié.

C'est là que les notifications push Expo sont soit agréablement simples, soit surprenamment fragiles.

Expo donne aux équipes React Native un niveau pratique sur APNs et FCM, ce qui est exactement pourquoi tant d'équipes l'utilisent. Mais la différence entre une démo et une mise en œuvre prête à la production est réelle. Le cycle de vie du jeton, le timing des autorisations, la configuration des écouteurs, la conception du payload, et la suppression des éléments de serveur font tous la différence. Si vous faites également des changements logiques fréquents dans l'application, le besoin de discipline opérationnelle devient encore plus aigu, surtout si votre travail de rétention dépend de la messagerie fiable et de la vitesse de mise à jour.

C'est la même préoccupation plus large derrière amélioration de la fidélité des utilisateurs d'applications mobiles: la livraison n'est utile que si l'expérience utilisateur qui l'entoure est prévisible.

Table des Matières

La Fondation pour captiver les utilisateurs avec les notifications de push Expo

Un Notif de push Expo La mise en place est séduisante pour une raison qui l'emporte sur toutes les autres. Elle élimine une grande partie de la complexité de la messagerie native que les équipes ne veulent pas gérer dès le premier jour. Au lieu de construire des canaux APNs et FCM directs en premier, vous pouvez travailler avec la passerelle d'Expo et vous concentrer sur le comportement du produit, la routage, l'UX des autorisations et la logique des messages backend.

Cette abstraction ne rend pas les notifications de push « moins réelles ». Elle change simplement où va votre effort d'ingénierie.

Le service est également suffisamment rapide que les performances ne sont généralement pas la première chose à craindre. De mars 14, 2023 à juin 12, 2023, les notifications de push d'Expo API ont montré un temps de réponse médian de 42 millisecondes, 273 millisecondes de latence p99et des une moyenne de 0,17 % d'erreurs quotidiennes à travers acrossdes dizaines de millions de messages quotidiens Knock’s Expo push API benchmark analysisKnock’s analyse de benchmark de la messagerie push Expo __CAPGO_KEEP_0__

. Cela devrait rassurer tout équipe qui se demande si Expo est seulement approprié pour des prototypes.

Ce que Expo cache réellement

  • Lorsque les équipes disent « messagerie push Expo », elles ont souvent en tête plusieurs préoccupations séparées regroupées ensemble : La mise en route du fournisseur : Expo redirige les messages vers le serveur APNs pour iOS et FCM pour Android.
  • Format du jeton : Votre serveur stocke et envoie un jeton de notification Expo au lieu de gérer la gestion des jetons spécifiques aux plateformes en premier.
  • Contrat de demande : Vous envoyez un payload par la méthode POST vers Expo’s push API au lieu d'intégrer directement les API de fournisseur natif.

C'est utile, mais cela crée également une confusion courante. Les équipes supposent parfois que Expo est responsable de tous les problèmes de livraison. En pratique, de nombreux échecs proviennent de l'application code, de jetons périmés, de payloads malformés ou d'une mauvaise gestion des autorisations.

Règle pratique : Traitez Expo comme un couche de transport fiable, et non comme un substitut d'une conception client et serveur solide.

Ce que signifie vraiment la maturité en production

Un démo fonctionnel prouve seulement que l'un des appareils a accepté un payload une seule fois. La maturité en production signifie autre chose :

Préoccupations Mentale de démo Mentale de production
Autorisations Demander immédiatement Demander dans le contexte, après que la valeur de l'utilisateur soit claire
Jetons Enregistrer une fois Rafraîchir, dupliquer, expirer et réconcilier
Charge utile Mettre tout dans data Garder les charge utiles petites et orientées vers l'action
Comportement de l'application Afficher un avertissement Se comporter correctement et gérer l'état en avant-plan
Opérations Tests manuels Réceptions, nettoyage, journaux et gestion des incidents

C'est la différence entre « notifications envoyées » et « notifications qui soutiennent un flux de workflow de produit réel ».

Initialisation et configuration du projet

Un grand nombre de douleurs de notification Expo commencent avant la première invitation de permission. Si votre configuration de projet est négligée, le client code peut paraître correct alors que l'application se comporte de manière incohérente entre les builds.

Un ordinateur portable moderne sur un bureau en bois affichant des fichiers de configuration code pour une mise en place de projet.

Commencez par les bibliothèques appropriées installées et un environnement de développement qui correspond à votre chemin de build. Si vous travaillez au-delà d'Expo Go, il est utile de synchroniser votre flux de travail local avec une configuration de client de développement Expo personnaliséeparce que le comportement des notifications doit souvent être validé dans une mise en production plus proche que d'une rapide exécution de sandbox.

Installez les packages de notification

En général, vous aurez besoin de :

  • expo-notifications pour les demandes d'autorisation, la récupération de jetons, les écouteurs et la présentation des notifications.
  • expo-device parce que vous devez protéger la récupération de jetons avec Device.isDevice.

Les commandes d'installation typiques dépendent de votre gestionnaire de packages, mais la clé est l'alignement de version avec votre Expo SDK. N'allez pas mixez des versions de packages arbitraires. Laissez Expo résoudre les versions compatibles.

Configurez la configuration du projet

Gardez votre config explicite. Un minimal app.json ou app.config.js context : Fragment de texte HTML d'une chaîne de dialogue Capgo plus longue (clé parente `alternatives_cta_questions`). Page/zone : page de comparaison des alternatives de mise à jour en direct de Capacitor. Rôle : Paragraphe de marketing ou juridique long. Vu dans : page alternatives.astro. Préservez les termes de produit et de marque Capgo ainsi que les termes de développeur exactement. Clé de message `alternatives_cta_questions` (Questions de CTA Alternatives). | Fragment de texte HTML d'une chaîne de dialogue Capgo plus longue (clé parente `appflow_cta_questions`). Page/zone : page de comparaison/migration de Appflow. Rôle : Paragraphe de marketing ou juridique long. Vu dans : page ionic-appflow.astro. Préservez les termes de produit et de marque Capgo ainsi que les termes de développeur exactement. Clé de message `appflow_cta_questions` (Questions de CTA Appflow). | Fragment de texte HTML d'une chaîne de dialogue Capgo plus longue (clé parente `capwesome_cta_questions`). Page/zone : page de comparaison de Capawesome. Rôle : Paragraphe de marketing ou juridique long. Vu dans : page capwesome.astro. Préservez les termes de produit et de marque Capgo ainsi que les termes de développeur exactement. Clé de message `capwesome_cta_questions` (Questions de CTA Capwesome). | Page/zone : page de services de consulting. Rôle : Sujet de section ou tagline. Vu dans : page consulting.astro. Préservez les termes de produit et de marque Capgo ainsi que les termes de développeur exactement. Clé de message `consulting_faq_subtitle` (Sujet de FAQ de consulting). | Page/zone : page de comparaison/migration de Appflow. Rôle : Étiquette de navigation ou élément de navigation court. Vu dans : page ionic-appflow.astro, page ionic-enterprise-plugins.astro, page solutions/ionic-enterprise-plugins.astro. Clé de message `appflow_plugins_or` (Appflow Plugins Ou).

{
  "expo": {
    "name": "MyApp",
    "slug": "my-app",
    "plugins": ["expo-notifications"],
    "ios": {
      "bundleIdentifier": "com.example.myapp"
    },
    "android": {
      "package": "com.example.myapp"
    },
    "extra": {
      "eas": {
        "projectId": "your-project-id"
      }
    }
  }
}

devrait refléter le fait que les notifications font partie de votre contrat d'application, et non une pensée après coup.

  • Un ou deux détails importants ici :  il faut que le code que vous déployez corresponde à l'application que vous déployez réellement.
  • Le plugin de notifications assure que le projet natif reçoit la configuration requise lors de la construction.
  • l'ID du projet EAS a de l'importance lorsque votre récupération de jeton s'attend à ce que l'application soit associée au projet Expo correct.

Configurez un gestionnaire de notification tôt

Un grand nombre de tutoriels de base attendent trop longtemps pour définir le comportement de notification. N'y allez pas. Placez-le près du démarrage de l'application afin que le comportement en arrière-plan soit prévisible.

import * as Notifications from 'expo-notifications';

Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: true,
    shouldPlaySound: false,
    shouldSetBadge: true,
  }),
});

Les équipes décident si les notifications en arrière-plan doivent afficher une alerte, jouer un son ou affecter les badges. Le comportement exact dépend de votre produit. Une application de messagerie et une application de paiement ne feront pas les mêmes choix.

Si vous ne définissez pas intentionnellement le comportement en arrière-plan, votre équipe finira par déboguer les « notifications manquantes » qui ont été effectivement reçues mais n'ont jamais été présentées comme attendu par le produit.

Android nécessite une configuration de canal

Les canaux de notification Android ne sont pas optionnels en pratique. Si vous les ignorez, vos alertes peuvent paraître incohérentes ou ne pas correspondre aux attentes des utilisateurs.

import { Platform } from 'react-native';
import * as Notifications from 'expo-notifications';

export async function configureAndroidNotifications() {
  if (Platform.OS !== 'android') return;

  await Notifications.setNotificationChannelAsync('default', {
    name: 'Default',
    importance: Notifications.AndroidImportance.MAX,
  });
}

Configurez cela lors de l'initialisation de l'application. Ensuite, maintenez les identifiants de canal stables. Les changer sans réfléchir rend le comportement des notifications plus difficile à raisonner plus tard.

Demander la Permission et Capturer les Jetons de Push

C'est là où beaucoup d'équipes copient un morceau de code, puis regrettent finalement.

Les demandes de permission nécessitent un timing, une prise en compte de la plateforme et un traitement asynchrone discipliné. La capture de jetons doit se produire uniquement sur un appareil physique, uniquement après que les permissions soient résolues, et uniquement si vous êtes prêt à stocker le résultat sur votre serveur backend immédiatement.

Un diagramme étape par étape montrant le processus d'obtention et de stockage des jetons de notification push Expo.

La fonction client qui devrait être votre point de départ.

Utilisez une fonction comme celle-ci comme point de départ :

import * as Device from 'expo-device';
import * as Notifications from 'expo-notifications';
import Constants from 'expo-constants';
import { Platform } from 'react-native';

type RegisterResult =
  | { ok: true; token: string }
  | { ok: false; reason: string };

export async function registerForExpoPushNotificationsAsync(): Promise<RegisterResult> {
  if (!Device.isDevice) {
    return { ok: false, reason: 'Push notifications require a physical device.' };
  }

  if (Platform.OS === 'android') {
    await Notifications.setNotificationChannelAsync('default', {
      name: 'Default',
      importance: Notifications.AndroidImportance.MAX,
    });
  }

  const permissions = await Notifications.getPermissionsAsync();
  let finalStatus = permissions.status;

  if (finalStatus !== 'granted') {
    const request = await Notifications.requestPermissionsAsync();
    finalStatus = request.status;
  }

  if (finalStatus !== 'granted') {
    return { ok: false, reason: 'Notification permission was not granted.' };
  }

  const projectId =
    Constants.expoConfig?.extra?.eas?.projectId ??
    Constants.easConfig?.projectId;

  if (!projectId) {
    return { ok: false, reason: 'Missing EAS project ID configuration.' };
  }

  const tokenResponse = await Notifications.getExpoPushTokenAsync({ projectId });

  return { ok: true, token: tokenResponse.data };
}

L'ordre compte. Vous vérifiez le type d'appareil en premier, configurez le comportement du canal Android, résolvez les permissions, validez la configuration du projet, puis demandez le jeton Expo.

Pourquoi Device.isDevice n'est pas facultatif

C'est l'un des rares erreurs qui crée beaucoup de bruit tout en paraissant sans danger. Les équipes expérimentées ne demandent la permission que conditionnellement lorsque Device.isDevice est vraiet un piège commun est de passer outre ce garde, ce qui conduit les développeurs à envoyer des notifications vers des jetons de simulateur invalides et à blâmer Expo lorsque le problème est vraiment la configuration de l'application, comme décrit dans Eagerworks’ implémentation de notifications Expo note.

C'est pourquoi la vérification se trouve en haut de la fonction. Ne la cachez pas derrière un helper. Faites-l’évidente.

Les résultats du simulateur sont utiles pour les tests de l'interface utilisateur. Ils ne sont pas fiables pour valider l'enregistrement du jeton de push.

Demandez la permission au bon moment

Ne demandez pas sur l'écran de démarrage. Ne demandez pas avant que l'utilisateur comprenne la valeur. Le meilleur moment est généralement après une action de l'utilisateur qui rend les avantages des notifications concrètes, comme l'activation des mises à jour de livraison, la participation à une conversation ou la sauvegarde d'un élément surveillé.

Une bonne implémentation suit généralement ce flux :

  1. L'utilisateur atteint une limite de fonctionnalité significative.
  2. L'application explique la valeur des notifications dans votre propre interface utilisateur.
  3. L'application demande la permission système.
  4. L'application stocke le jeton sur le serveur de backend immédiatement si la permission est accordée.

Cette dernière étape est là où beaucoup d'applications échouent. Elles récupèrent le jeton, le logent localement et reportent l'enregistrement de backend. Plus tard, le support ne peut pas dire quel appareil avait quel jeton à quel moment.

Voici un exemple simple de stockage du jeton après l'enregistrement :

export async function enablePushForCurrentUser(userId: string) {
  const result = await registerForExpoPushNotificationsAsync();

  if (!result.ok) {
    return result;
  }

  await fetch('https://api.example.com/push-tokens', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: 'Bearer user-session-token',
    },
    body: JSON.stringify({
      userId,
      token: result.token,
      platform: Platform.OS,
    }),
  });

  return result;
}

Later in the workflow, this walkthrough is a helpful visual reference:

Pour les équipes créant des applications avec de nombreuses mises à jour, il est également utile de considérer l'enregistrement des jetons comme faisant partie de l'état opérationnel de l'application, et non seulement comme partie de l'inscription. Cela correspond bien à des workflows plus larges de livraison d'applications Expooù le comportement de l'application peut changer fréquemment et l'état du serveur doit rester synchronisé.

Envoyer des Notifications à Partir de Votre Serveur

Une fois que votre serveur backend a un jeton de notification valide Expo, envoyer une notification est simple.

La partie difficile n'est pas la demande elle-même. fetch:

type ExpoPushMessage = {
  to: string;
  title: string;
  body: string;
  sound?: 'default' | null;
  data?: Record<string, unknown>;
};

export async function sendExpoPushNotification(token: string) {
  const message: ExpoPushMessage = {
    to: token,
    title: 'New review received',
    body: 'Tap to open the order details.',
    sound: 'default',
    data: {
      type: 'new_review',
      orderId: 'ord_123',
      screen: 'OrderDetails',
    },
  };

  const response = await fetch('https://exp.host/--/api/v2/push/send', {
    method: 'POST',
    headers: {
      Accept: 'application/json',
      'Accept-encoding': 'gzip, deflate',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(message),
  });

  const result = await response.json();
  return result;
}

C'est déterminer ce qui doit figurer dans le payload et combien de confiance vous placez dans l'état du client.

Voici un exemple minimal Node-style utilisant

Ce que chaque champ du payload doit faire Ne traitez pas le payload comme un simple dépôt. Conservez chaque champ intentionnel.
to Token de notification Push cible Vérifiez qu'il appartient au dossier actuel du dispositif
title Titre de la notification Gardez-le court et lisible par l'homme
body Texte visible principal Faites clair l'action
sound Comportement du son du système Utilisez-l’avec parcimonie pour les alertes de haute valeur
data Meta-données spécifiques à l'application Préférez les ID et les indices de route plutôt que du contenu riche

Le data L'objet est là où les flux de travail des produits deviennent utiles. Vous pouvez passer un type et un ID de dossier, puis laisser l'application récupérer les données les plus récentes lorsque l'utilisateur clique dessus. C'est plus sûr que d'insérer des gros ou des blobs sensibles directement dans le payload.

Conservez les payloads petits et sans intérêt

D'après Le guide de la messagerie de Courier pour les notifications Expo, les jetons de notification Expo devraient être traités comme éphémères, les payloads qui dépassent les limites de taille d'environ 4 Ko peuvent être abandonnés, et un modèle fiable est d'envoyer des payloads de métadonnées petites telles que { "type": "new_review", "id": 123 } au lieu de grands JSON ou de médias intégrés. Ce conseil correspond à ce qui fonctionne dans les systèmes réels. Les payloads petits échouent moins souvent et vieillissent mieux lorsque les logiques de l'application changent.

Envoyez suffisamment de données pour router l'utilisateur. Récupérez le reste après que l'application s'ouvre.

Comportements serveurs utiles

Une fonction de base d'envoi est suffisante pour les tests. Une fonction de production ajoute généralement quelques responsabilités supplémentaires :

Before debugging client listeners, send a manual test push first. If a token receives a plain notification with a tiny payload, your transport path is probably healthy. If not, don’t start by changing navigation code. Start by validating the token, payload shape, and permission state.

La traduction a été effectuée en gardant en compte le contexte culturel de la langue cible.

Note: La traduction de 'transport' a été effectuée en gardant en compte le contexte de la page, qui est lié à la technologie de notification.

Ce qui signifie gérer deux moments séparés :

  • la notification arrive tandis que l'application est ouverte
  • l'utilisateur interagit avec la notification depuis la barre des notifications ou l'écran de verrouillage

Un diagramme de flux illustrant le cycle de vie des notifications push pour les applications mobiles dans les états d'avant-plan et d'arrière-plan.

La réception et la réponse de l'utilisateur sont des événements différents

Une configuration fiable comprend généralement les deux écouteurs :

import { useEffect } from 'react';
import * as Notifications from 'expo-notifications';

export function useNotificationObservers(
  onForegroundMessage: (notification: Notifications.Notification) => void,
  onNotificationTap: (response: Notifications.NotificationResponse) => void
) {
  useEffect(() => {
    const receivedSub = Notifications.addNotificationReceivedListener(
      (notification) => {
        onForegroundMessage(notification);
      }
    );

    const responseSub = Notifications.addNotificationResponseReceivedListener(
      (response) => {
        onNotificationTap(response);
      }
    );

    return () => {
      receivedSub.remove();
      responseSub.remove();
    };
  }, [onForegroundMessage, onNotificationTap]);
}

addNotificationReceivedListener exécuté lorsque l'application est active. addNotificationResponseReceivedListener exécuté lorsque l'utilisateur clique sur une notification livrée. N'y combinez pas mentalement. Ils servent des chemins UX différents.

Lisez le payload de données et naviguez intentionnellement

Voici un modèle pratique pour la gestion des clics :

type NotificationData = {
  type?: string;
  orderId?: string;
  screen?: string;
};

export function handleNotificationTap(
  response: Notifications.NotificationResponse,
  navigation: any
) {
  const data =
    response.notification.request.content.data as NotificationData;

  if (data.screen === 'OrderDetails' && data.orderId) {
    navigation.navigate('OrderDetails', { orderId: data.orderId });
    return;
  }

  if (data.type === 'new_review') {
    navigation.navigate('Inbox');
    return;
  }

  navigation.navigate('Home');
}

Ce modèle reste résilient car le payload contient des indices de navigation, pas des documents complets. Si l'ordre a changé depuis que la notification a été envoyée, l'application peut récupérer l'état serveur actuel après la navigation.

Une notification cliquée devrait conduire à un destinataire évident. Si votre chemin de secours est vague, les utilisateurs le remarquent immédiatement.

Le comportement en arrière-plan devrait correspondre au contexte utilisateur

Lorsque l'application est déjà ouverte, afficher une alerte système sans réfléchir peut paraître maladroit. Parfois, la bonne action est d'afficher un bandeau dans l'application, mettre à jour une vignette ou effectuer un rafraîchissement silencieux. Une page de boîte de réception de support ne nécessite peut-être pas d'alerte visible lorsque l'utilisateur lit déjà cette conversation.

C'est pourquoi votre écouteur en arrière-plan devrait se brancher en fonction de la route et du type de notification. Par exemple :

  • L'écran de conversation ouvert : ajoutez le message et évitez un bandeau redondant
  • L'écran de tableau de bord ouvert : affichez un toast léger dans l'application
  • Événement critique de compte : donnez un traitement UI plus fort

Une approche simple ressemble à ceci :

export function handleForegroundNotification(
  notification: Notifications.Notification,
  currentRouteName: string
) {
  const data = notification.request.content.data as { type?: string };

  if (currentRouteName === 'ChatThread' && data.type === 'new_message') {
    // refresh local thread state
    return;
  }

  // otherwise show your own in-app UI or update badges
}

Si votre application ne distingue pas ces contextes, les utilisateurs ressentiront une fatigue des notifications plus rapidement, même si la livraison est correcte sur le plan technique.

Meilleures Pratiques de Production et Pièges Fréquents

La plupart des configurations de notifications push Expo ne fonctionnent pas car les équipes supposent que le jeton est permanent, que les payloads peuvent transporter n'importe quoi et que les mises à jour de l'application ne toucheront pas à la logique des notifications.

Ce postulat ne résiste pas à la production.

Un infographique de checklist décrivant huit meilleures pratiques pour gérer les notifications push en production pour les applications mobiles.

Les jetons sont éphémères, pas des enregistrements d'identité

Un jeton de notification Expo est mieux traité comme un bail, et non comme un identifiant de périphérique à vie. Les jetons peuvent tourner après un réinstall, un changement d'OS ou d'autres événements de cycle de vie. Si un jeton revient finalement DeviceNotRegisteredvotre backend devrait cesser de le traiter comme actif.

Un modèle de backend pratique stocke :

  • l'ID de l'utilisateur
  • la plateforme
  • les métadonnées d'installation scoping
  • le jeton actuel
  • la date de dernière vue
  • État tel que actif, obsolète ou révoqué

Ne stockez pas un champ de jeton sur la table utilisateur et appelez cela terminé. Les utilisateurs ont plusieurs appareils, et les appareils changent d'état.

La stratégie de mise à jour compte plus que la plupart des tutoriels ne l'admettent

La guidance officielle de l'écosystème laisse un véritable écart opérationnel ici. Le contenu existant sur les notifications Expo ne précise souvent pas comment maintenir la validité du jeton au cours des cycles de revue de l'App Store et des mises à jour OTA , ce qui est particulièrement important pour les équipes qui livrent des changements en direct car la fiabilité des notifications dépend de l'état actuel du jeton et de la synchronisation back-end, comme le note la documentation des notifications ExpoCe qui affecte la façon dont vous conçez les déclencheurs de mise à jour. Les bons moments pour réconcilier l'état du jeton incluent : Lancement de l'application après une mise à jour.

Connexion de l'utilisateur

  • Changement des paramètres de permission
  • Rotation de clés dans votre processus de livraison
  • Lancement de l'application après une mise à jour
  • Connexion de l'utilisateur : la mise à jour du jeton est nécessaire lors de la connexion de l'utilisateur, car l'état du jeton peut avoir changé depuis la dernière connexion. Cela est particulièrement important si l'utilisateur utilise plusieurs appareils ou si l'état du jeton est sensible aux changements de connexion.
  • Flux de récupération après les billets de support liés à la push

La sécurité et la conformité ne doivent pas se trouver à la fin du sprint

Beaucoup de tutoriels Expo se concentrent sur les mécanismes et ignorent le risque opérationnel. C'est acceptable pour les applications de loisirs. Ce n'est pas acceptable pour les produits de commerce réglementé, adjacents à la santé ou au financement.

La discussion de Courier axée sur les entreprises met en évidence un manque de conseils pratiques autour de la gestion des consentements, des traçages d'audit et de la minimisation de l'exposition des données sensibles dans les payloads de notification. Le takeaway direct de l'ingénierie est simple :

  • Ne mettez pas les données sensibles de votre entreprise dans le texte ou les métadonnées de payload de notification.
  • Enregistrez les changements de consentement côté serveur.
  • Enregistrez quel intent de notification a été envoyé à quel jeton.
  • Utilisez les IDs dans les payloads et récupérez le contenu protégé après l'ouverture de l'application.

Pour les équipes qui alignent les opérations de mise en production avec les pratiques de sécurité plus larges et __CAPGO_KEEP_0__ de conformité avec les magasins d'applications app store compliance and API security practicespush should be included in the same review discipline as auth, analytics, and backend event logging.

Les notifications push sont des messages destinés aux utilisateurs, mais elles constituent également un problème de systèmes distribués. Traitez-les avec la même attention que vous accordez à l'état d'authentification et aux événements de paiement.

Ce qui fonctionne généralement et ce qui fonctionne généralement

Ce qui fonctionne généralement Demander la permission après une explication claire de la valeur
Demander la permission sur la première frame Tester sur des appareils réels
Faire confiance à l'enregistrement du simulateur Stockez les jetons avec le contexte de l'appareil
Un jeton par enregistrement utilisateur Envoyer de petits payloads de métadonnées
Inclure de grands ou sensibles blobs pagePath
Manipuler les événements de fond et de tap séparément Supposer que toutes les notifications suivent un chemin unique
Expirez les jetons périmés avec une agressivité accrue Réessayer les jetons morts à l'infini

Une bonne configuration de push Expo n'est pas compliquée. C'est discipliné.


Si votre équipe livre des changements logiques fréquents et a besoin d'un contrôle serré sur le comportement de la mise en production, les retours en arrière et la visibilité de la livraison, Capgo vaut le coup d'œil. Il aide les équipes mobiles à envoyer des mises à jour rapidement sans attendre la revue de l'application, ce qui est particulièrement utile lorsque les flux de notification, la logique de routage ou les corrections côté client doivent atteindre les utilisateurs rapidement.

Mises à jour en temps réel pour les applications Capacitor.

Lorsqu'un bug de la couche web est actif, expédiez la correction par le biais de Capgo plutôt que d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les modifications natives suivent la voie de revue normale.

Soutien humain de Martin

Commencez Maintenant

Dernières actualités

Capgo vous offre les meilleures informations dont vous avez besoin pour créer une application mobile véritablement professionnelle.