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

# Referência do Web SDK

> Referência API completa para OneSignal Web SDK v16 com inicialização, gerenciamento de usuário, notificações push, prompts slidedown e métodos de debugging. Aprenda como implementar notificações web push, gerenciar subscriptions de usuário e integrar recursos de email/SMS.

## Configuração & debugging

Você pode notar a necessidade de envolver suas chamadas OneSignal com `OneSignalDeferred.push(async function() { ... })`

Você pode adicionar quantos métodos desejar dentro da `function()`.

O OneSignal SDK é carregado com o atributo `defer` na sua página. Por exemplo:

`<script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script>`

Isso significa que o código OneSignal executará após o documento HTML ter sido completamente analisado, prevenindo qualquer bloqueio do site pelo OneSignal SDK. No entanto, isso apresenta um problema para scripts de página que dependem da variável `OneSignalDeferred` existir. Para resolver isso, quando você adiciona OneSignal ao seu site, ele deve começar com:

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

Isso cria uma variável `OneSignalDeferred`, e se OneSignal já estiver carregado, é então atribuída à instância carregada. Caso contrário, a variável OneSignal equivale a um array vazio - `[]`.

Todos os arrays têm uma [função `.push()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push), então neste ponto, a variável `OneSignalDeferred` é simplesmente um array de funções que estamos adicionando a ela. Quando o SDK finalmente carrega, o SDK [processa todas as funções adicionadas até agora e redefine .push()](https://github.com/OneSignal/OneSignal-Website-SDK/blob/03cd16cacb79ff6d37156878d4f59ebf31ad8044/src/OneSignal.js#L2050).

### `init()`

Inicializa o OneSignal SDK. Deve ser chamado na tag `<head>` uma vez em cada página do seu site. O `ONESIGNAL_APP_ID` pode ser encontrado em [Keys & IDs](./keys-and-ids).

<Note>
  Se você deseja atrasar a inicialização do OneSignal SDK, recomendamos usar nossos [métodos de Privacidade](#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>
  Opções de init funcionam apenas com [Configuração com Código Personalizado](./web-push-custom-code-setup). Caso contrário, são configuradas no dashboard OneSignal.
</Warning>

|             Parameter            |   Type  | Description                                                                                                                                                            |
| :------------------------------: | :-----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|              `appId`             |  String | **Obrigatório:** Seu OneSignal App ID encontrado em [Keys & IDs](./keys-and-ids).                                                                                      |
|   `requiresUserPrivacyConsent`   | Boolean | Atrasa inicialização do SDK até que o usuário forneça consentimento de privacidade. Deve chamar [`setConsentGiven()`](#setconsentgiven) para completar a configuração. |
|          `safari_web_id`         |  String | O Safari Web ID para seu certificado Safari `.p12` carregado. [Web Quickstart](./web-push-setup).                                                                      |
|          `promptOptions`         |  Object | Personaliza os prompts de permissão. [Detalhes abaixo](#promptoptions-parameters).                                                                                     |
|          `notifyButton`          |  Object | Habilita e configura o Sino de Subscription. [Detalhes abaixo](#notifybutton-parameters).                                                                              |
|       `welcomeNotification`      |  Object | Personaliza ou desabilita a notificação de boas-vindas. [Detalhes abaixo](#welcomenotification-parameters).                                                            |
|       `persistNotification`      | Boolean | Chrome (apenas desktop) - `true`: notificação persiste até ser clicada, `false`: desaparece após pouco tempo. Firefox/Safari ignoram esta configuração.                |
|            `webhooks`            |  Object | Configura callbacks de evento. [Veja Webhooks](./webhooks).                                                                                                            |
|         `autoResubscribe`        | Boolean | **Recomendado:** Reinscreve automaticamente usuários que limpam cache do navegador ou migram para OneSignal. Sobrescreve configuração do dashboard se usado no código. |
|  `notificationClickHandlerMatch` |  String | `"exact"` (padrão): foca aba com URL exata correspondente. `"origin"`: foca qualquer aba com o mesmo domínio.                                                          |
| `notificationClickHandlerAction` |  String | `"navigate"` (padrão): navega para `launchURL`. `"focus"`: foca aba existente (usado apenas com correspondência `"origin"`).                                           |
|       `serviceWorkerParam`       |  Object | Define o `scope` do service worker. Deve ser diferente do scope de outro service worker se aplicável. Exemplo:<br />`{ scope: "/myPath/myCustomScope/" }`              |
|        `serviceWorkerPath`       |  String | Define a localização do arquivo service worker OneSignal. Exemplo:<br />`"myPath/OneSignalSDKWorker.js"`                                                               |

***

#### Parâmetros `promptOptions`

Use `promptOptions` para localizar ou personalizar os prompts de permissão do usuário. Todos os campos são opcionais.

|   Parameter  |       Type       | Description                                                                                                                                                                                                                                                                                                                                      |
| :----------: | :--------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|  `slidedown` |      Object      | Contém um array de `prompts` com opções de configuração.                                                                                                                                                                                                                                                                                         |
|   `prompts`  | Array of Objects | Um array de configurações de prompt. Exemplo:<br />`"slidedown": { "prompts": [{...}, {...}] }`                                                                                                                                                                                                                                                  |
|    `type`    |      String      | Tipos de prompt:<br /><ul><li>`push` – Slide Prompt (sem categorias)</li><li>`category` – Slide Prompt com até 10 categorias</li><li>`email` – Coleta apenas email</li><li>`sms` – Coleta apenas número de telefone</li><li>`smsAndEmail` – Coleta ambos</li></ul>Veja [Prompts de Permissão Web](./permission-requests).                        |
| `autoPrompt` |      Boolean     | <ul><li>`true`: mostra baseado em `delay`.</li><li>`false`: prompt mostrado apenas manualmente via API Slidedown.</li></ul>                                                                                                                                                                                                                      |
|    `delay`   |      Object      | Controla quando auto-prompt é mostrado:<br />`{ pageViews: 3, timeDelay: 20 }` = Mostra após 3ª visualização de página e espera de 20s.                                                                                                                                                                                                          |
|    `text`    |      Object      | Opções de texto personalizado:<br /><ul><li>`actionMessage` (máx 90 caracteres)</li><li>`acceptButton` (máx 15)</li><li>`cancelButton` (máx 15)</li><li>`emailLabel`, `smsLabel`, `confirmMessage`</li><li>`updateMessage`, `positiveUpdateButton`, `negativeUpdateButton` (usado para atualizar categorias ou informações de contato)</li></ul> |
| `categories` | Array of Objects | Apenas para `type: category`. Cada objeto inclui:<br />`tag`: chave interna<br />`label`: nome visível ao usuário<br />Exemplo: `[ {tag: "local_news", label: "Local News"} ]`. Veja [Tags](./add-user-data-tags).                                                                                                                               |

***

#### Parâmetros `notifyButton`

Configura o Sino de Subscription (botão de notificação) mostrado na página.

|      Parameter     |   Type   | Description                                                                                                                    |
| :----------------: | :------: | ------------------------------------------------------------------------------------------------------------------------------ |
|      `enable`      |  Boolean | Habilita o Sino de Subscription. Desabilitado por padrão.                                                                      |
| `displayPredicate` | Function | Função personalizada (ou Promise) que retorna `true` ou `false` para mostrar/ocultar o Sino. Avaliada uma vez quando mostrado. |
|       `size`       |  String  | `'small'`, `'medium'`, ou `'large'`. Reduz para `'small'` após subscription.                                                   |
|     `position`     |  String  | `'bottom-left'` ou `'bottom-right'`.                                                                                           |
|      `offset`      |  Object  | Offsets CSS em pixels: `{ bottom: '50px', left: '10px' }`                                                                      |
|     `prenotify`    |  Boolean | Se `true`, mostra ícone "1 não lido" e texto hover personalizado.                                                              |
|    `showCredit`    |  Boolean | Defina como `false` para ocultar "Powered by OneSignal" no popup.                                                              |
|       `text`       |  Object  | Texto personalizado para a UI do sino.                                                                                         |

***

#### Parâmetros `welcomeNotification`

Personaliza a notificação de boas-vindas enviada após primeira subscription.

| Parameter |   Type  | Description                                                                                           |
| :-------: | :-----: | ----------------------------------------------------------------------------------------------------- |
| `disable` | Boolean | Desabilita notificação de boas-vindas.                                                                |
| `message` |  String | **Obrigatório:** Mensagem da notificação. Padrão para `'Thanks for subscribing!'` se em branco.       |
|  `title`  |  String | Título da notificação. Padrão para título do site. Use `' '` (espaço) para remover (não recomendado). |
|   `url`   |   URL   | URL opcional para abrir quando o usuário clicar na notificação. Tipicamente não necessário.           |

***

**Exemplo**:

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

Define o logging para imprimir logs adicionais no console. Veja [Debugging com Browser DevTools](./troubleshooting-web-push#debugging-using-browser-developer-tools) para mais detalhes.

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

**Níveis de log**:

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

***

## Identidade & propriedades do usuário

Quando seus usuários se inscrevem para notificações push no seu website, OneSignal cria automaticamente um OneSignal ID (nível de usuário) e um Subscription ID (nível de dispositivo). Você pode associar múltiplas subscriptions (ex: dispositivos, emails, números de telefone) com um único usuário chamando `login()` com seu identificador de usuário único.

<Note>
  Veja [Users](./users) e [Aliases](./aliases) para mais detalhes.
</Note>

### `login(external_id)`

Define o contexto do usuário para o `external_id` fornecido. Garante que todas as Subscriptions e propriedades associadas com este `external_id` sejam unificadas sob um único `onesignal_id`. Veja [Users](./users) para mais detalhes.

**Comportamentos principais:**

* Se o `external_id` já existir, o SDK muda para aquele usuário. Dados anônimos coletados antes do login não são mesclados e serão descartados.
* Se o `external_id` não existir, o estado local será salvo sob o `onesignal_id` atual. Quaisquer dados coletados enquanto o usuário era anônimo serão mantidos.
* SDK retentar automaticamente em falha de rede ou erro de servidor.

<Note> Chame este método cada vez que o usuário abrir o site ou dentro do [listener de mudança de Subscription](#addeventlistener-push-subscription-changes) para garantir que o [External ID](./users#external-id) esteja definido e a subscription esteja vinculada ao usuário. </Note>

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

  ```javascript Login with Subscription Change theme={null}
  //Example combining with push subscription change event
  function pushSubscriptionChangeListener(event) {
    if (event.current.token) {
      console.log(`The push subscription has received a token!`);
      //this is a good place to call OneSignal.login and pass in your user ID
      OneSignal.login("external_id");
    }
  }
  OneSignalDeferred.push(function(OneSignal) {
    OneSignal.User.PushSubscription.addEventListener("change", pushSubscriptionChangeListener);
  });
  ```
</CodeGroup>

### `logout()`

Desvincula o usuário atual da subscription.

* Remove o `external_id` da subscription push atual.
* Redefine o OneSignal ID para um novo usuário anônimo.
* Quaisquer novos dados (ex: tags, Subscriptions, dados de sessão, etc.) agora serão definidos no novo usuário anônimo até serem identificados com o método `login`.

<Note>Use isto quando um usuário sair do seu app se você quiser definir a subscription para um novo usuário anônimo. </Note>

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

### `OneSignal.User.onesignalId`

Recupera o OneSignal ID do usuário atual salvo localmente no navegador. Pode ser `null` se chamado antes do estado do usuário ser inicializado. Em vez disso, use [User State `addObserver()`](#addeventlistener-user-state) para escutar mudanças de estado do usuário.

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

### `OneSignal.User.externalId`

Recupera o External ID do usuário atual salvo localmente no navegador. Pode ser `null` se não definido via método `login` ou chamado antes do estado do usuário ser inicializado. Em vez disso, use [User State `addObserver()`](#addeventlistener-user-state) para escutar mudanças de estado do usuário.

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

### `addEventListener()` *User State*

Escuta mudanças no contexto do usuário (ex: login, logout, atribuição de ID).

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

### `addAlias()`, `addAliases()`, `removeAlias()`, `removeAliases()`

Aliases são identificadores alternativos (como usernames ou IDs de CRM).

* Defina `external_id` com `login()` antes de adicionar aliases. Aliases adicionados a subscriptions sem `external_id` não sincronizarão em múltiplas subscriptions.
* Veja [Aliases](./aliases) para detalhes.

```javascript JavaScript theme={null}
  // Add a single alias
  OneSignal.User.addAlias("ALIAS_LABEL", "ALIAS_ID");

  // Add multiple aliases
  OneSignal.User.addAliases({
    ALIAS_LABEL_01: "ALIAS_ID_01",
    ALIAS_LABEL_02: "ALIAS_ID_02",
    ALIAS_LABEL_03: "ALIAS_ID_03",
  });

  // Remove a single alias
  OneSignal.User.removeAlias("ALIAS_LABEL");

  // Remove multiple aliases
  OneSignal.User.removeAliases(["ALIAS_LABEL_01", "ALIAS_LABEL_02", "ALIAS_LABEL_03"]);
```

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

Obtém e/ou sobrescreve o idioma auto-detectado do usuário. Veja [Mensagens multi-idioma](./multi-language-messaging) para uma lista de códigos de idioma disponíveis.

```javascript JavaScript theme={null}
  // Get the language of the currently logged-in user
  OneSignal.User.getLanguage()

  // Set the language of the currently logged-in user
  OneSignal.User.setLanguage('en')
```

***

## Eventos personalizados

[Acione Journeys](./journeys-settings#custom-events) e [ativação de passo Wait Until](./journeys-actions#wait-until) via [evento personalizado](./custom-events).

<Note>
  Eventos personalizados requerem Web SDK `160500`+

  Um usuário deve estar logado para eventos personalizados serem rastreados.
</Note>

Rastreie e envie um evento personalizado executado pelo usuário atual.

* `name` - **Obrigatório.** O nome do evento como uma string.
* `properties` - **Opcional.** Pares chave-valor para adicionar ao evento. O dicionário ou mapa de properties deve ser serializável em um Objeto JSON válido. Suporta valores aninhados.

O SDK inclui automaticamente dados específicos do app no payload de properties sob a chave reservada `os_sdk` que estará disponível para consumo. Por exemplo, para direcionar eventos por tipo de subscription, você acessaria `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);

