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

# Configuração do SDK .NET MAUI

> Instruções para adicionar o SDK .NET do OneSignal ao seu aplicativo MAUI multiplataforma para iOS, Android e Desktop.

export const SdkReleasesIframe = ({sdkFilter = undefined, viewMode = undefined, height, ...frameProps}) => {
  const baseUrl = 'https://onesignal.github.io/sdk-releases';
  const buildUrl = (theme, sdkFilter, viewMode) => {
    const url = new URL(baseUrl);
    const params = new URLSearchParams();
    if (theme) {
      params.set('theme', theme);
    }
    if (sdkFilter) {
      params.set('sdk', sdkFilter);
    }
    if (viewMode) {
      params.set('viewMode', viewMode);
    }
    if (params.toString()) {
      url.search = params.toString();
    }
    return url.toString();
  };
  const detectTheme = () => {
    if (document.documentElement.classList.contains('dark')) {
      return 'dark';
    }
    return 'light';
  };
  const [theme, setTheme] = useState('light');
  const [iframeSrc, setIframeSrc] = useState(() => {
    const initialTheme = detectTheme();
    return buildUrl(initialTheme, sdkFilter, viewMode);
  });
  useEffect(() => {
    const currentTheme = detectTheme();
    setTheme(currentTheme);
    setIframeSrc(buildUrl(currentTheme, sdkFilter, viewMode));
    const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
    const handleThemeChange = () => {
      const newTheme = detectTheme();
      setTheme(newTheme);
      setIframeSrc(buildUrl(newTheme, sdkFilter, viewMode));
    };
    if (mediaQuery.addEventListener) {
      mediaQuery.addEventListener('change', handleThemeChange);
    } else {
      mediaQuery.addListener(handleThemeChange);
    }
    window.addEventListener('storage', handleThemeChange);
    const observer = new MutationObserver(handleThemeChange);
    observer.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ['class', 'data-theme']
    });
    return () => {
      if (mediaQuery.removeEventListener) {
        mediaQuery.removeEventListener('change', handleThemeChange);
      } else {
        mediaQuery.removeListener(handleThemeChange);
      }
      window.removeEventListener('storage', handleThemeChange);
      observer.disconnect();
    };
  }, [sdkFilter, viewMode]);
  const getIframeHeight = () => {
    if (viewMode === 'table') {
      return '450';
    }
    if (viewMode === 'mini') {
      return '170';
    }
    return '800';
  };
  const iframeHeight = height || getIframeHeight();
  return <Frame {...frameProps}>
      <iframe src={iframeSrc} width="100%" height={iframeHeight} frameBorder="0" style={{
    border: "none"
  }} title="SDK Releases" key={iframeSrc} />
    </Frame>;
};

<SdkReleasesIframe sdkFilter="dotnet" viewMode="mini" />

## Visão geral

Este guia explica como integrar notificações push do OneSignal em um aplicativo .NET MAUI. Ele cobre tudo, desde a instalação até a configuração e gerenciamento do service worker.

***

## Requisitos

* .NET 7.0+
* Visual Studio 2019 ou mais recente
* Aplicativo OneSignal e plataforma configurados

**Requisitos iOS**

* macOS com Xcode 14+ (instruções de configuração usam Xcode 16.2)
* Dispositivo com iOS 12+, iPadOS 12+ ou simulador Xcode executando iOS 16.2+
* CocoaPods 1.16.2+

**Requisitos Android**

* Dispositivo ou emulador Android 7.0+ com Google Play Store (Services) instalado

### Configure seu app e plataforma OneSignal

Configure seu app OneSignal com as plataformas que você suporta — Apple (APNs), Google (FCM), Huawei (HMS) e/ou Amazon (ADM).

