Apple a reconnu un bug dans iOS 17 qui provoquait des doublons. Cela a été corrigé dans iOS 17.3. En savoir plus.
Commencer ici
Choisissez la section qui correspond le mieux à votre situation :- Votre serveur relance des appels API échoués ou votre pipeline backend peut envoyer en double → Même message envoyé plusieurs fois
- Votre application utilise Firebase ou un autre SDK push aux côtés de OneSignal → Gestionnaires de notifications tiers
- Votre application Android personnalise les notifications dans le code (extension de service ou listener en premier plan) → Gestionnaires de notifications Android
- Votre application iOS implémente son propre
UNUserNotificationCenterDelegate→ Gestionnaire en premier plan iOS - Vous voyez des doublons uniquement sur les builds de développement ou avec plusieurs installations → Plusieurs instances d’application
Même message envoyé plusieurs fois
La cause la plus courante est l’envoi de la même charge utile de notification plus d’une fois via l’API OneSignal. Raisons courantes :- Votre serveur relance les requêtes sans vérifier si la première a réussi.
- Une logique dupliquée dans votre pipeline backend envoie la même notification deux fois.
- Vous migrez vers OneSignal mais envoyez toujours des notifications depuis un fournisseur précédent. Évitez d’envoyer depuis les deux systèmes en même temps.
Requêtes API idempotentes
Évitez les messages en double en réutilisant des clés d’idempotence lors des nouvelles tentatives.
Gestionnaires de notifications tiers
Des doublons peuvent se produire lorsque d’autre code dans votre application traite la charge utile push de OneSignal et affiche sa propre notification en plus de celle de OneSignal. Cela inclut :- D’autres SDK de push distant (par exemple, Firebase Cloud Messaging) qui reçoivent la même charge utile.
- Des gestionnaires de messages personnalisés tels qu’un
FirebaseMessagingServicesur Android ou unUNUserNotificationCenterDelegatesur iOS qui lisent la charge utile entrante et construisent une notification locale à partir de celle-ci.
Identification des notifications OneSignal
Chaque notification OneSignal inclut un objetcustom avec une clé i contenant l’UUID de la notification OneSignal :
JSON
Filtrage des notifications OneSignal dans les gestionnaires tiers
Dans tout gestionnaire non-OneSignal, vérifiez la clécustom.i et retournez en avance lorsqu’elle est présente. OneSignal gère alors ses propres charges utiles tandis que votre autre code continue de traiter les siennes.
- Android
- iOS
Dans un
FirebaseMessagingService personnalisé ou un autre gestionnaire de messages distants :Kotlin
Gestionnaires de notifications Android
OneSignal expose deux callbacks Android qui vous permettent d’intercepter et de personnaliser une notification avant qu’elle ne s’affiche :onNotificationReceiveddans une extension de service de notification — s’exécute pour chaque push, y compris lorsque l’application est en arrière-plan.onWillDisplaydans un listener de cycle de vie en premier plan — s’exécute uniquement lorsque l’application est en premier plan.
La règle preventDefault() et display()
OneSignal affiche chaque notification automatiquement à moins que vous ne la supprimiez avec event.preventDefault(). Deux erreurs courantes provoquent des doublons :
- Appeler
event.getNotification().display()sans d’abord appelerevent.preventDefault()— affiche la notification deux fois. - Publier une notification séparée avec
NotificationManagerCompat.notify()tandis que OneSignal affiche également l’originale.
display() de OneSignal, soit votre propre NotificationManagerCompat.notify(), jamais les deux.
onWillDisplay dans un listener de cycle de vie en premier plan :
Kotlin
Travail asynchrone dans les callbacks
Lorsque vous effectuez un travail en arrière-plan (appels réseau, recherches en base de données) avant l’affichage, appelezpreventDefault() de manière synchrone dans le callback et appelez display() uniquement après la fin du travail asynchrone. Retourner du callback sans preventDefault() permet à OneSignal d’afficher la notification, et un appel ultérieur à display() produit un doublon.
Gestionnaire en premier plan iOS
OneSignal se définit comme leUNUserNotificationCenterDelegate lors de l’initialisation du SDK. Si votre application implémente également la gestion des notifications en premier plan, la notification peut s’afficher deux fois — une fois depuis OneSignal et une fois depuis votre code.
Schémas courants qui provoquent des doublons :
- Implémenter votre propre
UNUserNotificationCenterDelegatesans transférer les appels à OneSignal, puis appelercompletionHandler([.banner, .sound])et afficher une alerte in-app personnalisée depuis la même méthode. - Planifier une notification locale (
UNUserNotificationCenter.current().add(...)) en réponse à un push entrant que OneSignal affiche également.
event.preventDefault() lorsque vous souhaitez afficher la notification vous-même :
Swift
Plusieurs instances d’application
- Android
- iOS
- Web
Des doublons peuvent se produire lorsque vous avez à la fois les versions de production et de développement de votre application installées. Chaque application a un nom de package unique et reçoit son propre jeton push.Appuyez longuement sur la notification pour confirmer quelle instance d’application l’a envoyée.
Conseils de diagnostic
Pour déboguer les doublons plus rapidement, collectez et envoyez les éléments suivants au support OneSignal :- ID d’abonnement OneSignal de l’appareil ayant reçu les doublons
- ID du message OneSignal ou un lien vers le message dans le tableau de bord
- Liste des autres bibliothèques ou plugins dans votre application
- Journal de débogage reproduisant le problème
- Étapes de reproduction détaillées
FAQ
Que se passe-t-il si j’ai deux SDK de notification dans mon application ?
Les deux SDK peuvent traiter et afficher indépendamment la même notification. OneSignal filtre ses propres notifications automatiquement, mais les autres SDK ne le font pas. Filtrez les charges utiles OneSignal des gestionnaires de votre autre SDK en vérifiant la clécustom.i. Consultez Gestionnaires de notifications tiers pour des exemples de code.
Comment envoyer des push depuis un fournisseur précédent et OneSignal en même temps ?
Vous pouvez faire la transition progressivement, mais évitez d’envoyer le même message depuis les deux fournisseurs.- Android : Supprimez l’ancien code de gestion des notifications du SDK lors de l’intégration de OneSignal et de la publication de l’application. Au fur et à mesure que les utilisateurs mettent à jour, ils cesseront de recevoir des push de l’ancien fournisseur.
- iOS : Vous pouvez continuer à envoyer depuis l’ancien fournisseur temporairement pendant que les utilisateurs mettent à jour. Une fois la transition complète, envoyez uniquement depuis OneSignal pour éviter les doublons.
Comment éviter plusieurs notifications pour des mises à jour qui changent rapidement ?
Utilisez uncollapse_id dans l’API Créer une notification pour remplacer les notifications précédentes plutôt que de les empiler. Lorsque plusieurs notifications partagent le même collapse_id, chaque nouvelle remplace la précédente dans la barre de notifications. Cela est utile pour les mises à jour de cours boursiers, les scores en direct, les ETA de livraison et les mises à jour fréquentes similaires.
Pages associées
Dépannage du SDK mobile
Résolvez les problèmes courants liés à la livraison des notifications push sur iOS et Android.
Dépannage du web push
Déboguez les problèmes d’abonnement, de service worker et de livraison du web push.
Dépannage des messages in-app
Corrigez les problèmes d’affichage, de déclencheurs et de doublons des messages in-app.
Extensions de service mobiles
Interceptez et personnalisez les notifications push avant l’affichage sur iOS et Android.
Notifications non affichées (web)
Résolvez les problèmes de notifications web push envoyées mais non affichées.