// You can also track an event by name without additional properties associated
window.OneSignal.User.trackEvent('my_event_name');
```

***

## Tags

Tags são pares personalizados `key : value` de dados string que você define em usuários baseado em eventos ou propriedades de usuário. Veja [Tags](./add-user-data-tags) para mais detalhes.

### `addTag()`, `addTags()`

Define uma única ou múltiplas tags no usuário atual.

* Valores serão substituídos se a chave já existir.
* Exceder o limite de tags do seu plano causará falha silenciosa das operações.

```javascript JavaScript theme={null}
  // Add a single tag
  OneSignal.User.addTag('tag_key', 'tag_value');

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

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

Deleta uma única ou múltiplas tags do usuário atual.

```javascript JavaScript theme={null}
  // Delete a single tag
  OneSignal.User.removeTag("KEY");

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

### `getTags()`

Retorna a cópia local das tags do usuário. Tags são atualizadas do servidor durante `login()` ou novas sessões de app.

```javascript JavaScript theme={null}
  const tags = OneSignal.User.getTags()
```

***

## Privacidade

### `setConsentRequired()`

Impõe consentimento do usuário antes da coleta de dados começar. Deve ser chamado **antes de inicializar o SDK**.

Este método é o mesmo que adicionar `requiresUserPrivacyConsent: true` ao método `init`.

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

### `setConsentGiven()`

Concede ou revoga consentimento do usuário para coleta de dados. Sem consentimento, nenhum dado é enviado para OneSignal e nenhuma subscription é criada.

* Se [`setConsentRequired()`](#setconsentrequired) ou `requiresUserPrivacyConsent` estiver definido como `true`, nosso SDK não será totalmente habilitado até `setConsentGiven` ser chamado com `true`.
* Se `setConsentGiven` estiver definido como `true` e uma Subscription for criada, então posteriormente for definido como `false`, aquela Subscription não receberá mais atualizações. Os dados atuais para aquela Subscription permanecem inalterados até `setConsentGiven` ser definido como `true` novamente.
* Se você deseja deletar os dados de User e/ou Subscription, use nossas APIs [Delete user](/reference/delete-user) ou [Delete subscription](/reference/delete-subscription).

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

***

## Subscriptions

Veja [Subscriptions](./subscriptions) para mais detalhes.

### `User.PushSubscription.id`

Recupera o Subscription ID push do usuário atual salvo localmente no navegador. Pode retornar `null` se chamado muito cedo. É recomendado obter estes dados dentro do [subscription observer](#addeventlistener-push-subscription-changes) para reagir a mudanças.

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

### `User.PushSubscription.token`

Retorna o token de subscription push atual. Pode retornar `null` se chamado muito cedo. É recomendado obter estes dados dentro do [subscription observer](#addeventlistener-push-subscription-changes) para reagir a mudanças.

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

### `addEventListener()` *mudanças de subscription push*

Use este método para responder a mudanças de subscription push como:

* O dispositivo recebe um novo token push do Google (FCM) ou Apple (APNs)
* OneSignal atribui um subscription ID
* O valor `optedIn` muda (ex: chamado `optIn()` ou `optOut()`)
* O usuário alterna permissão push nas configurações do sistema, então abre o app

Quando isso acontece, o SDK aciona o evento `onPushSubscriptionChange`. Seu listener recebe um objeto de estado com os valores `previous` e `current` para que você possa detectar exatamente o que mudou.

Para parar de escutar atualizações, chame o método `removeObserver()` ou `removeEventListener()` associado.

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

Controla o status de subscription (`subscribed` ou `unsubscribed`) da Subscription push atual. Use estes métodos para controlar o status de subscription push no seu site. Casos de uso comuns: 1) Prevenir que push seja enviado para usuários que fazem logout. 2) Implementar um centro de preferências de notificação dentro do seu site.

* `optOut()`: Define o status de subscription push atual como unsubscribed (mesmo se o usuário tiver um token push válido).
* `optIn()`: Faz uma de três ações:
  1. Se a Subscription tiver um token push válido, define o status de subscription push atual como `subscribed`.
  2. Se a Subscription não tiver um token push válido, tenta exibir o prompt de permissão push.
* `optedIn`: Retorna `true` se o status de subscription push atual for subscribed, caso contrário `false`. Se o token push for válido mas `optOut()` foi chamado, isto retornará `false`.

```javascript JavaScript theme={null}
  OneSignal.User.PushSubscription.optOut();

  OneSignal.User.PushSubscription.optIn();

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

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