<Note>
  Se sua organização já tem uma conta OneSignal, [peça para ser convidado](/docs/pt-BR/manage-team-members) à Organização. Caso contrário, [cadastre-se para uma conta gratuita](https://onesignal.com) para começar.
</Note>

<Accordion title="Instruções de configuração passo a passo" icon="circle-chevron-down">
  <Steps>
    <Step title="Crie ou selecione seu app">
      Crie um novo app clicando em **New App/Website**, ou adicione uma plataforma a um app existente em **Settings > Push & In-App**. Selecione a(s) plataforma(s) que você quer configurar e clique em **Next: Configure Your Platform**.

      <Frame caption="Configurando seu primeiro app OneSignal, Organização e canal.">
        <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/dashboard/new-app-org-channel.png" alt="Dashboard do OneSignal mostrando o fluxo de configuração de novo app com nome da organização, nome do app e seleção de canal" />
      </Frame>
    </Step>

    <Step title="Configure credenciais da plataforma">
      Insira as credenciais para sua plataforma:

      * **Android**: [Configure Credenciais Firebase](/docs/pt-BR/android-firebase-credentials)
      * **iOS**: [Token p8 (Recomendado)](/docs/pt-BR/ios-p8-token-based-connection-to-apns) ou [Certificado p12](/docs/pt-BR/ios-p12-generate-certificates)
      * **Amazon**: [Gere API Key](/docs/pt-BR/generate-an-amazon-api-key)
      * **Huawei**: [Autorize OneSignal](/docs/pt-BR/authorize-onesignal-to-send-huawei-push)

      Clique em **Save & Continue** após inserir suas credenciais.
    </Step>

    <Step title="Salve seu App ID e instale o SDK">
      Seu **App ID** é exibido na tela final. Copie e salve-o — você precisa dele ao inicializar o SDK. Selecione sua plataforma de SDK e siga o guia de configuração.

      <Frame caption="Salve seu App ID e convide membros adicionais da equipe.">
        <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/dashboard/app-id-and-team-invite.png" alt="Dashboard do OneSignal mostrando o App ID e a opção de convite de equipe após a configuração" />
      </Frame>
    </Step>
  </Steps>
</Accordion>

***

## Configuração do SDK

### 1. Adicionar SDK

Usando a CLI .NET:

```http bash theme={null}
  dotnet add package OneSignalSDK.DotNet
```

### Opcional: Desabilitar o módulo de localização

A partir do `OneSignalSDK.DotNet` 6.2.0, você pode excluir o módulo de localização nativo do OneSignal das compilações iOS e Android quando seu app não usa recursos de localização. Por padrão, o `OneSignalSDK.DotNet` inclui o módulo de localização nativo para que `OneSignal.Location` funcione sem configuração adicional.

Adicione a propriedade MSBuild `OneSignalDisableLocation` ao projeto do seu app:

```xml .csproj theme={null}
<PropertyGroup>
  <OneSignalDisableLocation>true</OneSignalDisableLocation>
</PropertyGroup>
```

Quando desabilitado, `OneSignal.Location.RequestPermission()` e `OneSignal.Location.IsShared = value` não executam nenhuma ação em compilações nativas sem o módulo de localização. `OneSignal.Location.IsShared` retorna `false`.

Para desenvolvimento regular, certifique-se de que a propriedade esteja definida para a compilação do app que consome o SDK. Se você compilar a partir do código-fonte com referências de projeto ou scripts, passe a propriedade para `dotnet build` para que ela também se aplique aos projetos SDK referenciados:

```shell theme={null}
dotnet build -f net10.0-ios -p:OneSignalDisableLocation=true
dotnet build -f net10.0-android -p:OneSignalDisableLocation=true
```

Na CI, inclua o valor de `OneSignalDisableLocation` nas chaves de cache da compilação ou limpe as saídas de compilação ao alterná-lo. Isso evita restaurar bundles de app iOS, intermediários Android ou saídas `bin/obj` obsoletas que foram produzidas com o módulo de localização habilitado.

<Warning>
  `OneSignalDisableLocation` é uma configuração exclusiva do MSBuild. Gradle properties não são compatíveis para desabilitar o módulo de localização do SDK .NET.
</Warning>

### 2. Inicializar SDK

Inicialize o OneSignal no arquivo `App.xaml.cs`.

Substitua `YOUR_APP_ID` pelo seu OneSignal App ID encontrado no painel OneSignal **Settings > [Keys & IDs](./keys-and-ids)**.

<Note>
  Se você não tem acesso ao aplicativo OneSignal, peça aos [Membros da Equipe](./manage-team-members) para convidá-lo.
</Note>

```csharp C# theme={null}
using OneSignalSDK.DotNet;
using OneSignalSDK.DotNet.Core;
using OneSignalSDK.DotNet.Core.Debug;

public App() {
  InitializeComponent();

  // Enable verbose OneSignal logging to debug issues if needed.
  OneSignal.Debug.LogLevel = LogLevel.VERBOSE;

  // OneSignal Initialization
  OneSignal.Initialize("YOUR_APP_ID");

  // RequestPermissionAsync will show the notification permission prompt.
  // We recommend removing the following code and instead using an In-App Message to prompt for notification permission (See step 5)
  OneSignal.Notifications.RequestPermissionAsync(true);

  MainPage = new AppShell();
}
```

### 3. Adicionar uma extensão de serviço iOS

A Microsoft tem um guia sobre geração de uma Notification Service Extension [aqui](https://learn.microsoft.com/en-us/xamarin/ios/platform/user-notifications/enhanced-user-notifications?tabs=windows#implementing-a-service-extension), usando Visual Studio e Visual Studio para Mac, mas não tem orientação sobre como você criaria isso para VSCode neste momento.

Se você gerar uma extensão de serviço seguindo o guia acima, você pode seguir este código em nosso projeto de exemplo [encontrado no Github](https://github.com/OneSignal/OneSignal-DotNet-SDK/blob/d8c41c4ddd2f605f6bb2efbceabc7a6f6a2df1c3/OneSignalSDK.dotnet.iOS/NotificationServiceExtension.cs#L13)

```csharp C# theme={null}
using System;
using Foundation;
using OneSignalSDK.DotNet;
using OneSignalSDK.DotNet.iOS;
using UIKit;
using UserNotifications;

namespace OneSignalNotificationServiceExtension
{
    [Register("NotificationService")]
    public class NotificationService : UNNotificationServiceExtension
    {
        Action<UNNotificationContent> ContentHandler { get; set; }
        UNMutableNotificationContent BestAttemptContent { get; set; }
        UNNotificationRequest ReceivedRequest { get; set; }

        protected NotificationService(IntPtr handle) : base(handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }

        public override void DidReceiveNotificationRequest(UNNotificationRequest request, Action<UNNotificationContent> contentHandler)
        {
            ReceivedRequest = request;
            ContentHandler = contentHandler;
            BestAttemptContent = (UNMutableNotificationContent)request.Content.MutableCopy();

            NotificationServiceExtension.DidReceiveNotificationExtensionRequest(request, BestAttemptContent, contentHandler);
        }

        public override void TimeWillExpire()
        {
            // Called just before the extension will be terminated by the system.
            // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.

            NotificationServiceExtension.ServiceExtensionTimeWillExpireRequest(ReceivedRequest, BestAttemptContent);

            ContentHandler(BestAttemptContent);
        }
    }
}
```

***

## Configuração Android

Certifique-se de que seu app OneSignal está configurado para a plataforma Android usando suas [credenciais Firebase](/docs/pt-BR/android-firebase-credentials).

Configure seus [ícones de notificação](/docs/pt-BR/notification-icons) para corresponder à marca do seu app. Se este passo for pulado, um ícone de sino padrão será exibido para suas notificações push.

**Build para Android**

Neste ponto, você deve ser capaz de fazer build e executar seu app em um dispositivo Android físico ou emulador sem problemas.

<Check>
  Após confirmar que seu build Android funciona:

  * Continue com a [configuração iOS](#ios-setup), se aplicável.
  * Ou pule para [Testando a integração do OneSignal SDK](#testing-the-onesignal-sdk-integration).
</Check>

***

## Configuração iOS

Certifique-se de que seu app OneSignal está configurado para a plataforma iOS usando o [Token p8 (Recomendado)](/docs/pt-BR/ios-p8-token-based-connection-to-apns) ou [Certificado p12](/docs/pt-BR/ios-p12-generate-certificates).

Siga estes passos para adicionar notificações push ao seu app iOS, incluindo suporte para [Badges](/docs/pt-BR/badges), [Entrega Confirmada](/docs/pt-BR/confirmed-delivery) e imagens.

### 1. Adicione capability Push Notifications ao app target

A [capability Push Notifications](https://developer.apple.com/documentation/UserNotifications/registering-your-app-with-apns#Enable-the-push-notifications-capability) permite que seu app registre um token push e receba notificações.

1. Abra o arquivo `.xcworkspace` do seu app no Xcode.
2. Selecione **your app target > Signing & Capabilities**
3. Clique em **+ Capability** e adicione a capability **Push Notifications**

<Frame caption="O app target recebe a capability Push Notifications.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/c44118529490f1a7a1245a4c1e8b525d9eb23ab430f035b26b426889fc0486b6-382d57ff7ce1023a863da9f18a97b9a643b1e4b172ec02f1b6661160c362d827-Screenshot_2025-03-10_at_11.19.03_AM.png" />
</Frame>

### 2. Adicione capability Background Modes ao app target

Isso permite que seu app seja ativado em background quando notificações push chegam.

1. Adicione a capability [Background Modes](https://developer.apple.com/documentation/usernotifications/pushing-background-updates-to-your-app)
2. Habilite **Remote notifications**

<Frame caption="O app target recebe o modo de execução em background Remote Notifications.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/498bd555602023bd8f3ba8e7ee58c8f58eb260accd2f941f64e3e5de07ad99d8-Screenshot_2025-03-10_at_11.20.58_AM.png" />
</Frame>

### 3. Adicione app target ao App Group

[App Groups](https://developer.apple.com/documentation/xcode/configuring-app-groups/#Create-App-Groups-for-all-other-platforms) permitem compartilhamento de dados entre seu app e a Notification Service Extension. Necessário para Entrega Confirmada e Badges.

<Tabs>
  <Tab title="Se você NÃO tem um App Group configurado">
    1. Adicione a capability **App Groups**
    2. Na capability App Groups clique em **+**
    3. Adicione um novo container ID no formato: `group.your_bundle_id.onesignal`

    * Mantenha o prefixo **group.** e sufixo **.onesignal**. Substitua **`your_bundle_id`** pelo bundle identifier do seu app.
    * Por exemplo, bundle identifier `com.onesignal.MyApp`, terá o nome de container `group.com.onesignal.MyApp.onesignal`.

    <Frame caption="O app target faz parte do App Group.">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/34e545ae24b0fbdf043fd587102f7039cd1daf65777e84690946f4fb20f739aa-Screenshot_2025-03-10_at_11.22.52_AM.png" />
    </Frame>

    <Warning> O nome do seu App Group deve corresponder exatamente à ortografia e capitalização do seu bundle ID em todos os targets. </Warning>
  </Tab>

  <Tab title="Se você TEM um App Group">
    1. Abra o `Info.plist` do seu **App Target** e **OneSignalNotificationServiceExtension Target**
    2. Adicione uma nova propriedade ao `Info.plist` para ambos os targets:

    * **Key:** `OneSignal_app_groups_key`
    * **Value:** Nome do seu App Group existente (por exemplo, `group.your-custom-group-id`)

    ```xml XML theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
    <key>OneSignal_app_groups_key</key>
    <string>group.your-custom-group-id</string>
    ```

    <Frame caption="App group customizado definido dentro do app target.">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/aa3a061cbf89856a5ee75737e24a3dc7b36e96a866d277e68a170f136cbeae48-Screenshot_2025-03-10_at_11.24.56_AM.png" />
    </Frame>

    <Warning>
      Certifique-se de atualizar o `OneSignal_app_groups_key` em **ambos** o App Target **e** o `Info.plist` do OneSignalNotificationServiceExtension Target!
    </Warning>
  </Tab>
</Tabs>

### 4. Adicione Notification Service Extension

A [Notification Service Extension (NSE)](https://developer.apple.com/documentation/usernotifications/modifying-content-in-newly-delivered-notifications) habilita notificações ricas e análises de Entrega Confirmada.

1. No Xcode: **File > New > Target...**
2. Selecione **Notification Service Extension**, depois **Next**.
3. Defina o nome do produto como `OneSignalNotificationServiceExtension` e pressione **Finish**.
4. Pressione **Don't Activate** no prompt Activate scheme.

<Frame caption="Selecione o target Notification Service Extension.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/3ba0018a789c52c5c8d2f485d31e0ba0e07398d7abf5980215e4d4d2a2e0e948-Screenshot_2025-03-10_at_11.27.24_AM.png" />
</Frame>

<Frame caption="Nomeie a Notification Service Extension.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/afb3452c5ef95511c7ca4ef50c36ea2e5c205030c35d7ea066270a40f9ec3234-Screenshot_2025-03-10_at_11.27.47_AM.png" />
</Frame>

<Frame caption="Cancele a ativação para continuar debugando seu app target.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/cfc756b0273e5973af42a4a2933f3efcb5c4aeaf7ca5cec6bd196e8c01250f62-Screenshot_2025-03-10_at_11.28.01_AM.png" />
</Frame>

Defina o **Minimum Deployment Target** do OneSignalNotificationServiceExtension para corresponder ao seu app principal (iOS 15+ recomendado).

<Info> Se você está usando CocoaPods, defina a versão de deployment no seu Podfile também. </Info>

<Frame caption="Defina o mesmo deployment target do app principal.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/17cc605c99d890e50e83e45bfbe89ce5c7b226b6b000b9aa739d70a1bf41c231-Screenshot_2025-03-10_at_11.29.35_AM.png" />
</Frame>

### 5. Adicione NSE target ao app group

Use o mesmo App Group ID que você adicionou no passo 3.

1. Vá para **OneSignalNotificationServiceExtension > Signing & Capabilities**
2. Adicione **App Groups**
3. Adicione exatamente o mesmo group ID

<Warning>
  Se você está usando um nome de App Group customizado e não `group.your_bundle_id.onesignal` então certifique-se de adicionar seu App Group ID para ambos o App Target e o `Info.plist` do OneSignalNotificationServiceExtension Target! Veja o [passo 3](#3-adicione-app-target-ao-app-group) para mais informações.
</Warning>

<Frame caption="O NSE agora pertence ao mesmo app group que seu app target.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/e763a62e9ab8457d16fbb9a2c1f9344bb73a5a5d40fa920bbba18e040128a229-Screenshot_2025-03-10_at_11.30.24_AM.png" />
</Frame>

### 6. Atualize código NSE

1. Navegue para a pasta **OneSignalNotificationServiceExtension**
2. Substitua o conteúdo do arquivo `NotificationService.swift` ou `NotificationService.m` pelo seguinte:

<Frame caption="Navegue para seu arquivo NotificationService.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/ab43a237c660116a9547fe9b53ab2594181f6c04297b5a7236d21764122d26b3-Screenshot_2025-03-10_at_11.31.52_AM.png" />
</Frame>

<CodeGroup>
  ```swift Swift theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
  import UserNotifications
  import OneSignalExtension

  class NotificationService: UNNotificationServiceExtension {
      var contentHandler: ((UNNotificationContent) -> Void)?
      var receivedRequest: UNNotificationRequest!
      var bestAttemptContent: UNMutableNotificationContent?

      // Note this extension only runs when `mutable_content` is set
      // Setting an attachment or action buttons automatically sets the property to true
      override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
          self.receivedRequest = request
          self.contentHandler = contentHandler
          self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

          if let bestAttemptContent = bestAttemptContent {
              // DEBUGGING: Uncomment the 2 lines below to check this extension is executing
  //            print("Running NotificationServiceExtension")
  //            bestAttemptContent.body = "[Modified] " + bestAttemptContent.body

              OneSignalExtension.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler)
          }
      }

      override func serviceExtensionTimeWillExpire() {
          // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
          if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
              OneSignalExtension.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
              contentHandler(bestAttemptContent)
          }
      }
  }
  ```

  ```objectivec Objective-C theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
  #import <OneSignalExtension/OneSignalExtension.h>
  #import "NotificationService.h"

  @interface NotificationService ()

  @property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
  @property (nonatomic, strong) UNNotificationRequest *receivedRequest;
  @property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;

  @end

  @implementation NotificationService

  // Note, this extension only runs when mutable-content is set
  // Setting an attachment or action buttons automatically adds this
  - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
      self.receivedRequest = request;
      self.contentHandler = contentHandler;
      self.bestAttemptContent = [request.content mutableCopy];

      // DEBUGGING: Uncomment the 2 lines below and comment out the one above to ensure this extension is executing
  //     NSLog(@"Running NotificationServiceExtension");
  //     self.bestAttemptContent.body = [@"[Modified] " stringByAppendingString:self.bestAttemptContent.body];

      [OneSignalExtension didReceiveNotificationExtensionRequest:self.receivedRequest
                         withMutableNotificationContent:self.bestAttemptContent
                                     withContentHandler:self.contentHandler];
  }

  - (void)serviceExtensionTimeWillExpire {
      // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.

      [OneSignalExtension serviceExtensionTimeWillExpireRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent];

      self.contentHandler(self.bestAttemptContent);
  }

  @end
  ```
</CodeGroup>

Você deve ver um erro porque o pacote OneSignal não está instalado. Isso será resolvido no próximo passo.

<Frame caption="Este arquivo mostra um erro até você instalar o pacote no próximo passo.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/d3d8900d922b3bcaa44c0012e152ca233404d4c80d8bd427792c456aab798d06-Screenshot_2025-03-10_at_11.32.12_AM.png" />
</Frame>

### 7. Adicione OneSignal ao NSE target

Atualize seu `ios/Podfile` para incluir:

<CodeGroup>
  ```ruby Podfile theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
  target 'OneSignalNotificationServiceExtension' do
    pod 'OneSignalXCFramework', '>= 5.0.0', '< 6.0'
  end
  ```

  ```ruby Example theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
  target 'MyApp' do
    config = use_native_modules!

    use_react_native!(
      :path => config[:reactNativePath],
      # An absolute path to your application root.
      :app_path => "#{Pod::Config.instance.installation_root}/.."
    )

    post_install do |installer|
      # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
      react_native_post_install(
        installer,
        config[:reactNativePath],
        :mac_catalyst_enabled => false,
        # :ccache_enabled => true
      )
    end
  end

  target 'OneSignalNotificationServiceExtension' do
    pod 'OneSignalXCFramework', '>= 5.0.0', '< 6.0'
  end
  ```
</CodeGroup>

Abra seu projeto no terminal e execute:

```shell shell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
cd ios pod install cd ..
```

#### Erros comuns do pod install

Você pode encontrar os seguintes erros, aqui está como você pode resolvê-los.

<Accordion
  title="ArgumentError - \[Xcodeproj] Unable to find compatibility version string for
object version `70`."
>
  CocoaPods depende da gem Ruby `xcodeproj` para ler seus arquivos de projeto Xcode. Até o momento, o lançamento mais recente do `xcodeproj` não reconhece a versão de objeto 70, que foi introduzida pelo Xcode 16. Então quando CocoaPods tenta abrir seu arquivo `.xcodeproj`, ele falha com este erro.

  1. Feche o Xcode.
  2. Navegue para o arquivo `ios/<your-app>.xcodeproj/project.pbxproj` do seu projeto.
  3. Mude esta linha: `objectVersion = 70;`
  4. Substitua por: `objectVersion = 55;`
  5. Salve, feche e execute novamente `cd ios pod install cd ..`
</Accordion>

### Build para iOS

Você deve agora ser capaz de fazer build e executar seu app em um dispositivo iOS real ou simulador iOS (16.2+).

#### Erros comuns de build iOS

<Accordion title="Cycle Inside... building could produce unreliable results.">
  Você pode ver este erro ao fazer build com Xcode 15+, devido a uma mudança de configuração padrão afetando sistemas cross-platform.

  1. Abra sua pasta `.xcworkspace` no Xcode e navegue para **your app target > Build Phases**.
  2. Você deve ter uma fase chamada **"Embed Foundation Extensions"** ou **"Embed App Extensions"**.
  3. Arraste e mova esta fase de build para *acima* de **"Run Script"**.
  4. Faça build e execute seu app. O erro deve ser resolvido.

  <Frame caption="Ordem correta das Build Phases no Xcode.">
    <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/347d494eab3ea84c977d5785d16c1602d25204c9333b1ec1166c520d004a87d6-Screenshot_2025-03-06_at_4.23.01_PM.png" />
  </Frame>

  <Frame caption="Desmarque Copy only when installing.">
    <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/f7ef57730ef4aba1d669c8c6efac6be2a18c3035564c658967e7cf2e50708933-Screenshot_2025-03-06_at_4.29.29_PM.png" />
  </Frame>
</Accordion>

<Accordion title="Erro PBXGroup">
  <Info>
    RuntimeError - `PBXGroup` tentou inicializar um objeto com ISA desconhecido `PBXFileSystemSynchronizedRootGroup` dos atributos: `{"isa"=>"...", "exceptions"=>["//", "..."], "explicitFileTypes"=>{}, "explicitFolders"=>[], "path"=>"OneSignalNotificationServiceExtension", "sourceTree"=>"<group>"}`
  </Info>

  Correção:

  1. Encontre a pasta listada sob "path" no erro
  2. Na barra lateral do projeto Xcode, clique com botão direito na pasta
  3. Selecione **Convert to Group**

  <Frame caption="Erro de path para PBXGroup.">
    <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/92100ba09cde1f8de53dae773dca16847c7e1c6329bc9f4172331f2bc2191592-16c6fb188242f0e43237a0da47c6a2a9.png" />
  </Frame>

  <br />

  <Frame caption="Converta pasta para group.">
    <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/b90d34ba26c94f437fd553514647fc4024ec42301ad2798eba7faec695974720-d46625820efed3f9dbca1e223ac0797f.png" />
  </Frame>
</Accordion>

<Check>
  Após confirmar que seu build iOS funciona, continue com [Testando a integração do OneSignal SDK](#testing-the-onesignal-sdk-integration).
</Check>

***

## Testando a integração do OneSignal SDK

Este guia ajuda você a verificar se sua integração do OneSignal SDK está funcionando corretamente testando notificações push, registro de inscrição e mensagens in-app.

<Warning>
  Se você está testando com um emulador Android, ele deve iniciar com um cold boot.

  1. Vá para **Device Manager** no Android Studio.
  2. Selecione seu dispositivo emulador e clique em **Edit**.
  3. Vá para **Additional Settings** ou **More**.
  4. Defina a **Boot option** para **Cold Boot**.
  5. Salve as alterações e reinicie o emulador.
</Warning>

### Verifique inscrições mobile

<Steps>
  <Step title="Inicie seu app em um dispositivo de teste.">
    O prompt de permissão push nativo deve aparecer automaticamente se você adicionou o método `requestPermission` durante a inicialização.

    <Frame caption="Prompts de permissão push iOS e Android">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/a90c2cc443f5fe9e7c80368c680a16cf1ca6203f7b28a0a6eec212add8510f80-Untitled_design_11.png" />
    </Frame>
  </Step>

  <Step title="Verifique seu dashboard OneSignal">
    Antes de aceitar o prompt, verifique o dashboard OneSignal:

    * Vá para **Audience > Subscriptions**.
    * Você deve ver uma nova entrada com o status "Never Subscribed".

    <Frame caption="Dashboard mostrando inscrição com status 'Never Subscribed'">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/f19fa5ada3572ce14447bb5639744e9da75cd7a3ab43ecc1a057f2ed92b38e6f-Screenshot_2025-03-16_at_14.55.39.png" />
    </Frame>
  </Step>

  <Step title="Retorne ao app e toque em Allow no prompt." />

  <Step title="Atualize a página de Subscription do dashboard OneSignal.">
    O status da inscrição deve agora mostrar **Subscribed**.

    <Frame caption="Dashboard mostrando inscrição com status 'Subscribed'">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/85b0376cdcc6f93fb7b3895b18cd1788d2342776d7995909881e5c64dd40fb62-Screenshot_2025-03-16_at_15.57.34.png" />
    </Frame>

    <Check>Você criou com sucesso uma [inscrição mobile](/docs/pt-BR/subscriptions).
    Inscrições mobile são criadas quando usuários abrem seu app pela primeira vez em um dispositivo ou se eles desinstalam e reinstalam seu app no mesmo dispositivo.</Check>
  </Step>
</Steps>

### Configure inscrições de teste

Inscrições de teste são úteis para testar uma notificação push antes de enviar uma mensagem.

<Steps>
  <Step title="Adicione a Test Users.">
    No dashboard, próximo à inscrição, clique no botão **Options (três pontos)** e selecione **Add to Test Users**.

    <Frame caption="Adicionando um dispositivo a Test Users">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/dashboard/add-to-test-subscriptions.png" />
    </Frame>
  </Step>

  <Step title="Nomeie sua inscrição.">
    Nomeie a inscrição para que você possa identificar facilmente seu dispositivo depois na **aba Test Users**.
  </Step>

  <Step title="Crie um segmento de usuários de teste.">
    Vá para **Audience > Segments > New Segment**.
  </Step>

  <Step title="Nomeie o segmento.">
    Nomeie o segmento `Test Users` (o nome é importante porque será usado depois).
  </Step>

  <Step title="Adicione o filtro Test Users e clique em Create Segment.">
    <Frame caption="Criando um segmento 'Test Users' com o filtro Test Users">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/dashboard/create-test-users-segment.png" />
    </Frame>

    <Check>Você criou com sucesso um segmento de usuários de teste.
    Agora podemos testar enviar mensagens para este dispositivo individual e grupos de usuários de teste.</Check>
  </Step>
</Steps>

### Envie push de teste via API

<Steps>
  <Step title="Obtenha seu App API Key e App ID.">
    No seu dashboard OneSignal, vá para **Settings > [Keys & IDs](/docs/pt-BR/keys-and-ids)**.
  </Step>

  <Step title="Atualize o código fornecido.">
    Substitua `YOUR_APP_API_KEY` e `YOUR_APP_ID` no código abaixo com suas chaves reais. Este código usa o segmento `Test Users` que criamos anteriormente.

    ```curl theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}
    curl -X \
    POST --url 'https://api.onesignal.com/notifications' \
     --header 'content-type: application/json; charset=utf-8' \
     --header 'authorization: Key YOUR_APP_API_KEY' \
     --data \
     '{
      "app_id": "YOUR_APP_ID",
      "target_channel": "push",
      "name": "Testing basic setup",
      "headings": {
      	"en": "👋"
      },
      "contents": {
        "en": "Hello world!"
      },
      "included_segments": [
        "Test Users"
      ],
      "ios_attachments": {
        "onesignal_logo": "https://avatars.githubusercontent.com/u/11823027?s=200&v=4"
      },
      "big_picture": "https://avatars.githubusercontent.com/u/11823027?s=200&v=4"
    }'
    ```
  </Step>

  <Step title="Execute o código.">
    Execute o código no seu terminal.
  </Step>

  <Step title="Verifique imagens e entrega confirmada.">
    Se todos os passos de configuração foram completados com sucesso, as inscrições de teste devem receber uma notificação com uma imagem incluída:

    <Frame caption="Notificação push com imagem no iOS e Android">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/e4e3e812eb6841ff11795a6ee0ea36eff483920ea9266733d6948ed34df3def3-Untitled_design_9.png" />
    </Frame>

    <Info>Imagens aparecerão pequenas na visualização de notificação recolhida. Expanda a notificação para ver a imagem completa.</Info>
  </Step>

  <Step title="Verifique por entrega confirmada.">
    No seu dashboard, vá para **Delivery > Sent Messages**, depois clique na mensagem para ver as estatísticas.

    Você deve ver a estatística **confirmed**, significando que o dispositivo recebeu o push.
    <Check>Você enviou com sucesso uma notificação via nossa API para um segmento.</Check>

    <Warning>
      * Não recebeu imagem? Sua [Notification Service Extension](#ios-setup) pode estar faltando.
      * Sem entrega confirmada? Revise o guia de solução de problemas [aqui](/docs/pt-BR/confirmed-delivery#troubleshooting-confirmed-delivery).
      * Tendo problemas? Copie e cole a requisição da api e um log do início ao fim do lançamento do app em um arquivo `.txt`. Depois compartilhe ambos com `support@onesignal.com`.
    </Warning>
  </Step>
</Steps>

### Envie uma mensagem in-app

[Mensagens in-app](/docs/pt-BR/in-app-messages-setup) permitem que você se comunique com usuários enquanto eles estão usando seu app.

<Steps>
  <Step title="Feche ou coloque em background seu app no dispositivo.">
    Isso é porque usuários devem atender aos critérios de público in-app *antes* que uma nova sessão inicie. No OneSignal, uma nova sessão inicia quando o usuário abre seu app depois de ter estado em background ou fechado por pelo menos 30 segundos. Para mais detalhes, veja nosso guia sobre [como mensagens in-app são exibidas](/docs/pt-BR/in-app-messages-setup#how-are-iams-displayed%3F).
  </Step>

  <Step title="Crie uma mensagem in-app.">
    * No seu dashboard OneSignal, navegue para **Messages > In-App > New In-App**.
    * Encontre e selecione a mensagem **Welcome**.
    * Defina seu Público como o segmento **Test Users** que usamos anteriormente.

    <Frame caption="Direcionando o segmento 'Test Users' com uma mensagem in-app">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/2979dfb2c6e0711669ebe737d78d975dcfed9f8117bdd68846255b9fc91e4771-Screenshot_2025-03-17_at_14.56.23.png" />
    </Frame>
  </Step>

  <Step title="Personalize o conteúdo da mensagem se desejar.">
    <Frame caption="Exemplo de personalização da mensagem Welcome in-app">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/4c511ebdb04f33055556b9969bab8deee0d62154573cf0b41ffb25cc8431e7c0-Screenshot_2025-03-17_at_14.59.37.png" />
    </Frame>
  </Step>

  <Step title="Defina Trigger como 'On app open'." />

  <Step title="Agende frequência.">
    Em **Schedule > How often do you want to show this message?** selecione **Every time trigger conditions are satisfied**.

    <Frame caption="Opções de agendamento de mensagem in-app">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/c48ccaf33a74d5aa442c768a18b8e642024b89305aae665d613aee1d8bde43ec-Screenshot_2025-03-17_at_15.00.40.png" />
    </Frame>
  </Step>

  <Step title="Torne a mensagem ativa.">
    Clique em **Make Message Live** para que fique disponível para seus Test Users cada vez que eles abrem o app.
  </Step>

  <Step title="Abra o app e veja a mensagem.">
    Depois que a mensagem in-app estiver ativa, abra seu app. Você deve vê-la exibida:

    <Frame caption="Mensagem in-app Welcome mostrada em dispositivos">
      <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/a7ed4bb02be56900a65d2519e3d69f9c9b2c2a1c65fe740f07789e4ffe79cd67-Untitled_design_10.png" />
    </Frame>

    <Warning>
      Não está vendo a mensagem?

      * Inicie uma nova sessão
        * Você deve fechar ou colocar em background o app por pelo menos 30 segundos antes de reabrir. Isso garante que uma nova sessão seja iniciada.
        * Para mais, veja [como mensagens in-app são exibidas](/docs/pt-BR/in-app-messages-setup#how-are-iams-displayed%3F).
      * Ainda no segmento `Test Users`?
        * Se você reinstalou ou trocou de dispositivo, adicione novamente o dispositivo a [Test Users](#configure-inscrições-de-teste) e confirme que ele faz parte do segmento Test Users.
      * Tendo problemas?
        * Siga [Obtendo um Debug Log](/docs/pt-BR/capturing-a-debug-log) enquanto reproduz os passos acima. Isso gerará logging adicional que você pode compartilhar com `support@onesignal.com` e nós ajudaremos a investigar o que está acontecendo.
    </Warning>
  </Step>
</Steps>

<Check>
  Você configurou com sucesso o OneSignal SDK e aprendeu conceitos importantes como:

  * Coletar [Inscrições](/docs/pt-BR/subscriptions), configurar [inscrições de teste](/docs/pt-BR/find-set-test-subscriptions) e criar [Segmentos](/docs/pt-BR/segmentation).
  * Enviar [Push](/docs/pt-BR/push) com imagens e [Entrega Confirmada](/docs/pt-BR/confirmed-delivery) usando Segmentos e nossa API [Create message](/reference/create-message).
  * Enviar [Mensagens in-app](/docs/pt-BR/in-app-messages-setup).

  Continue com este guia para identificar usuários no seu app e configurar recursos adicionais.
</Check>

***

## Identificação de usuário

Anteriormente, demonstramos como criar [Inscrições](/docs/pt-BR/subscriptions) móveis. Agora vamos expandir para identificar [Usuários](/docs/pt-BR/users) através de todas as suas inscrições (incluindo push, email e SMS) usando o OneSignal SDK. Cobriremos External IDs, tags, inscrições multicanal, privacidade e rastreamento de eventos para ajudá-lo a unificar e engajar usuários através de plataformas.

### Atribua External ID

Use um External ID para identificar usuários consistentemente através de dispositivos, endereços de email e números de telefone usando o identificador de usuário do seu backend. Isso garante que suas mensagens permaneçam unificadas através de canais e sistemas de terceiros (especialmente importante para [Integrações](/docs/pt-BR/integrations)).

Defina o External ID com o [método `login`](/docs/pt-BR/mobile-sdk-reference#login-external-id) do nosso SDK cada vez que eles são identificados pelo seu app.

<Note>
  OneSignal gera IDs únicos somente leitura para inscrições (Subscription ID) e usuários (OneSignal ID).

  À medida que usuários baixam seu app em diferentes dispositivos, se inscrevem no seu website e/ou fornecem endereços de email e números de telefone fora do seu app, novas inscrições serão criadas.

  Definir o External ID via nosso SDK é altamente recomendado para identificar usuários através de todas as suas inscrições, independentemente de como elas são criadas.
</Note>

### Adicione Tags

[Tags](/docs/pt-BR/add-user-data-tags) são pares chave-valor de dados string que você pode usar para armazenar propriedades de usuário (como `username`, `role` ou preferências) e eventos (como `purchase_date`, `game_level` ou interações de usuário). Tags potencializam [Personalização de Mensagem](/docs/pt-BR/message-personalization) avançada e [Segmentação](/docs/pt-BR/segmentation) permitindo casos de uso mais avançados.

Defina tags com os [métodos `addTag` e `addTags`](/docs/pt-BR/mobile-sdk-reference#data-tags) do nosso SDK conforme eventos ocorrem no seu app.

Neste exemplo, o usuário alcançou o nível 6 identificável pela tag chamada `current_level` definida com um valor de `6`.

<Frame caption="Um perfil de usuário no OneSignal com uma tag chamada &#x22;current_level&#x22; definida como &#x22;6&#x22;">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/d4674261847231079fecc176ba88065409c90943e3854b9df200457325a0aed4-Screenshot_2025-03-18_at_14.47.25.png" />
</Frame>

Podemos criar um segmento de usuários que têm um nível entre 5 e 10, e usar isso para enviar mensagens direcionadas e personalizadas:

<Frame caption="Editor de segmento mostrando um segmento direcionado a usuários com um valor current_level maior que 4 e menor que 10">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/300d36b632a6f6d7017780457bbe2610b71767fd0db093c7611e59714dcbda5b-Screenshot_2025-03-18_at_14.49.56.png" />
</Frame>

<br />

<Frame caption="Captura de tela mostrando uma notificação push direcionada ao segmento Nível 5-10 com uma mensagem personalizada">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/97e09b42d25c6d3f4c7cb0a6fff4dfb8893cbb4b283f7ff1f77977c33113319c-Screenshot_2025-03-18_at_14.55.47.png" />
</Frame>

<br />

<Frame caption="A notificação push é recebida em um dispositivo iOS e Android com o conteúdo personalizado">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/3bf1810580f30984745017056383f151b874513b6bfb1445fb1016e5c9a79e82-Untitled_design_12.png" />
</Frame>

### Adicione inscrições de email e/ou SMS

Anteriormente vimos como nosso SDK cria inscrições móveis para enviar push e mensagens in-app. Você também pode alcançar usuários através de canais de email e SMS criando as inscrições correspondentes.

* Use o [método `addEmail`](/docs/pt-BR/mobile-sdk-reference#addemail-%2C-removeemail) para criar inscrições de email.
* Use o [método `addSms`](/docs/pt-BR/mobile-sdk-reference#addsms-%2C-removesms) para criar inscrições de SMS.

Se o endereço de email e/ou número de telefone já existem no app OneSignal, o SDK adicionará ao usuário existente, não criará duplicatas.

Você pode visualizar usuários unificados via **Audience > Users** no dashboard ou com a [API View user](/reference/view-user).

<Frame caption="Um perfil de usuário com inscrições push, email e SMS unificadas por External ID">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/onesignal/images/docs/b1cf9999d41da6e4ce333e1126612529b85eac47447bb0b434418d082f595acd-Screenshot_2025-03-18_at_14.43.46.png" />
</Frame>

<Note>
  Melhores práticas para comunicação multicanal

  * Obtenha consentimento explícito antes de adicionar inscrições de email ou SMS.
  * Explique os benefícios de cada canal de comunicação aos usuários.
  * Forneça preferências de canal para que usuários possam selecionar quais canais eles preferem.
</Note>

***

### Privacidade e consentimento do usuário

Para controlar quando OneSignal coleta dados de usuário, use os métodos de controle de consentimento do SDK:

* [`setConsentRequired(true)`](/docs/pt-BR/mobile-sdk-reference#setconsentrequired): Previne coleta de dados até que consentimento seja dado.
* [`setConsentGiven(true)`](/docs/pt-BR/mobile-sdk-reference#setconsentgiven): Habilita coleta de dados uma vez que consentimento é concedido.

Veja nossos documentos de Privacidade e segurança para mais sobre:

* [Dados coletados pelo SDK](/docs/pt-BR/data-collected-by-the-onesignal-sdk)
* [Tratamento de dados pessoais](/docs/pt-BR/handling-personal-data)

***

## Solicite permissões push

Em vez de chamar `requestPermission()` imediatamente ao abrir o app, adote uma abordagem mais estratégica. Use uma mensagem in-app para explicar o valor das notificações push antes de solicitar permissão.

Para melhores práticas e detalhes de implementação, veja nosso guia [Solicite permissões push](/docs/pt-BR/prompt-for-push-permissions).

***

## Escute eventos de push, usuário e in-app

Use listeners do SDK para reagir a ações de usuário e mudanças de estado.

O SDK fornece vários event listeners para você conectar. Veja nosso [guia de referência do SDK](/docs/pt-BR/mobile-sdk-reference) para mais detalhes.

### Eventos de notificação push

* [`addClickListener()`](/docs/pt-BR/mobile-sdk-reference#addclicklistener-push): Detecte quando uma notificação é tocada. Útil para [Deep Linking](/docs/pt-BR/deep-linking).
* [`addForegroundLifecycleListener()`](/docs/pt-BR/mobile-sdk-reference#addforegroundlifecyclelistener-push): Controle como notificações se comportam em foreground.

Para personalização completa, veja [Mobile Service Extensions](/docs/pt-BR/service-extensions).

### Mudanças de estado do usuário

* [`addObserver()` para estado do usuário](/docs/pt-BR/mobile-sdk-reference#addobserver-user-state): Detecte quando o External ID é definido.
* [`addPermissionObserver()`](/docs/pt-BR/mobile-sdk-reference#addpermissionobserver-push): Rastreie a interação específica do usuário com o prompt de permissão push nativo.
* [`addObserver()` para inscrição push](/docs/pt-BR/mobile-sdk-reference#addobserver-push-subscription-changes): Rastreie quando o status de inscrição push muda.

### Eventos de mensagem in-app

* [`addClickListener()`](/docs/pt-BR/mobile-sdk-reference#addclicklistener-in-app): Lide com ações de clique in-app. Ideal para deep linking ou rastreamento de eventos.
* [`addLifecycleListener()`](/docs/pt-BR/mobile-sdk-reference#addclicklistener-in-app): Rastreie o ciclo de vida completo de mensagens in-app (exibida, clicada, descartada, etc.).

***

## Configuração avançada e capacidades

Explore mais capacidades para melhorar sua integração:

* [🔁 Migrando para OneSignal de outro serviço](/docs/pt-BR/migrating-to-onesignal)
* [🌍 Rastreamento de localização](/docs/pt-BR/mobile-sdk-reference#location)
* [🔗 Deep Linking](/docs/pt-BR/deep-linking)
* [🔌 Integrações](/docs/pt-BR/integrations)
* [🧩 Mobile Service Extensions](/docs/pt-BR/service-extensions)
* [🛎️ Botões de ação](/docs/pt-BR/action-buttons)
* [🌐 Mensagens multilíngues](/docs/pt-BR/multi-language-messaging)
* [🛡️ Verificação de Identidade](/docs/pt-BR/identity-verification)
* [📊 Custom Outcomes](/docs/pt-BR/custom-outcomes)
* [📲 Live Activities](/docs/pt-BR/live-activities)

### Configuração e referência do Mobile SDK

Certifique-se de que você habilitou todos os recursos principais revisando o guia [Configuração de mobile push](/docs/pt-BR/mobile-push-setup).

Para detalhes completos sobre métodos disponíveis e opções de configuração, visite a [referência do Mobile SDK](/docs/pt-BR/mobile-sdk-reference).

<Check>Parabéns! Você completou com sucesso o guia de configuração do Mobile SDK.</Check>

***

<Info>
  Precisa de ajuda?

  Converse com nossa equipe de Suporte ou envie email para `support@onesignal.com`

  Por favor inclua:

  * Detalhes do problema que você está enfrentando e passos para reproduzir se disponível
  * Seu OneSignal App ID
  * O External ID ou Subscription ID se aplicável
  * A URL para a mensagem que você testou no Dashboard OneSignal se aplicável
  * Quaisquer [logs ou mensagens de erro](/docs/pt-BR/capturing-a-debug-log) relevantes

  Estamos felizes em ajudar!
</Info>

***
