> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Référence du SDK Web

> Référence API complète pour le SDK Web OneSignal v16 avec initialisation, gestion des utilisateurs, notifications push, invites déroulantes et méthodes de débogage. Apprenez à implémenter les notifications push web, gérer les abonnements utilisateur et intégrer les fonctionnalités email/SMS.

## Configuration et débogage

Vous remarquerez peut-être la nécessité d'envelopper vos appels OneSignal avec `OneSignalDeferred.push(async function() { ... })`

Vous pouvez ajouter autant de méthodes que souhaité dans la `function()`.

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>`

Cela signifie que le code OneSignal s'exécutera après que le document HTML ait été entièrement analysé, empêchant tout blocage du site par le SDK OneSignal. Cependant, cela présente un problème pour les scripts de page qui dépendent de l'existence de la variable `OneSignalDeferred`. Pour résoudre ce problème, lorsque vous ajoutez OneSignal à votre site, il doit commencer par :

`window.OneSignalDeferred = window.OneSignalDeferred || [];`

Cela crée une variable `OneSignalDeferred`, et si OneSignal est déjà chargé, elle est alors assignée à l'instance chargée. Sinon, la variable OneSignal est égale à un tableau vide - `[]`.

Tous les tableaux ont une [fonction `.push()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push), donc à ce stade, la variable `OneSignalDeferred` est simplement un tableau de fonctions que nous y poussons. Lorsque le SDK se charge finalement, le SDK [traite toutes les fonctions poussées jusqu'à présent et redéfinit .push()](https://github.com/OneSignal/OneSignal-Website-SDK/blob/03cd16cacb79ff6d37156878d4f59ebf31ad8044/src/OneSignal.js#L2050).

### `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](./keys-and-ids).

<Note>
  Si vous souhaitez retarder l'initialisation du SDK OneSignal, nous recommandons d'utiliser nos [méthodes de confidentialité](#privacy).
</Note>

<CodeGroup>
  ```javascript JavaScript theme={null}
  window.OneSignalDeferred = window.OneSignalDeferred || [];
  OneSignalDeferred.push(async function(OneSignal) {
    await OneSignal.init({
      appId: "ONESIGNAL_APP_ID",
    });
  });
  ```
</CodeGroup>

<Warning>
  Init options only work with [Custom Code Setup](./web-push-custom-code-setup). Otherwise, these are configured in the OneSignal dashboard.
</Warning>

|             Parameter            |   Type  | Description                                                                                                                                                   |
| :------------------------------: | :-----: | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|              `appId`             |  String | **Required:** Your OneSignal App ID found in [Keys & IDs](./keys-and-ids).                                                                                    |
|   `requiresUserPrivacyConsent`   | Boolean | Delays SDK initialization until the user provides privacy consent. Must call [`setConsentGiven()`](#setconsentgiven) to complete setup.                       |
|          `safari_web_id`         |  String | The Safari Web ID for your uploaded Safari `.p12` certificate. [Web Quickstart](./web-push-setup).                                                            |
|          `promptOptions`         |  Object | Customize the permission prompts. [Details below](#promptoptions-parameters).                                                                                 |
|          `notifyButton`          |  Object | Enable and configure the Subscription Bell. [Details below](#notifybutton-parameters).                                                                        |
|       `welcomeNotification`      |  Object | Customize or disable the welcome notification. [Details below](#welcomenotification-parameters).                                                              |
|       `persistNotification`      | Boolean | Chrome (desktop only) - `true`: notification persists until clicked, `false`: disappears after a short time. Firefox/Safari ignore this setting.              |
|            `webhooks`            |  Object | Configure event callbacks. [See Webhooks](./webhooks).                                                                                                        |
|         `autoResubscribe`        | Boolean | **Recommended:** Auto-resubscribes users who clear browser cache or migrate to OneSignal. Overrides dashboard setting if used in code.                        |
|  `notificationClickHandlerMatch` |  String | `"exact"` (default): focuses tab with an exact URL match. `"origin"`: focuses any tab with the same domain.                                                   |
| `notificationClickHandlerAction` |  String | `"navigate"` (default): navigates to `launchURL`. `"focus"`: focuses existing tab (only used with `"origin"` match).                                          |
|       `serviceWorkerParam`       |  Object | Set the `scope` of the service worker. Must be different from other service worker's scope if applicable. Example:<br />`{ scope: "/myPath/myCustomScope/" }` |
|        `serviceWorkerPath`       |  String | Set the location of the OneSignal service worker file. Example:<br />`"myPath/OneSignalSDKWorker.js"`                                                         |

***

#### `promptOptions` parameters

Use `promptOptions` to localize or customize the user permission prompts. All fields are optional.

|   Parameter  |       Type       | Description                                                                                                                                                                                                                                                                                                          |
| :----------: | :--------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|  `slidedown` |      Object      | Contains an array of `prompts` with configuration options.                                                                                                                                                                                                                                                           |
|   `prompts`  | Array of Objects | An array of prompt configurations. Example:<br />`"slidedown": { "prompts": [{...}, {...}] }`                                                                                                                                                                                                                        |
|    `type`    |      String      | Prompt types:<br /><ul><li>`push` – Slide Prompt (no categories)</li><li>`category` – Slide Prompt with up to 10 categories</li><li>`email` – Collect email only</li><li>`sms` – Collect phone number only</li><li>`smsAndEmail` – Collect both</li></ul>See [Web Permission Prompts](./permission-requests).        |
| `autoPrompt` |      Boolean     | <ul><li>`true`: show based on `delay`.</li><li>`false`: prompt only shown manually via Slidedown API.</li></ul>                                                                                                                                                                                                      |
|    `delay`   |      Object      | Controls when auto-prompt is shown:<br />`{ pageViews: 3, timeDelay: 20 }` = Show after 3rd pageview and 20s wait.                                                                                                                                                                                                   |
|    `text`    |      Object      | Custom text options:<br /><ul><li>`actionMessage` (max 90 chars)</li><li>`acceptButton` (max 15)</li><li>`cancelButton` (max 15)</li><li>`emailLabel`, `smsLabel`, `confirmMessage`</li><li>`updateMessage`, `positiveUpdateButton`, `negativeUpdateButton` (used for updating categories or contact info)</li></ul> |
| `categories` | Array of Objects | Only for `type: category`. Each object includes:<br />`tag`: internal key<br />`label`: user-visible name<br />Example: `[ {tag: "local_news", label: "Local News"} ]`. See [Tags](./add-user-data-tags).                                                                                                            |

***

#### `notifyButton` parameters

Configure the Subscription Bell (notify button) shown on the page.

|      Parameter     |   Type   | Description                                                                                                   |
| :----------------: | :------: | ------------------------------------------------------------------------------------------------------------- |
|      `enable`      |  Boolean | Enables the Subscription Bell. Disabled by default.                                                           |
| `displayPredicate` | Function | Custom function (or Promise) that returns `true` or `false` to show/hide the Bell. Evaluated once when shown. |
|       `size`       |  String  | `'small'`, `'medium'`, or `'large'`. Shrinks to `'small'` after subscription.                                 |
|     `position`     |  String  | `'bottom-left'` or `'bottom-right'`.                                                                          |
|      `offset`      |  Object  | CSS pixel offsets: `{ bottom: '50px', left: '10px' }`                                                         |
|     `prenotify`    |  Boolean | If `true`, shows a "1 unread" icon and custom hover text.                                                     |
|    `showCredit`    |  Boolean | Set to `false` to hide "Powered by OneSignal" in the popup.                                                   |
|       `text`       |  Object  | Custom text for the bell UI.                                                                                  |

***

#### `welcomeNotification` parameters

Customize the welcome notification sent after first-time subscription.

| Parameter |   Type  | Description                                                                                |
| :-------: | :-----: | ------------------------------------------------------------------------------------------ |
| `disable` | Boolean | Disable welcome notification.                                                              |
| `message` |  String | **Required:** Notification message. Defaults to `'Thanks for subscribing!'` if blank.      |
|  `title`  |  String | Notification title. Defaults to site title. Use `' '` (space) to remove (not recommended). |
|   `url`   |   URL   | Optional URL to open when the user clicks the notification. Typically not needed.          |

***

**Example**:

<CodeGroup>
  ```javascript Example init for Custom Code Setup theme={null}
  <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>
  <script>
  window.OneSignalDeferred = window.OneSignalDeferred || [];
  OneSignalDeferred.push(async function(OneSignal) {
    await OneSignal.init({
      appId: "YOUR_APP_ID",
      safari_web_id: "YOUR_SAFARI_WEB_ID",
      notifyButton: {
        enable: true,
      },
      promptOptions: {
        slidedown: {
          prompts: [{
              type: "smsAndEmail",
              autoPrompt: false,
              text: {
                emailLabel: "Insert Email Address",
                smsLabel: "Insert Phone Number",
                acceptButton: "Submit",
                cancelButton: "No Thanks",
                actionMessage: "Receive the latest news, updates and offers as they happen.",
                updateMessage: "Update your push notification subscription preferences.",
                confirmMessage: "Thank You!",
                positiveUpdateButton: "Save Preferences",
                negativeUpdateButton: "Cancel",
              },
              delay: {
                pageViews: 1,
                timeDelay: 20
              },
            },
            {
              type: "category",
              autoPrompt: true,
              text: {
                actionMessage: "We'd like to show you notifications for the latest news and updates.",
                acceptButton: "Allow",
                cancelButton: "Cancel",

                /* CATEGORY SLIDEDOWN SPECIFIC TEXT */
                negativeUpdateButton: "Cancel",
                positiveUpdateButton: "Save Preferences",
                updateMessage: "Update your push notification subscription preferences.",
              },
              delay: {
                pageViews: 3,
                timeDelay: 20
              },
              categories: [{
                  tag: "politics",
                  label: "Politics"
                },
                {
                  tag: "local_news",
                  label: "Local News"
                },
                {
                  tag: "world_news",
                  label: "World News",
                },
                {
                  tag: "culture",
                  label: "Culture"
                },
              ]
            }
          ]
        }
      }
    });
  });
  </script>
  ```
</CodeGroup>

### `setLogLevel()`

Set the logging to print additional logs to the console. See [Debugging with Browser DevTools](./troubleshooting-web-push#debugging-using-browser-developer-tools) for more details.

```javascript JavaScript theme={null}
  OneSignal.Debug.setLogLevel('trace');
```

**Log levels**:

* `'trace'`
* `'debug'`
* `'info'`
* `'warn'`
* `'error'`

***

## Identité et propriétés de l'utilisateur

Lorsque vos utilisateurs s'abonnent aux notifications push sur votre site web, OneSignal crée automatiquement un ID OneSignal (niveau utilisateur) et un ID d'abonnement (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.

<Note>
  Consultez [Utilisateurs](./users) et [Alias](./aliases) pour plus de détails.
</Note>

### `login(external_id)`

Définit le contexte utilisateur sur l'`external_id` fourni. Garantit que tous les abonnements et propriétés associés à cet `external_id` sont unifiés sous un seul `onesignal_id`. Consultez [Utilisateurs](./users) pour plus de détails.

**Comportements clés :**

* Si l'`external_id` existe déjà, le SDK bascule vers cet utilisateur. Les données anonymes collectées avant la connexion ne sont pas fusionnées et seront supprimées.
* Si l'`external_id` n'existe pas, l'état local sera enregistré sous l'`onesignal_id` actuel. Toutes les données collectées lorsque l'utilisateur était anonyme seront conservées.
* Le SDK réessaie automatiquement en cas d'échec réseau ou d'erreur serveur.

<Note> Appelez cette méthode chaque fois que l'utilisateur ouvre le site ou dans le [listener de changement d'abonnement](#addeventlistener-push-subscription-changes) pour vous assurer que l'[ID externe](./users#external-id) est défini et que l'abonnement est lié à l'utilisateur. </Note>

<CodeGroup>
  ```javascript JavaScript theme={null}
  OneSignalDeferred.push(async function(OneSignal) {
     await OneSignal.login("external_id");
  });
  ```

  ```javascript Login with Subscription Change theme={null}
  //Exemple combinant avec l'événement de changement d'abonnement push
  function pushSubscriptionChangeListener(event) {
    if (event.current.token) {
      console.log(`L'abonnement push a reçu un token !`);
      //c'est un bon endroit pour appeler OneSignal.login et transmettre votre ID utilisateur
      OneSignal.login("external_id");
    }
  }
  OneSignalDeferred.push(function(OneSignal) {
    OneSignal.User.PushSubscription.addEventListener("change", pushSubscriptionChangeListener);
  });
  ```
</CodeGroup>

### `logout()`

Dissocie l'utilisateur actuel de l'abonnement.

* Supprime l'`external_id` de l'abonnement push actuel.
* Réinitialise l'ID OneSignal 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`.

<Note>Utilisez ceci lorsqu'un utilisateur se déconnecte de votre application si vous souhaitez définir l'abonnement sur un nouvel utilisateur anonyme. </Note>

```javascript JavaScript theme={null}
  OneSignalDeferred.push(async function(OneSignal) {
     await OneSignal.logout();
  });
```

### `OneSignal.User.onesignalId`

Récupère l'ID OneSignal de l'utilisateur actuel enregistré localement dans le navigateur. Peut être `null` si appelé avant l'initialisation de l'état utilisateur. À la place, utilisez [User State `addObserver()`](#addeventlistener-user-state) pour écouter les changements d'état utilisateur.

```javascript JavaScript theme={null}
  OneSignal.User.onesignalId
```

### `OneSignal.User.externalId`

Récupère l'ID externe de l'utilisateur actuel enregistré localement dans le navigateur. Peut être `null` si non défini via la méthode `login` ou appelé avant l'initialisation de l'état utilisateur. À la place, utilisez [User State `addObserver()`](#addeventlistener-user-state) pour écouter les changements d'état utilisateur.

```javascript JavaScript theme={null}
  OneSignal.User.externalId
```

### `addEventListener()` *État utilisateur*

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

```javascript JavaScript theme={null}
  OneSignalDeferred.push(function() {
    OneSignal.User.addEventListener('change', function (event) {
      console.log('change', { event });
    });
  });
```

### `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](./aliases) pour plus de détails.

```javascript JavaScript theme={null}
  // Ajouter un seul alias
  OneSignal.User.addAlias("ALIAS_LABEL", "ALIAS_ID");

  // Ajouter plusieurs alias
  OneSignal.User.addAliases({
    ALIAS_LABEL_01: "ALIAS_ID_01",
    ALIAS_LABEL_02: "ALIAS_ID_02",
    ALIAS_LABEL_03: "ALIAS_ID_03",
  });

  // Supprimer un seul alias
  OneSignal.User.removeAlias("ALIAS_LABEL");

  // Supprimer plusieurs alias
  OneSignal.User.removeAliases(["ALIAS_LABEL_01", "ALIAS_LABEL_02", "ALIAS_LABEL_03"]);
```

### `getLanguage()`, `setLanguage()`

Obtenez et/ou remplacez la langue auto-détectée de l'utilisateur. Consultez [Messagerie multilingue](./multi-language-messaging) pour une liste des codes de langue disponibles.

```javascript JavaScript theme={null}
  // Obtenir la langue de l'utilisateur actuellement connecté
  OneSignal.User.getLanguage()

  // Définir la langue de l'utilisateur actuellement connecté
  OneSignal.User.setLanguage('en')
```

***

## Événements personnalisés

[Déclenchez des Journeys](./journeys-settings#custom-events) et [activation de l'étape Wait Until](./journeys-actions#wait-until) via un [événement personnalisé](./custom-events).

<Note>
  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.
</Note>

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 json theme={null}
{
  "os_sdk": {
    "device_os": "138",
    "type": "ChromePush",
    "device_model": "MacIntel",
    "sdk": "160500"
  }
}
```

### `trackEvent()`

```javascript JavaScript theme={null}
const properties = {
  "promo_code": "NEW50",
  "membership_details": {
     "vip": true,
     "products_viewed_count": 15,
  }
}
window.OneSignal.User.trackEvent('started_free_trial', properties);

// Vous pouvez également suivre un événement par nom sans propriétés supplémentaires associées
window.OneSignal.User.trackEvent('my_event_name');
```

***

## Tags de données

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 de données](./add-user-data-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 JavaScript theme={null}
  // Ajouter un seul tag
  OneSignal.User.addTag('tag_key', 'tag_value');

  // Ajouter plusieurs tags
  OneSignal.User.addTags({
   KEY_01: "VALUE_01",
   KEY_02: "VALUE_02",
   KEY_03: "VALUE_03"
  });
```

### `removeTag()`, `removeTags()`

Supprimez un ou plusieurs tags de l'utilisateur actuel.

```javascript JavaScript theme={null}
  // Supprimer un seul tag
  OneSignal.User.removeTag("KEY");

  OneSignal.User.removeTags(['KEY_01', 'KEY_02', 'KEY_03']);
```

### `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 JavaScript theme={null}
  const tags = OneSignal.User.getTags()
```

***

## Confidentialité

### `setConsentRequired()`

Impose le consentement de l'utilisateur avant le début de la collecte de données. Doit être appelé **avant l'initialisation du SDK**.

Cette méthode est identique à l'ajout de `requiresUserPrivacyConsent: true` à la méthode `init`.

```javascript JavaScript theme={null}
  OneSignal.setConsentRequired(true);
```

### `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()`](#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](/reference/delete-user) ou [Delete subscription](/reference/delete-subscription).

```javascript JavaScript theme={null}
  OneSignal.setConsentGiven(true);
```

***

## Abonnements

Consultez [Abonnements](./subscriptions) pour plus de détails.

### `User.PushSubscription.id`

Récupère l'ID d'abonnement push de l'utilisateur actuel enregistré localement dans le navigateur. Peut renvoyer `null` si appelé trop tôt. Il est recommandé d'obtenir ces données dans l'[observateur d'abonnement](#addeventlistener-push-subscription-changes) pour réagir aux changements.

```javascript JavaScript theme={null}
  OneSignal.User.PushSubscription.id;
```

### `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](#addeventlistener-push-subscription-changes) pour réagir aux changements.

```javascript JavaScript theme={null}
  OneSignal.User.PushSubscription.token;
```

### `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 appelé `optIn()` ou `optOut()`)
* L'utilisateur bascule la permission push dans les paramètres système, puis ouvre l'application

Lorsque cela se produit, le SDK déclenche l'événement `onPushSubscriptionChange`. Votre listener reçoit un objet d'état avec les valeurs `previous` et `current` afin que vous puissiez détecter exactement ce qui a changé.

Pour arrêter d'écouter les mises à jour, appelez la méthode `removeObserver()` ou `removeEventListener()` associée.

```javascript JavaScript theme={null}
  function pushSubscriptionChangeListener(event) {
    console.log("event.previous.id", event.previous.id);
    console.log("event.current.id", event.current.id);
    console.log("event.previous.token", event.previous.token);
    console.log("event.current.token", event.current.token);
    console.log("event.previous.optedIn", event.previous.optedIn);
    console.log("event.current.optedIn", event.current.optedIn);
  }

  OneSignalDeferred.push(function(OneSignal) {
    OneSignal.User.PushSubscription.addEventListener("change", pushSubscriptionChangeListener);
  });
```

### `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 trois 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 JavaScript theme={null}
  OneSignal.User.PushSubscription.optOut();

  OneSignal.User.PushSubscription.optIn();

  var optedIn = OneSignal.User.PushSubscription.optedIn;
```

### `addEmail()`, `removeEmail()`

Ajoute ou supprime un abonnement email (adresse email) à/de l'utilisateur actuel. Appelez `addEmail` après `login()` pour définir le bon contexte utilisateur. Compatible avec la [Vérification d'identité](./identity-verification).

```javascript JavaScript theme={null}
  OneSignal.User.addEmail("example@email.com");

  OneSignal.User.removeEmail("example@email.com");
```

### `addSms()`, `removeSms()`

Ajoute ou supprime un abonnement SMS (numéro de téléphone) à/de l'utilisateur actuel. Nécessite le [format E.164](https://www.twilio.com/docs/glossary/what-e164). Appelez `addSms` après `login()` pour définir le bon contexte utilisateur. Compatible avec la [Vérification d'identité](./identity-verification).

```javascript JavaScript theme={null}
  OneSignal.User.addSms("+15558675309");

  OneSignal.User.removeSms("+15558675309");
```

***

## Invites déroulantes

Affichez les diverses invites déroulantes sur vos sites. Consultez [Invites de permission web](./permission-requests) 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.

<Warning>
  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.
</Warning>

### `promptPush()`

Affiche l'invite déroulante régulière pour les notifications push.

* Si vous utilisez des catégories, appelez plutôt [`promptPushCategories()`](#promptpushcategories).
* Soumis à la logique de back-off définie par OneSignal. Consultez [Invites de permission web](./permission-requests#auto-prompt-%26-display-settings) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptPush();
  // Pour contourner la logique de back-off lors des tests, passez {force: true}
  //OneSignal.Slidedown.promptPush({force: true});
```

### `promptPushCategories()`

Affiche l'invite déroulante de catégorie, 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.

* Si vous n'utilisez pas de catégories, appelez plutôt [`promptPush()`](#promptpush).
* Soumis à la logique de back-off définie par OneSignal. Consultez [Invites de permission web](./permission-requests#auto-prompt-%26-display-settings) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptPushCategories();
  // Pour contourner la logique de back-off lors des tests, passez {force: true}
  //OneSignal.Slidedown.promptPushCategories({force: true});
```

### `promptSms()`

Affiche l'invite d'abonnement SMS.

* Soumis à la logique de back-off définie par OneSignal. Consultez [Invites de permission web](./permission-requests#auto-prompt-%26-display-settings) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptSms();
  // Pour contourner la logique de back-off lors des tests, passez {force: true}
  //OneSignal.Slidedown.promptSms({force: true});
```

### `promptEmail()`

Affiche l'invite d'abonnement email.

* Soumis à la logique de back-off définie par OneSignal. Consultez [Invites de permission web](./permission-requests#auto-prompt-%26-display-settings) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptEmail();
  // Pour contourner la logique de back-off lors des tests, passez {force: true}
  //OneSignal.Slidedown.promptEmail({force: true});
```

### `promptSmsAndEmail()`

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

* Soumis à la logique de back-off définie par OneSignal. Consultez [Invites de permission web](./permission-requests#auto-prompt-%26-display-settings) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptSmsAndEmail();
  // Pour contourner la logique de back-off lors des tests, passez {force: true}
  //OneSignal.Slidedown.promptSmsAndEmail({force: true});
```

### `addEventListener()` *Slidedown*

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

```javascript JavaScript theme={null}
  OneSignalDeferred.push(function(OneSignal) {

    OneSignal.Slidedown.addEventListener('slidedownShown', function (event) {
      console.log('slidedownShown', { event });
    });

  });
```

***

## Notifications push

### `requestPermission()`

Demande la permission de notifications push via l'invite native du navigateur. Soumis à la logique de back-off définie par le navigateur. Consultez [Invites de permission web](./permission-requests#native-permission-prompt) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Notifications.requestPermission();
```

### `isPushSupported()`

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

```javascript JavaScript theme={null}
  const isSupported = OneSignal.Notifications.isPushSupported();
```

### `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.

Ceci est juste la permission du site, ne prend pas en compte le statut `optOut` de OneSignal ou l'existence de l'ID d'abonnement et du token push, consultez `OneSignal.User.PushSubscription` pour ceux-ci.

Pour écouter les changements de permission, utilisez l'événement [`permissionChange`](#permissionchange).

```javascript JavaScript theme={null}
  let permission = OneSignal.Notifications.permission;
```

### `addEventListener()` *notifications*

Vous pouvez vous connecter au cycle de vie des notifications en attachant vos gestionnaires d'événements à un événement de notification. Appeler `addEventListener` vous permet d'ajouter un nombre arbitraire de gestionnaires d'événements pour les événements de notification.

Pour arrêter d'écouter les événements, appelez la méthode `removeEventListener()` associée.

```javascript JavaScript theme={null}
  function eventListener(event) {
    console.log(`${event}`);
  }

  OneSignal.Notifications.addEventListener("event", eventListener);

  OneSignal.Notifications.removeEventListener("event", eventListener);
```

#### `permissionChange`

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

```javascript JavaScript theme={null}
  function permissionChangeListener(permission) {
    if (permission) {
      console.log(`permission acceptée !`);
    }
  }

  OneSignal.Notifications.addEventListener("permissionChange", permissionChangeListener);
```

#### `permissionPromptDisplay`

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

```javascript JavaScript theme={null}
  function promptListener() {
    console.log(`événement d'affichage de l'invite de permission : ${event}`);
  }

  OneSignal.Notifications.addEventListener("permissionPromptDisplay", promptListener);
```

#### `click`

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

```javascript JavaScript theme={null}
  function clickEventListener(event) {
    console.log(`événement de clic : ${event}`);
  }

  OneSignal.Notifications.addEventListener("click", clickEventListener);
```

#### `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 JavaScript theme={null}
  function foregroundWillDisplayListener(event) {
    console.log(`la notification va s'afficher : ${notification}`);
  }

  OneSignal.Notifications.addEventListener("foregroundWillDisplay", foregroundWillDisplayListener);
```

#### `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

<Info>
  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.
</Info>

```javascript JavaScript theme={null}
  function notificationDismissedListener(event) {
    console.log(`événement de rejet : ${event}`);
  }

  OneSignal.Notifications.addEventListener("dismiss", notificationDismissedListener);
```

### `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 JavaScript theme={null}
  OneSignal.Notifications.setDefaultUrl("https://onesignal.com");
```

Pour définir l'URL par défaut des notifications, fournissez une URL valide que vous souhaitez lancer lorsque la notification est cliquée. Cette URL par défaut sera utilisée si aucune autre URL n'est spécifiée lors de la création d'une notification. Si vous spécifiez une URL lors de la création d'une notification, l'URL par défaut sera remplacée.

Dans le cas de Safari, l'URL de l'icône de notification par défaut sera définie sur l'URL du site que vous avez spécifiée dans vos paramètres Safari, car cette fonction n'est pas disponible.

### `setDefaultTitle()`

Définit le titre par défaut à afficher sur les notifications.

```javascript JavaScript theme={null}
  OneSignal.Notifications.setDefaultTitle("Powered by OneSignal!");
```

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

### `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](./custom-outcomes) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Session.sendOutcome('nom du résultat', 19.84);
```

### `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](./custom-outcomes) pour plus de détails.

```javascript JavaScript theme={null}
  OneSignal.Session.sendUniqueOutcome('nom du résultat');
```

***
