Skip to main content

Configuration et débogage

Vous devrez peut-être envelopper vos appels OneSignal dans OneSignalDeferred.push(async function (OneSignal) { ... }) (utilisez function (OneSignal) { ... } lorsque vous n’avez pas besoin de await). L’argument OneSignal est l’instance du SDK utilisée tout au long de cette référence (par exemple await OneSignal.init({ ... })). Vous pouvez pousser plusieurs callbacks, ou placer plusieurs instructions dans un seul callback. Le SDK OneSignal est chargé avec l’attribut defer sur votre page. Par exemple : <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script> Ainsi, le SDK s’exécute après l’analyse du document et ne bloque pas le rendu. Les scripts qui s’exécutent plus tôt ont tout de même besoin d’un endroit où mettre en file d’attente le travail jusqu’à ce que le SDK soit prêt. Commencez par : window.OneSignalDeferred = window.OneSignalDeferred || []; Cette ligne définit OneSignalDeferred si elle est absente. Si un extrait antérieur de la page l’a déjà définie, la même référence est conservée ; sinon, elle commence comme un tableau vide [] sur lequel vous poussez des callbacks. Les tableaux exposent une méthode .push(), donc vous mettez des fonctions en file d’attente avec OneSignalDeferred.push(...). Lorsque le SDK se charge, il vide la file d’attente et redéfinit .push() de sorte que les pushs ultérieurs s’exécutent immédiatement (voir le code source du SDK Web).
La plupart des extraits ci-dessous utilisent OneSignal seul. Considérez-le comme l’instance de votre callback différé après await OneSignal.init({ ... }), sauf indication contraire dans une section (par exemple setConsentRequired() avant init).

init()

Initialise le SDK OneSignal. Ceci devrait être appelé dans la balise <head> une fois sur chaque page de votre site. Le ONESIGNAL_APP_ID peut être trouvé dans Clés et ID.
Si vous souhaitez retarder l’initialisation du SDK OneSignal, nous recommandons d’utiliser nos méthodes de confidentialité.
Les options d’init ne fonctionnent qu’avec la Configuration du code personnalisé. Sinon, elles sont configurées dans le tableau de bord OneSignal.

Paramètres promptOptions

Utilisez promptOptions pour localiser ou personnaliser les invites d’autorisation utilisateur. Tous les champs sont optionnels. Structure : promptOptions.slidedown.prompts est un tableau ; chaque élément est une configuration d’invite. Les champs type, autoPrompt, delay, text et categories appartiennent à chaque objet à l’intérieur de prompts, et non comme des clés de premier niveau à côté de appId dans init.

Paramètres notifyButton

Configurez la cloche d’abonnement (bouton de notification) affichée sur la page.

Paramètres welcomeNotification

Personnalisez la notification de bienvenue envoyée après le premier abonnement.
Exemple :

setLogLevel()

Configure la journalisation pour afficher des logs supplémentaires dans la console. Consultez Étapes de dépannage pour plus de détails. Exécutez depuis un callback différé après init (même instance OneSignal qu’ailleurs).
JavaScript
Niveaux de log :
  • 'trace'
  • 'debug'
  • 'info'
  • 'warn'
  • 'error'

Identité et propriétés de l’utilisateur

Lorsque les utilisateurs s’abonnent aux notifications push sur votre site web, OneSignal crée automatiquement un OneSignal ID (ID de niveau utilisateur) et un Subscription ID (ID de niveau appareil). Vous pouvez associer plusieurs abonnements (par exemple, appareils, emails, numéros de téléphone) à un seul utilisateur en appelant login() avec votre identifiant utilisateur unique.
Consultez Utilisateurs et Abonnements pour plus de détails.

login(external_id)