Adiciona ou remove uma Subscription de email (endereço de email) para/do usuário atual. Chame `addEmail` após `login()` para definir o contexto de usuário correto. Compatível com [Identity Verification](./identity-verification).

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

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

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

Adiciona ou remove uma Subscription SMS (número de telefone) para/do usuário atual. Requer [formato E.164](https://www.twilio.com/docs/glossary/what-e164). Chame `addSms` após `login()` para definir o contexto de usuário correto. Compatível com [Identity Verification](./identity-verification).

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

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

***

## Prompts Slidedown

Exibe os vários prompts slidedown em seus sites. Veja [Prompts de permissão web](./permission-requests) para mais detalhes.

* Se dispensado, chamadas futuras serão ignoradas por pelo menos três dias. Recusas adicionais aumentarão o tempo necessário a decorrer antes de solicitar o usuário novamente.
* Para sobrescrever comportamento de back-off, passe `{force: true}` para o método. No entanto, para fornecer uma boa experiência de usuário, vincule a ação a um evento iniciado por UI como um clique de botão.

<Warning>
  Isso não substitui o Prompt Nativo do Navegador necessário para subscription. Você deve obter permissões usando o prompt nativo do navegador.
</Warning>

### `promptPush()`

Exibe o prompt slidedown regular para notificações push.

* Se usando categorias, chame [`promptPushCategories()`](#promptpushcategories) em vez disso.
* Sujeito à lógica de backoff definida pelo OneSignal. Veja [Prompts de permissão web](./permission-requests#auto-prompt-%26-display-settings) para mais detalhes.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptPush();
  // To bypass backoff logic while testing, pass {force: true}
  //OneSignal.Slidedown.promptPush({force: true});
```

### `promptPushCategories()`

Exibe o prompt slidedown de categoria, permitindo que usuários atualizem suas tags. Também aciona o prompt de permissão de notificação nativo se o usuário ainda não concedeu permissão.

* Se não usando categorias, chame [`promptPush()`](#promptpush) em vez disso.
* Sujeito à lógica de backoff definida pelo OneSignal. Veja [Prompts de permissão web](./permission-requests#auto-prompt-%26-display-settings) para mais detalhes.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptPushCategories();
  // To bypass backoff logic while testing, pass {force: true}
  //OneSignal.Slidedown.promptPushCategories({force: true});
```

### `promptSms()`

Exibe o prompt de subscription SMS.

* Sujeito à lógica de backoff definida pelo OneSignal. Veja [Prompts de permissão web](./permission-requests#auto-prompt-%26-display-settings) para mais detalhes.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptSms();
  // To bypass backoff logic while testing, pass {force: true}
  //OneSignal.Slidedown.promptSms({force: true});
```

### `promptEmail()`

Exibe o prompt de subscription de email.

* Sujeito à lógica de backoff definida pelo OneSignal. Veja [Prompts de permissão web](./permission-requests#auto-prompt-%26-display-settings) para mais detalhes.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptEmail();
  // To bypass backoff logic while testing, pass {force: true}
  //OneSignal.Slidedown.promptEmail({force: true});
```

### `promptSmsAndEmail()`

Exibe os prompts de subscription SMS e email simultaneamente.

* Sujeito à lógica de backoff definida pelo OneSignal. Veja [Prompts de permissão web](./permission-requests#auto-prompt-%26-display-settings) para mais detalhes.

```javascript JavaScript theme={null}
  OneSignal.Slidedown.promptSmsAndEmail();
  // To bypass backoff logic while testing, pass {force: true}
  //OneSignal.Slidedown.promptSmsAndEmail({force: true});
```

### `addEventListener()` *Slidedown*

Adiciona um callback para detectar o evento de prompt Slidedown mostrado.

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

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

  });
```

***

## Notificações push

### `requestPermission()`

Solicita permissão de notificações push via prompt nativo do navegador. Sujeito à lógica de backoff definida pelo navegador. Veja [Prompts de permissão web](./permission-requests#native-permission-prompt) para mais detalhes.

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

### `isPushSupported()`

Retorna `true` se o navegador atual suportar web push.

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

### `OneSignal.Notifications.permission`

Retorna um boolean indicando a permissão atual do site para exibir notificações.

* `true`: O usuário concedeu permissão para exibir notificações.
* `false`: O usuário negou ou ainda não concedeu permissão para exibir notificações.

Esta é apenas a permissão do site, não leva em conta o status `optOut` do OneSignal ou a existência do Subscription ID e Push Token, veja `OneSignal.User.PushSubscription` para estes.

Para escutar mudanças em permissão, use o evento [`permissionChange`](#permissionchange).

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

### `addEventListener()` *notifications*

Você pode se conectar ao ciclo de vida da notificação anexando seus manipuladores de evento a um evento de notificação. Chamar `addEventListener` permite adicionar um número arbitrário de manipuladores de evento para eventos de notificação.

Para parar de escutar eventos, chame o método `removeEventListener()` associado.

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

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

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

#### `permissionChange`

Este evento ocorre quando o usuário clica em Permitir ou Bloquear ou dispensa a solicitação de permissão nativa do navegador.

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

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

#### `permissionPromptDisplay`

Este evento ocorre quando a solicitação de permissão nativa do navegador acabou de ser mostrada.

```javascript JavaScript theme={null}
  function promptListener() {
    console.log(`permission prompt dispslayed event: ${event}`);
  }

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

#### `click`

Este evento disparará quando o corpo/título da notificação ou botões de ação forem clicados.

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

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

#### `foregroundWillDisplay`

Este evento ocorre antes de uma notificação ser exibida. Este evento é disparado na sua página. Se múltiplas abas de navegador estiverem abertas no seu site, este evento será disparado em *todas* as páginas nas quais OneSignal está ativo.

```javascript JavaScript theme={null}
  function foregroundWillDisplayListener(event) {
    console.log(`notification will display: ${notification}`);
  }

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

#### `dismiss`

Este evento ocorre quando:

* Um usuário propositalmente dispensa a notificação sem clicar no corpo da notificação ou botões de ação
* No Chrome no Android, um usuário dispensa todas as notificações web push (este evento será disparado para cada notificação web push que mostramos)
* Uma notificação expira por conta própria e desaparece

<Info>
  Este evento *não ocorre* se um usuário clicar no corpo da notificação ou em um dos botões de ação. Isso é considerado um evento de `click` de notificação.
</Info>

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

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

### `setDefaultUrl()`

Define a URL padrão para notificações.

Se você não definiu uma URL padrão, sua notificação abrirá na raiz do seu site por padrão.

```javascript JavaScript theme={null}
  OneSignal.Notifications.setDefaultUrl("https://onesignal.com");
```

Para definir a URL padrão para notificações, forneça uma URL válida que você deseja que seja lançada quando a notificação for clicada. Esta URL padrão será usada se nenhuma outra URL for especificada ao criar uma notificação. Se você especificar uma URL ao criar uma notificação, a URL padrão será sobrescrita.

No caso do Safari, a URL de ícone de notificação padrão será definida como a URL do Site que você especificou nas suas configurações Safari, pois esta função não está disponível.

### `setDefaultTitle()`

Define o título padrão para exibir em notificações.

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

Se uma notificação for criada com um título, o título especificado sempre sobrescreve este título padrão.

O título de uma notificação tem como padrão o título da página que o usuário visitou por último. Se os títulos de suas páginas variarem entre páginas, esta inconsistência pode ser indesejável. Chame isto para padronizar títulos de página através de notificações, desde que um título de notificação não seja especificado.

***

## Outcomes

### `sendOutcome()`

Aciona um outcome que pode ser visualizado no dashboard OneSignal. Aceita um nome de outcome (`string`, obrigatório) e um valor (`number`, opcional). Cada vez que o método `sendOutcome` é invocado com o mesmo nome de outcome passado, a contagem de outcome aumentará, e o valor de outcome será aumentado pelo valor passado (se incluído). Veja [Custom Outcomes](./custom-outcomes) para mais detalhes.

```javascript JavaScript theme={null}
  OneSignal.Session.sendOutcome('outcome name', 19.84);
```

### `sendUniqueOutcome()`

Aciona um outcome que pode ser visualizado no dashboard OneSignal. Aceita apenas o nome do outcome (`string`, obrigatório). `sendUniqueOutcome` aumentará a contagem para aquele outcome apenas uma vez por usuário. Veja [Custom Outcomes](./custom-outcomes) para mais detalhes.

```javascript JavaScript theme={null}
  OneSignal.Session.sendUniqueOutcome('outcome name');
```

***