Définit le contexte utilisateur actuel sur l’external_id fourni. Cela lie l’appareil actuel (abonnement push web) à un utilisateur connu et unifie toutes les données futures sous un seul onesignal_id. Utilisez cette méthode uniquement pour les utilisateurs identifiés (par exemple, après une connexion ou une restauration de compte). Pour les utilisateurs anonymes, n’appelez pas login. Suivez-les plutôt à l’aide de leur onesignal_id attribué automatiquement (voir OneSignal.User.onesignalId). Ce qui se passe lorsque vous appelez login(external_id) Le SDK se comporte différemment selon que l’external_id existe déjà ou non dans l’application OneSignal. Si l’external_id existe déjà :
  • Le SDK bascule vers cet utilisateur existant.
    • Vous pouvez voir un 409 Conflict dans le journal réseau ou la console du navigateur. Cela signifie que l’External ID existe déjà dans l’application ; c’est attendu dans ce cas et il ne s’agit généralement pas d’un rejet de promesse que vous devez gérer.
  • Le onesignal_id actuel est abandonné et le onesignal_id existant de cet utilisateur est chargé.
  • L’appareil actuel (abonnement push web) est lié à l’utilisateur existant.
  • Les données anonymes collectées avant la connexion ne sont pas fusionnées et sont supprimées. Cela inclut les tags, les données de session, les abonnements email/SMS et les autres propriétés utilisateur locales.
Si l’external_id n’existe pas :
  • Un nouvel utilisateur est créé avec le onesignal_id actuel.
  • Toutes les données collectées lorsque l’utilisateur était anonyme sont conservées.
  • L’appareil (abonnement push web) devient lié à ce nouvel utilisateur.
Comportement de réessai :
  • Le SDK réessaie automatiquement la requête de connexion en cas d’échecs réseau ou d’erreurs serveur.
  • Vous n’avez pas besoin d’implémenter votre propre logique de réessai.
Bonnes pratiques :
  • Appelez login(external_id) à chaque chargement de page une fois que vous connaissez l’ID de l’utilisateur (par exemple, après la connexion ou la restauration de session).
  • Appelez-la à nouveau chaque fois que l’utilisateur connecté change (changement de compte).
  • N’appelez pas login avant de disposer d’un identifiant utilisateur stable et connu.
JavaScript

logout()

Dissocie l’utilisateur actuel de l’abonnement push web.
  • Supprime l’external_id de l’abonnement push web actuel. Ne supprime pas l’external_id des autres abonnements.
  • Réinitialise le onesignal_id vers un nouvel utilisateur anonyme.
  • Toutes les nouvelles données (par exemple tags, abonnements, données de session, etc.) seront désormais définies sur le nouvel utilisateur anonyme jusqu’à ce qu’il soit identifié avec la méthode login.
Utilisez ceci lorsqu’un utilisateur se déconnecte de votre site et que vous ne souhaitez plus envoyer de messages transactionnels ciblés à ce navigateur.
JavaScript

OneSignal.User.onesignalId

Récupère le onesignal_id de l’utilisateur actuel stocké localement dans le navigateur. Cette valeur représente le contexte utilisateur actif (l’User ID de OneSignal) et peut changer au fil du temps — par exemple, lorsque vous appelez login(external_id) ou lorsque le SDK s’initialise. Si elle est appelée trop tôt, cette méthode peut renvoyer null. Cette valeur n’est pas le Subscription ID, qui sert à identifier le navigateur, c’est-à-dire l’abonnement push web (voir User.PushSubscription.id). Quand le onesignal_id est disponible :
  • Après que le SDK OneSignal a terminé son initialisation
  • Après qu’un utilisateur est identifié avec login(external_id)
  • Après un changement d’utilisateur ou une restauration de session
Si vous devez réagir de manière fiable aux changements ou obtenir cet ID, utilisez User State addEventListener('change', …) au lieu de faire du polling. Cas d’utilisation courants : Dans la plupart des cas, vous voudrez utiliser votre propre External ID défini via la méthode login. Cependant, il existe des cas où vous pourriez vouloir utiliser le onesignal_id directement.
  • Suivre les utilisateurs anonymes avant qu’un External ID ne soit défini
  • Stocker le OneSignal ID dans votre backend pour le support ou le débogage
  • Corréler les utilisateurs OneSignal avec les journaux internes
  • Afficher l’ID pour le dépannage ou l’assurance qualité
Ne conservez pas le OneSignal ID comme identifiant utilisateur permanent. Il peut changer lorsque les utilisateurs se connectent, se déconnectent ou changent de compte.
JavaScript

OneSignal.User.externalId

Récupère l’External ID de l’utilisateur actuel enregistré localement dans le navigateur. Peut être null si non défini via la méthode login ou si appelé avant l’initialisation de l’état utilisateur. Utilisez plutôt User State addEventListener('change', …) pour écouter les changements d’état utilisateur.
JavaScript

addEventListener() État utilisateur

Écoute les changements dans le contexte utilisateur (par exemple, connexion, déconnexion, attribution d’ID).
JavaScript

addAlias(), addAliases(), removeAlias(), removeAliases()

Les alias sont des identifiants alternatifs (comme des noms d’utilisateur ou des ID CRM).
  • Définissez l’external_id avec login() avant d’ajouter des alias. Les alias ajoutés aux abonnements sans external_id ne se synchroniseront pas sur plusieurs abonnements.
  • Consultez Alias pour plus de détails.
JavaScript

getLanguage(), setLanguage()

Obtenez et/ou remplacez la langue auto-détectée de l’utilisateur. Consultez Messagerie multilingue pour une liste des codes de langue disponibles.
JavaScript

Événements personnalisés

Déclenchez des Journeys et l’activation de l’étape Wait Until via un événement personnalisé.
Les événements personnalisés nécessitent le SDK Web 160500+.Un utilisateur doit être connecté pour que les événements personnalisés soient suivis.Appelez les API d’événements personnalisés sur l’instance OneSignal passée à OneSignalDeferred.push (voir Configuration et débogage en haut de cette page), et non sur window.OneSignal — le SDK de page est initialisé via la file d’attente différée, et ce callback est le moyen pris en charge d’accéder à OneSignal.User.
Suivez et envoyez un événement personnalisé effectué par l’utilisateur actuel.
  • name - Requis. Le nom de l’événement sous forme de chaîne.
  • properties - Optionnel. Paires clé-valeur à ajouter à l’événement. Le dictionnaire ou la carte des propriétés doit être sérialisable en un objet JSON valide. Prend en charge les valeurs imbriquées.
Le SDK inclut automatiquement les données spécifiques à l’application dans le payload des propriétés sous la clé réservée os_sdk qui sera disponible à la consommation. Par exemple, pour cibler les événements par type d’abonnement, vous accéderiez à os_sdk.type.
json

trackEvent()

Appelez après la fin de init(). Cet exemple utilise un seul callback différé afin que init s’exécute toujours avant trackEvent :
JavaScript
En production, ajoutez trackEvent au callback différé où vous faites déjà await OneSignal.init(...). N’enregistrez pas un second init sauf si c’est intentionnel.

Tags

Les tags sont des paires personnalisées clé : valeur de données chaîne que vous définissez sur les utilisateurs en fonction d’événements ou de propriétés utilisateur. Consultez Tags pour plus de détails.

addTag(), addTags()

Définissez un ou plusieurs tags sur l’utilisateur actuel.
  • Les valeurs seront remplacées si la clé existe déjà.
  • Dépasser la limite de tags de votre plan entraînera l’échec silencieux des opérations.
JavaScript

removeTag(), removeTags()

Supprimez un ou plusieurs tags de l’utilisateur actuel.
JavaScript

getTags()

Renvoie la copie locale des tags de l’utilisateur. Les tags sont mis à jour depuis le serveur pendant login() ou les nouvelles sessions d’application.
JavaScript

Confidentialité

setConsentRequired()

Impose le consentement de l’utilisateur avant le début de la collecte de données. Doit être appelé avant l’exécution de init() (par exemple au début du premier callback OneSignalDeferred, avant await OneSignal.init(...)). Cette méthode est identique à l’ajout de requiresUserPrivacyConsent: true aux options d’init.
JavaScript

setConsentGiven()

Accorde ou révoque le consentement de l’utilisateur pour la collecte de données. Sans consentement, aucune donnée n’est envoyée à OneSignal et aucun abonnement n’est créé.
  • Si setConsentRequired() ou requiresUserPrivacyConsent est défini sur true, notre SDK ne sera pas complètement activé jusqu’à ce que setConsentGiven soit appelé avec true.
  • Si setConsentGiven est défini sur true et qu’un abonnement est créé, puis qu’il est ensuite défini sur false, cet abonnement ne recevra plus de mises à jour. Les données actuelles de cet abonnement restent inchangées jusqu’à ce que setConsentGiven soit à nouveau défini sur true.
  • Si vous souhaitez supprimer les données utilisateur et/ou d’abonnement, utilisez nos API Delete user ou Delete subscription.
JavaScript

Abonnements

Un abonnement représente une instance unique de canal de messagerie (par exemple, un navigateur) et possède un Subscription ID unique (l’ID de niveau appareil de OneSignal). Un utilisateur peut avoir plusieurs abonnements sur différents appareils et plateformes. Consultez Abonnements pour plus de détails.

User.PushSubscription.id

Récupère le Subscription ID push web du navigateur actuel, stocké localement par le SDK. Cet ID identifie de manière unique le canal push de ce navigateur spécifique, et non l’utilisateur. Il est couramment utilisé pour associer des appareils ou des navigateurs à votre backend ou pour déboguer des problèmes de livraison. Si elle est appelée avant la création ou la restauration de l’abonnement, cette valeur peut être null.
Pour détecter de manière fiable quand le Subscription ID push web devient disponible ou change, utilisez le listener d’abonnement push.
JavaScript

User.PushSubscription.token

Renvoie le token d’abonnement push actuel. Peut renvoyer null si appelé trop tôt. Il est recommandé d’obtenir ces données dans l’observateur d’abonnement pour réagir aux changements.
JavaScript

addEventListener() Changements d’abonnement push

Utilisez cette méthode pour répondre aux changements d’abonnement push comme :
  • L’appareil reçoit un nouveau token push de Google (FCM) ou Apple (APNs)
  • OneSignal attribue un ID d’abonnement
  • La valeur optedIn change (par exemple après un appel à optIn() ou optOut())
  • L’utilisateur bascule la permission push dans les paramètres du navigateur ou du système d’exploitation, puis revient sur votre site
Lorsque cela se produit, le SDK exécute votre listener change avec un objet d’état qui inclut previous et current afin que vous puissiez détecter ce qui a changé.
Lorsque autoResubscribe est true, les visiteurs qui reviennent peuvent déclencher l’événement change avec optedIn: true à la fois sur previous et current parce que la permission du navigateur n’a pas changé — seul le token push a été réenregistré (par exemple, après avoir effacé les données du site ou après une migration). Pour l’analytique ou le suivi côté serveur qui doit refléter les nouveaux abonnements ou réabonnements, event.current.token && !event.previous.token est généralement plus fiable que la seule comparaison de optedIn.
Pour arrêter d’écouter les mises à jour, appelez removeEventListener() avec la même référence de gestionnaire que celle passée à addEventListener().
JavaScript
Analytique externe (par exemple Google Analytics via dataLayer) : déclenchez un événement personnalisé lorsqu’un token push apparaît et qu’il n’y avait pas de token auparavant, afin qu’un réenregistrement avec optedIn inchangé soit tout de même comptabilisé correctement. Le Subscription ID peut arriver dans le même callback ou dans un événement change ultérieur selon le timing :
JavaScript
En navigation privée ou incognito, le slidedown peut toujours apparaître lorsque autoPrompt est true, mais les abonnements push ne persistent généralement pas après la fin de la session. isPushSupported() ne détecte pas la navigation privée ; elle indique seulement si le push web est disponible en principe. Avant de déclencher l’invite par programmation (par exemple promptPush()), appelez tout de même isPushSupported() pour éviter de solliciter les navigateurs qui ne peuvent pas utiliser le push web.

optOut(), optIn(), optedIn

Contrôle le statut d’abonnement (subscribed ou unsubscribed) de l’abonnement push actuel. Utilisez ces méthodes pour contrôler le statut d’abonnement push sur votre site. Cas d’utilisation courants : 1) Empêcher l’envoi de push aux utilisateurs qui se déconnectent. 2) Implémenter un centre de préférences de notification au sein de votre site.
  • optOut() : Définit le statut d’abonnement push actuel sur désabonné (même si l’utilisateur a un token push valide).
  • optIn() : Effectue l’une des actions suivantes :
    1. Si l’abonnement dispose d’un token push valide, il définit le statut d’abonnement push actuel sur subscribed.
    2. Si l’abonnement ne dispose pas d’un token push valide, il tente d’afficher l’invite de permission push.
  • optedIn : Renvoie true si le statut d’abonnement push actuel est abonné, sinon false. Si le token push est valide mais que optOut() a été appelé, cela renverra false.
JavaScript

addEmail(), removeEmail()

Ajoute ou supprime un abonnement email (adresse email) pour l’utilisateur actuel. Ces méthodes sont compatibles avec la Vérification d’identité. Lorsque vous appelez addEmail(email) :
  • L’adresse email devient un abonnement email pour l’utilisateur actuel.
  • L’email peut être créé ou réattribué.
  • La même adresse email ne peut pas exister plusieurs fois dans la même application OneSignal. Si vous voyez des adresses email en double, vérifiez vos requêtes API REST et contactez le support si nécessaire.
Le SDK renvoie les codes de statut HTTP suivants : Lorsque vous appelez removeEmail(email) :
  • L’abonnement email est supprimé de l’utilisateur actuel.
  • L’External ID actuel est supprimé de l’abonnement email.
  • Un nouveau OneSignal ID est attribué à l’abonnement email.
  • Les autres abonnements (push, SMS, autres emails) ne sont pas affectés.
Bonnes pratiques :
  • Appelez d’abord login(), puis appelez addEmail(). Sinon, l’email peut être rattaché à un utilisateur anonyme.
  • Utilisez une adresse email stable et vérifiée.
  • Suivez les Bonnes pratiques de réputation email.
JavaScript

addSms(), removeSms()

Ajoute ou supprime un abonnement SMS (numéro de téléphone) pour l’utilisateur actuel. Les numéros de téléphone doivent être fournis au format E.164 (par exemple, +15551234567). Ces méthodes sont compatibles avec la Vérification d’identité. Lorsque vous appelez addSms(phoneNumber) :
  • Le numéro de téléphone devient un abonnement SMS pour l’utilisateur actuel.
  • Le numéro peut être créé ou réattribué.
  • Le même numéro de téléphone ne peut pas exister plusieurs fois dans la même application OneSignal. Si vous voyez des numéros de téléphone en double, vérifiez vos requêtes API REST et contactez le support si nécessaire.
Le SDK renvoie les codes de statut HTTP suivants : Lorsque vous appelez removeSms(phoneNumber) :
  • L’abonnement SMS est supprimé de l’utilisateur actuel.
  • L’External ID actuel est supprimé de l’abonnement SMS.
  • Un nouveau OneSignal ID est attribué à l’abonnement SMS.
  • Les autres abonnements (push, email, autres SMS) ne sont pas affectés.
Bonnes pratiques :
  • Appelez d’abord login(), puis appelez addSms(). Sinon, l’abonnement SMS peut être rattaché à un utilisateur anonyme.
  • Validez et normalisez toujours les numéros de téléphone au format E.164 avant l’envoi.
  • Suivez les Exigences d’enregistrement SMS.
JavaScript

Invites slidedown

Affichez les diverses invites slidedown sur vos sites. Consultez Invites d’autorisation web pour plus de détails.
  • Si rejetée, les futurs appels seront ignorés pendant au moins trois jours. D’autres refus allongeront le temps nécessaire avant de solliciter à nouveau l’utilisateur.
  • Pour contourner le comportement de back-off, passez {force: true} à la méthode. Cependant, pour offrir une bonne expérience utilisateur, liez l’action à un événement initié par l’interface utilisateur comme un clic de bouton.
Cela ne remplace pas l’invite native du navigateur requise pour l’abonnement. Vous devez obtenir les permissions en utilisant l’invite native du navigateur.

promptPush()

Affiche l’invite slidedown régulière pour les notifications push.
JavaScript

promptPushCategories()

Affiche l’invite slidedown de catégories, permettant aux utilisateurs de mettre à jour leurs tags. Déclenche également l’invite native de permission de notification si l’utilisateur n’a pas déjà accordé la permission.
JavaScript

promptSms()

Affiche l’invite d’abonnement SMS.
JavaScript

promptEmail()

Affiche l’invite d’abonnement email.
JavaScript

promptSmsAndEmail()

Affiche simultanément les invites d’abonnement SMS et email.
JavaScript

addEventListener() Slidedown

Ajoutez un callback pour détecter l’événement d’affichage de l’invite Slidedown.
JavaScript

Notifications push

requestPermission()

Demande la permission des notifications push via l’invite native du navigateur. Soumis à la logique de back-off définie par le navigateur. Consultez Invites d’autorisation web pour plus de détails.
JavaScript

isPushSupported()

Renvoie true si le navigateur actuel prend en charge le push web.
JavaScript

OneSignal.Notifications.permission

Renvoie un booléen indiquant la permission actuelle du site pour afficher des notifications.
  • true : L’utilisateur a accordé la permission d’afficher des notifications.
  • false : L’utilisateur a soit refusé, soit n’a pas encore accordé la permission d’afficher des notifications.
Cette valeur reflète uniquement la permission de notification du navigateur. Elle ne reflète pas le optOut de OneSignal, le Subscription ID ou le token push. Pour ceux-ci, utilisez User.PushSubscription (et les méthodes associées ci-dessous). Pour écouter les changements de permission, utilisez l’événement permissionChange.
JavaScript

addEventListener() Notifications

Vous pouvez vous connecter au cycle de vie des notifications avec addEventListener. Remplacez le premier argument par un nom d’événement tel que permissionChange, click ou dismiss (voir les sous-sections ci-dessous). Vous pouvez enregistrer plusieurs gestionnaires par événement. Pour arrêter d’écouter, appelez removeEventListener avec le même nom d’événement et la même référence de gestionnaire.
JavaScript

permissionChange

Cet événement se produit lorsque l’utilisateur clique sur Autoriser ou Bloquer ou rejette la demande de permission native du navigateur.
JavaScript

permissionPromptDisplay

Cet événement se produit lorsque la demande de permission native du navigateur vient d’être affichée.
JavaScript

click

Cet événement se déclenchera lorsque le corps/titre de la notification ou les boutons d’action sont cliqués.
JavaScript

foregroundWillDisplay

Cet événement se produit avant qu’une notification ne s’affiche. Cet événement est déclenché sur votre page. Si plusieurs onglets de navigateur sont ouverts sur votre site, cet événement sera déclenché sur toutes les pages sur lesquelles OneSignal est actif.
JavaScript

dismiss

Cet événement se produit lorsque :
  • Un utilisateur rejette intentionnellement la notification sans cliquer sur le corps de la notification ou les boutons d’action
  • Sur Chrome sur Android, un utilisateur rejette toutes les notifications push web (cet événement sera déclenché pour chaque notification push web que nous affichons)
  • Une notification expire d’elle-même et disparaît
Cet événement ne se produit pas si un utilisateur clique sur le corps de la notification ou sur l’un des boutons d’action. Cela est considéré comme un événement click de notification.
JavaScript

setDefaultUrl()

Définit l’URL par défaut pour les notifications. Si vous n’avez pas défini d’URL par défaut, votre notification s’ouvrira à la racine de votre site par défaut.
JavaScript
Fournissez une URL valide à ouvrir lorsque l’utilisateur clique sur une notification qui ne spécifie pas sa propre URL. Si le payload de la notification inclut une URL, elle remplace cette valeur par défaut. Safari Web Push n’utilise pas setDefaultUrl() de la même manière ; le comportement de lancement et d’icône suit votre configuration Safari / Apple (par exemple la Site URL dans vos paramètres web OneSignal). Consultez Configuration du site.

setDefaultTitle()

Définit le titre par défaut à afficher sur les notifications.
JavaScript
Si une notification est créée avec un titre, le titre spécifié remplace toujours ce titre par défaut. Le titre d’une notification est par défaut le titre de la dernière page visitée par l’utilisateur. Si les titres de vos pages varient d’une page à l’autre, cette incohérence peut être indésirable. Appelez ceci pour standardiser les titres de page sur les notifications, tant qu’un titre de notification n’est pas spécifié.

Résultats

Les méthodes de résultats se trouvent sur OneSignal.Session. Utilisez la même instance OneSignal différée qu’ailleurs après init.

sendOutcome()

Déclenche un résultat qui peut être consulté dans le tableau de bord OneSignal. Accepte un nom de résultat (string, requis) et une valeur (number, optionnel). Chaque fois que la méthode sendOutcome est invoquée avec le même nom de résultat transmis, le nombre de résultats augmentera, et la valeur du résultat sera augmentée du montant transmis (s’il est inclus). Consultez Résultats personnalisés pour plus de détails.
JavaScript

sendUniqueOutcome()

Déclenche un résultat qui peut être consulté dans le tableau de bord OneSignal. Accepte uniquement le nom du résultat (string, requis). sendUniqueOutcome augmentera le nombre pour ce résultat une seule fois par utilisateur. Consultez Résultats personnalisés pour plus de détails.
JavaScript