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

> Como adicionar notificações push e mensagens no aplicativo ao seu aplicativo iOS com o OneSignal.

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="ios" viewMode="mini" />

## Visão geral

Notificações push do iOS são essenciais para impulsionar o engajamento e retenção sustentados do usuário no seu aplicativo iOS. Elas permitem que você entregue atualizações em tempo real, lembretes e mensagens personalizadas diretamente aos seus usuários, melhorando a experiência geral do usuário e a aderência do seu aplicativo. Ao integrar o SDK do OneSignal com seu aplicativo, você pode aproveitar o Apple Push Notification Service (APNS) para garantir que suas notificações sejam entregues perfeitamente em dispositivos iOS. Este guia irá orientá-lo na integração do nosso SDK ao seu aplicativo iOS.

***

## Requisitos

* macOS com Xcode 14+ (instruções de configuração usam Xcode 16.2)
* Dispositivo com iOS 12+, iPadOS 12+, ou simulador Xcode rodando iOS 16.2+
* Aplicativo e plataforma OneSignal configurados

### Configure your OneSignal app and platform

Configure your OneSignal app with the platforms you support — Apple (APNs), Google (FCM), Huawei (HMS), and/or Amazon (ADM).

<Note>
  If your organization already has a OneSignal account, [ask to be invited](/docs/en/manage-team-members) to the Organization. Otherwise, [sign up for a free account](https://onesignal.com) to get started.
</Note>

<Accordion title="Step-by-step setup instructions" icon="circle-chevron-down">
  <Steps>
    <Step title="Create or select your app">
      Create a new app by clicking **New App/Website**, or add a platform to an existing app in **Settings > Push & In-App**. Select the platform(s) you want to configure and click **Next: Configure Your Platform**.

      <Frame caption="Setting up your first OneSignal app, Organization, and channel.">
        <img src="https://mintcdn.com/onesignal/BK2J-grzBpDdh8NC/images/dashboard/new-app-org-channel.png?fit=max&auto=format&n=BK2J-grzBpDdh8NC&q=85&s=ee0045484152ed15095f619344aa0564" alt="OneSignal dashboard showing the new app setup flow with Organization name, app name, and channel selection" width="2592" height="1904" data-path="images/dashboard/new-app-org-channel.png" />
      </Frame>
    </Step>

    <Step title="Configure platform credentials">
      Enter the credentials for your platform:

      * **Android**: [Set up Firebase credentials](/docs/en/android-firebase-credentials)
      * **iOS**: [p8 token (recommended)](/docs/en/ios-p8-token-based-connection-to-apns) or [p12 certificate](/docs/en/ios-p12-generate-certificates)
      * **Amazon**: [Generate API key](/docs/en/generate-an-amazon-api-key)
      * **Huawei**: [Authorize OneSignal](/docs/en/authorize-onesignal-to-send-huawei-push)

      Click **Save & Continue** after entering your credentials.
    </Step>

    <Step title="Save your App ID and install the SDK">
      Your **App ID** is displayed on the final screen. Copy and save it — you need it when initializing the SDK. Select your SDK platform, then follow the setup guide.

      <Frame caption="Save your App ID and invite additional team members.">
        <img src="https://mintcdn.com/onesignal/VypVshrFHTBZfEma/images/dashboard/app-id-and-team-invite.png?fit=max&auto=format&n=VypVshrFHTBZfEma&q=85&s=e1e2aab6cca7c4aa6b9a76eff362d5af" alt="OneSignal dashboard showing the App ID and team invite option after setup" width="2592" height="1904" data-path="images/dashboard/app-id-and-team-invite.png" />
      </Frame>
    </Step>
  </Steps>
</Accordion>

***

## Configuração do iOS

Siga estes passos para adicionar notificações push ao seu aplicativo iOS, incluindo suporte para [Badges](./badges), [Confirmed receipt](./confirmed-delivery) e imagens.

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

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

1. Abra o arquivo `.xcworkspace` do seu aplicativo no Xcode.
2. Selecione **seu 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://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/c44118529490f1a7a1245a4c1e8b525d9eb23ab430f035b26b426889fc0486b6-382d57ff7ce1023a863da9f18a97b9a643b1e4b172ec02f1b6661160c362d827-Screenshot_2025-03-10_at_11.19.03_AM.png?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=e4475a29ab479ec1bd151c809bebd26a" width="2436" height="1324" data-path="images/docs/c44118529490f1a7a1245a4c1e8b525d9eb23ab430f035b26b426889fc0486b6-382d57ff7ce1023a863da9f18a97b9a643b1e4b172ec02f1b6661160c362d827-Screenshot_2025-03-10_at_11.19.03_AM.png" />
</Frame>

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

Isso permite que seu aplicativo desperte em segundo plano quando notificações push chegarem.

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 segundo plano Remote Notifications.">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/498bd555602023bd8f3ba8e7ee58c8f58eb260accd2f941f64e3e5de07ad99d8-Screenshot_2025-03-10_at_11.20.58_AM.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=79995d23ebbcb67d6a2bd0412259f8c0" width="2436" height="1324" data-path="images/docs/498bd555602023bd8f3ba8e7ee58c8f58eb260accd2f941f64e3e5de07ad99d8-Screenshot_2025-03-10_at_11.20.58_AM.png" />
</Frame>

### 3. Adicionar 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 aplicativo e a Notification Service Extension. Necessário para confirmed receipt 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 identificador de bundle do seu aplicativo.
    * Por exemplo, o identificador de bundle `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://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/34e545ae24b0fbdf043fd587102f7039cd1daf65777e84690946f4fb20f739aa-Screenshot_2025-03-10_at_11.22.52_AM.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=5904f8a6dd4030f5ee7cfa82b3c3eeb8" width="2436" height="1324" data-path="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 (ex.: `group.your-custom-group-id`)

    ```xml XML 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://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/aa3a061cbf89856a5ee75737e24a3dc7b36e96a866d277e68a170f136cbeae48-Screenshot_2025-03-10_at_11.24.56_AM.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=84e93061a8c82c1ca44cc14b81995d46" width="2788" height="1400" data-path="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. Adicionar 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 confirmed receipt.

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 de Activate scheme.

<Frame caption="Selecione o target Notification Service Extension.">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/3ba0018a789c52c5c8d2f485d31e0ba0e07398d7abf5980215e4d4d2a2e0e948-Screenshot_2025-03-10_at_11.27.24_AM.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=c5c5399c449ec5201dfb3342f9eeb538" width="2788" height="1400" data-path="images/docs/3ba0018a789c52c5c8d2f485d31e0ba0e07398d7abf5980215e4d4d2a2e0e948-Screenshot_2025-03-10_at_11.27.24_AM.png" />
</Frame>

<Frame caption="Nomeie a Notification Service Extension.">
  <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/afb3452c5ef95511c7ca4ef50c36ea2e5c205030c35d7ea066270a40f9ec3234-Screenshot_2025-03-10_at_11.27.47_AM.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=ed78140e080cf8aad1e727d819bac8ad" width="2788" height="1400" data-path="images/docs/afb3452c5ef95511c7ca4ef50c36ea2e5c205030c35d7ea066270a40f9ec3234-Screenshot_2025-03-10_at_11.27.47_AM.png" />
</Frame>

<Frame caption="Cancele a ativação para continuar depurando seu app target.">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/cfc756b0273e5973af42a4a2933f3efcb5c4aeaf7ca5cec6bd196e8c01250f62-Screenshot_2025-03-10_at_11.28.01_AM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=03f43bf27f643419eba14e438f3f07a1" width="2788" height="1400" data-path="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 aplicativo 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 aplicativo principal.">
  <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/17cc605c99d890e50e83e45bfbe89ce5c7b226b6b000b9aa739d70a1bf41c231-Screenshot_2025-03-10_at_11.29.35_AM.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=48f72f24a321d60e6623b440b591987a" width="2788" height="1400" data-path="images/docs/17cc605c99d890e50e83e45bfbe89ce5c7b226b6b000b9aa739d70a1bf41c231-Screenshot_2025-03-10_at_11.29.35_AM.png" />
</Frame>

### 5. Adicionar 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 o mesmo group ID exato

<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 ao `Info.plist` tanto do App Target quanto do OneSignalNotificationServiceExtension Target! Veja o [passo 3](#3-add-app-target-to-app-group) para mais informações.
</Warning>

<Frame caption="O NSE agora pertence ao mesmo app group do seu app target.">
  <img src="https://mintcdn.com/onesignal/Xl2NHJvxakrK4JbL/images/docs/e763a62e9ab8457d16fbb9a2c1f9344bb73a5a5d40fa920bbba18e040128a229-Screenshot_2025-03-10_at_11.30.24_AM.png?fit=max&auto=format&n=Xl2NHJvxakrK4JbL&q=85&s=096adcb29f4d4d61bf51a0b9caed695d" width="2788" height="1400" data-path="images/docs/e763a62e9ab8457d16fbb9a2c1f9344bb73a5a5d40fa920bbba18e040128a229-Screenshot_2025-03-10_at_11.30.24_AM.png" />
</Frame>

### 6. Atualizar código do NSE

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

<Frame caption="Navegue até seu arquivo NotificationService.">
  <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/ab43a237c660116a9547fe9b53ab2594181f6c04297b5a7236d21764122d26b3-Screenshot_2025-03-10_at_11.31.52_AM.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=917ea1a94b0485f5f14d3fe8d28886d4" width="2788" height="1400" data-path="images/docs/ab43a237c660116a9547fe9b53ab2594181f6c04297b5a7236d21764122d26b3-Screenshot_2025-03-10_at_11.31.52_AM.png" />
</Frame>

<CodeGroup>
  ```swift Swift 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)
          }
      }
  }
  ```

  ```objc Objective-C 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://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/d3d8900d922b3bcaa44c0012e152ca233404d4c80d8bd427792c456aab798d06-Screenshot_2025-03-10_at_11.32.12_AM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=11c4114e117cb74099d9a063d6d11ebc" width="2788" height="1400" data-path="images/docs/d3d8900d922b3bcaa44c0012e152ca233404d4c80d8bd427792c456aab798d06-Screenshot_2025-03-10_at_11.32.12_AM.png" />
</Frame>

***

## Configuração do SDK

Esta seção irá guiá-lo na integração dos recursos principais do OneSignal. Ao final desta seção, você terá uma integração básica com nosso SDK permitindo que você acione mensagens no aplicativo e receba notificações push.

### 1. Adicionar SDK

Adicione nosso SDK usando o Xcode Package Dependencies Manager (Swift Package Manager) ou CocoaPods. Existem 4 bibliotecas disponíveis. Se você não quer [Mensagens no aplicativo](./in-app-messages-setup) e/ou rastreamento de localização, você pode omitir esses pacotes.

| Biblioteca                 |                 Target                |  Necessário |
| -------------------------- | :-----------------------------------: | :---------: |
| **OneSignalExtension**     | OneSignalNotificationServiceExtension |      ✅      |
| **OneSignalFramework**     |                  App                  |      ✅      |
| **OneSignalInAppMessages** |                  App                  | Recomendado |
| **OneSignalLocation**      |                  App                  |   Opcional  |

<Tabs>
  <Tab title="Xcode Package Dependencies">
    Navegue até **File > Add Package Dependencies...** e insira a URL para o repositório do OneSignal SDK:

    `https://github.com/OneSignal/OneSignal-XCFramework`

    Selecione o pacote **onesignal-xcframework** e clique em **Add Package**.

    Escolha Package Products para OneSignal-XCFramework.

    * **Importante**: Adicione o **OneSignalExtension** ao OneSignalNotificationServiceExtension Target.
    * Adicione o **OneSignalFramework** ao seu App Target.
    * Se você planeja usar mensagens no aplicativo (recomendado) e/ou rastreamento de localização, então adicione esses pacotes ao seu App Target também.

    <Frame caption="Se seu aplicativo não requer rastreamento de localização, você pode remover o pacote conforme mostrado neste exemplo.">
      <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/4b094820f8ece0b91de19a2a64c09820c23bf8d478bb67fe862ac18254b5d52e-package_dependancies.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=a017955414e52f224298de55a8211e13" width="2396" height="1680" data-path="images/docs/4b094820f8ece0b91de19a2a64c09820c23bf8d478bb67fe862ac18254b5d52e-package_dependancies.png" />
    </Frame>

    Para mais detalhes, consulte a [documentação da Apple sobre adicionar dependências de pacote](https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app#Add-a-package-dependency).
  </Tab>

  <Tab title="CocoaPods">
    **Requisitos**: CocoaPods 1.16.2+ (Instruções de configuração usam CocoaPods 1.16.2).

    Abra seu `Podfile` e adicione o seguinte:

    ```ruby Podfile theme={null}
      # If platform is uncommented, set to the same value as your minimum deployment target in Xcode
      # platform :ios, '15.0'

      target 'your_project_name' do
        pod 'OneSignal/OneSignal', '>= 5.2.9', '< 6.0'
        # If your app does not use In-App messages, you can remove this:
        pod 'OneSignal/OneSignalInAppMessages', '>= 5.2.9', '< 6.0'
        # If your app does not use CoreLocation, you can remove this:
        pod 'OneSignal/OneSignalLocation', '>= 5.2.9', '< 6.0'
        # Your other pods here
      end

      target 'OneSignalNotificationServiceExtension' do
        pod 'OneSignal/OneSignal', '>= 5.2.9', '< 6.0'
      end
    ```

    Adicione as dependências ao seu main app target e OneSignalNotificationServiceExtension target. Se `platform` estiver descomentado, certifique-se de que é o mesmo valor do minimum deployment target no Xcode.

    Execute o seguinte comando para baixar o pod do OneSignal iOS SDK e adicioná-lo ao seu projeto:

    `pod repo update && pod install`

    Uma vez que a instalação estiver completa, certifique-se de abrir o arquivo *XCWorkspace* nomeado após seu projeto (ex.: `<project-name>.xcworkspace`)

    <Note>
      Ao usar o pod do OneSignal iOS SDK, você deve usar exclusivamente o arquivo `.xcworkspace` para abrir o projeto.
    </Note>

    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é agora, o lançamento mais recente do `xcodeproj` não reconhece object version 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 até o arquivo `ios/<your-app>.xcodeproj/project.pbxproj` do seu projeto.
      3. Altere esta linha: `objectVersion = 70;`
      4. Substitua por: `objectVersion = 55;`
      5. Salve, feche e execute novamente `cd ios pod install cd ..`
    </Accordion>
  </Tab>
</Tabs>

### 2. Inicializar SDK

Dependendo da configuração de interface do seu Xcode, inicialize o OneSignal seguindo estas opções.

<Tabs>
  <Tab title="SwiftUI">
    Se estiver usando interface SwiftUI, navegue até seu arquivo `<APP_NAME>App.swift` e inicialize o OneSignal com os métodos fornecidos.

    Substitua `YOUR_APP_ID` pelo seu App ID do OneSignal encontrado no painel do OneSignal **Settings > [Keys & IDs](./keys-and-ids)**. Se você não tem acesso ao aplicativo OneSignal, peça aos seus [Team Members](./manage-team-members) para convidá-lo.

    <CodeGroup>
      ```swift Swift theme={null}
      import SwiftUI
      import OneSignalFramework

      @main
      struct YOURAPP_NAME: App {
        //Connect the SwiftUI app to the UIKit app delegate
          @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

          var body: some Scene {
              WindowGroup {
                  ContentView()
              }
          }
      }

      class AppDelegate: NSObject, UIApplicationDelegate {
          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {

             // Habilite log detalhado para debugging (remova em produção)
             OneSignal.Debug.setLogLevel(.LL_VERBOSE)
             // Inicialize com seu OneSignal App ID
             OneSignal.initialize("YOUR_APP_ID", withLaunchOptions: launchOptions)
             // Use este método para solicitar notificações push.
             // Recomendamos remover este método após testes e, em vez disso, usar mensagens no aplicativo para solicitar permissão de notificação.
             OneSignal.Notifications.requestPermission({ accepted in
               print("User accepted notifications: \(accepted)")
             }, fallbackToSettings: false)

             return true
          }
      }
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Storyboard">
    Se estiver usando interface Storyboard, navegue até seu arquivo AppDelegate e inicialize o OneSignal com os métodos fornecidos.

    Substitua `YOUR_APP_ID` pelo seu App ID do OneSignal encontrado no painel do OneSignal **Settings > [Keys & IDs](./keys-and-ids)**. Se você não tem acesso ao aplicativo OneSignal, peça aos seus [Team Members](./manage-team-members) para convidá-lo.

    <CodeGroup>
      ```swift Swift theme={null}
      //AppDelegate.swift
      import UIKit
      import OneSignalFramework

      @UIApplicationMain
      class AppDelegate: UIResponder, UIApplicationDelegate {

      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
      [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // Habilite log detalhado para debugging (remova em produção)
        OneSignal.Debug.setLogLevel(.LL_VERBOSE)
        // Inicialize com seu OneSignal App ID
        OneSignal.initialize("YOUR_APP_ID", withLaunchOptions: launchOptions)

        // Use este método para solicitar notificações push.
        // Recomendamos remover este método após testes e, em vez disso, usar mensagens no aplicativo para solicitar permissão de notificação.
        OneSignal.Notifications.requestPermission({ accepted in
          print("User accepted notifications: \(accepted)")
        }, fallbackToSettings: false)


        return true
      }

      // Conteúdo restante da sua classe AppDelegate...
      }
      ```

      ```objc Objective-C theme={null}
      #import <OneSignalFramework/OneSignalFramework.h>

      @implementation AppDelegate

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        // Habilite log detalhado para debugging (remova em produção)
        [OneSignal.Debug setLogLevel:ONE_S_LL_VERBOSE];
        // Inicialize com seu OneSignal App ID
        [OneSignal initialize:@"YOUR_APP_ID" withLaunchOptions:launchOptions];
        // Use este método para solicitar notificações push.
        // Recomendamos remover este método após testes e, em vez disso, usar mensagens no aplicativo para solicitar permissão de notificação.
        [OneSignal.Notifications requestPermission:^(BOOL accepted) {
          NSLog(@"User accepted notifications: %d", accepted);
        } fallbackToSettings:false];

        // Faça login do seu cliente com externalId
        // [OneSignal login:@"EXTERNAL_ID"];

        return YES;
      }
      ```
    </CodeGroup>
  </Tab>
</Tabs>

***

## Testando a integração do OneSignal SDK

Este guia ajuda você a verificar se a integração do OneSignal SDK está funcionando corretamente testando notificações push, registro de assinatura e mensagens no aplicativo.

### Verificar assinaturas mobile

<Steps>
  <Step title="Inicie seu aplicativo 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 do iOS e Android">
      <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/a90c2cc443f5fe9e7c80368c680a16cf1ca6203f7b28a0a6eec212add8510f80-Untitled_design_11.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=96dbf224b3ae93b3d814712cdc5416ba" width="1920" height="1080" data-path="images/docs/a90c2cc443f5fe9e7c80368c680a16cf1ca6203f7b28a0a6eec212add8510f80-Untitled_design_11.png" />
    </Frame>
  </Step>

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

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

    <Frame caption="Painel mostrando assinatura com status 'Never Subscribed'">
      <img src="https://mintcdn.com/onesignal/Xl2NHJvxakrK4JbL/images/docs/f19fa5ada3572ce14447bb5639744e9da75cd7a3ab43ecc1a057f2ed92b38e6f-Screenshot_2025-03-16_at_14.55.39.png?fit=max&auto=format&n=Xl2NHJvxakrK4JbL&q=85&s=b04ca3217e22155841b500a55c7f1511" width="1588" height="976" data-path="images/docs/f19fa5ada3572ce14447bb5639744e9da75cd7a3ab43ecc1a057f2ed92b38e6f-Screenshot_2025-03-16_at_14.55.39.png" />
    </Frame>
  </Step>

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

  <Step title="Atualize a página de Subscriptions do painel OneSignal.">
    O status da assinatura agora deve mostrar **Subscribed**.

    <Frame caption="Painel mostrando assinatura com status 'Subscribed'">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/85b0376cdcc6f93fb7b3895b18cd1788d2342776d7995909881e5c64dd40fb62-Screenshot_2025-03-16_at_15.57.34.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=c6abec64d102b84e30f6c9c0327808ef" width="1588" height="976" data-path="images/docs/85b0376cdcc6f93fb7b3895b18cd1788d2342776d7995909881e5c64dd40fb62-Screenshot_2025-03-16_at_15.57.34.png" />
    </Frame>

    <Check>Você criou com sucesso uma [assinatura mobile](/docs/en/subscriptions).
    Assinaturas mobile são criadas quando usuários abrem seu aplicativo pela primeira vez em um dispositivo ou se eles desinstalarem e reinstalarem seu aplicativo no mesmo dispositivo.</Check>
  </Step>
</Steps>

### Configurar assinaturas de teste

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

<Steps>
  <Step title="Adicionar a Test Users.">
    No painel, ao lado da assinatura, 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://mintcdn.com/onesignal/NCUI56Tiw7V-s0dT/images/dashboard/add-to-test-subscriptions.png?fit=max&auto=format&n=NCUI56Tiw7V-s0dT&q=85&s=2455d4cd74ea4ad686f76730cd95bbaa" width="1188" height="742" data-path="images/dashboard/add-to-test-subscriptions.png" />
    </Frame>
  </Step>

  <Step title="Nomeie sua assinatura.">
    Nomeie a assinatura para que você possa identificar facilmente seu dispositivo mais tarde 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 mais tarde).
  </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://mintcdn.com/onesignal/NCUI56Tiw7V-s0dT/images/dashboard/create-test-users-segment.png?fit=max&auto=format&n=NCUI56Tiw7V-s0dT&q=85&s=91b8a021be6e83662854e68ec3e1da04" width="1188" height="742" data-path="images/dashboard/create-test-users-segment.png" />
    </Frame>

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

### Enviar push de teste via API

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

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

    ```curl 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 confirmed receipt.">
    Se todos os passos de configuração foram concluídos com sucesso, as assinaturas 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://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/e4e3e812eb6841ff11795a6ee0ea36eff483920ea9266733d6948ed34df3def3-Untitled_design_9.png?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=9bf6f4a73e38ec424b8cfec75a474a26" width="1200" height="800" data-path="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 confirmed receipt.">
    No seu painel, vá para **Delivery > Sent Messages**, depois clique na mensagem para ver estatísticas.

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

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

### Enviar uma mensagem no aplicativo

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

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

  <Step title="Crie uma mensagem no aplicativo.">
    * No seu painel OneSignal, navegue até **Messages > In-App > New In-App**.
    * Encontre e selecione a mensagem **Welcome**.
    * Defina seu Audience como o segmento **Test Users** que usamos anteriormente.

    <Frame caption="Segmentando o segmento 'Test Users' com uma mensagem no aplicativo">
      <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/2979dfb2c6e0711669ebe737d78d975dcfed9f8117bdd68846255b9fc91e4771-Screenshot_2025-03-17_at_14.56.23.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=f705ee679a9248dab378305e15fa24bf" width="1410" height="752" data-path="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 no aplicativo">
      <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/4c511ebdb04f33055556b9969bab8deee0d62154573cf0b41ffb25cc8431e7c0-Screenshot_2025-03-17_at_14.59.37.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=6134cc70e578d1055f770edcbad47efb" width="1646" height="1070" data-path="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 a 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 no aplicativo">
      <img src="https://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/c48ccaf33a74d5aa442c768a18b8e642024b89305aae665d613aee1d8bde43ec-Screenshot_2025-03-17_at_15.00.40.png?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=9a57431acffa267d22af4e19052fb5ee" width="1646" height="1070" data-path="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 ela esteja disponível para seus Test Users cada vez que eles abrirem o aplicativo.
  </Step>

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

    <Frame caption="Mensagem Welcome no aplicativo mostrada em dispositivos">
      <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/a7ed4bb02be56900a65d2519e3d69f9c9b2c2a1c65fe740f07789e4ffe79cd67-Untitled_design_10.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=6f692b569706ca39df0b4cc2b70f3de2" width="1920" height="1080" data-path="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 o aplicativo em segundo plano por pelo menos 30 segundos antes de reabrir. Isso garante que uma nova sessão seja iniciada.
        * Para mais informações, consulte [como mensagens no aplicativo são exibidas](/docs/en/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 às [Test Users](#set-up-test-users) e confirme que ele faz parte do segmento Test Users.
      * Tendo problemas?
        * Siga [Obtendo um Debug Log](/docs/en/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 [Assinaturas](/docs/en/subscriptions), definir [Assinaturas de teste](/docs/en/find-set-test-subscriptions) e criar [Segmentos](/docs/en/segmentation).
  * Enviar [Push](/docs/en/push) com imagens e [Confirmed receipt](/docs/en/confirmed-delivery) usando Segmentos e nossa API [Create message](/reference/create-message).
  * Enviar [Mensagens no aplicativo](/docs/en/in-app-messages-setup).

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

***

## Identificação de usuário

Anteriormente, demonstramos como criar [Assinaturas](/docs/en/subscriptions) mobile. Agora vamos expandir para identificar [Usuários](/docs/en/users) através de todas as suas assinaturas (incluindo push, email e SMS) usando o OneSignal SDK. Vamos cobrir External IDs, tags, assinaturas multicanal, privacidade e rastreamento de eventos para ajudá-lo a unificar e engajar usuários através de plataformas.

### Atribuir 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/en/integrations)).

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

<Note>
  O OneSignal gera IDs únicos somente leitura para assinaturas (Subscription ID) e usuários (OneSignal ID).

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

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

### Adicionar tags de dados

[Tags](/docs/en/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 do usuário). Tags alimentam [Personalização de mensagens](/docs/en/message-personalization) e [Segmentação](/docs/en/segmentation) avançadas permitindo casos de uso mais avançados.

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

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://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/d4674261847231079fecc176ba88065409c90943e3854b9df200457325a0aed4-Screenshot_2025-03-18_at_14.47.25.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=91083bf83a4c03ea40d485b23f072259" width="1380" height="941" data-path="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 direcionando usuários com um valor de current_level maior que 4 e menor que 10">
  <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/300d36b632a6f6d7017780457bbe2610b71767fd0db093c7611e59714dcbda5b-Screenshot_2025-03-18_at_14.49.56.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=b84ab0d2c6eedbd6d4e7a2bf15afe103" width="1380" height="941" data-path="images/docs/300d36b632a6f6d7017780457bbe2610b71767fd0db093c7611e59714dcbda5b-Screenshot_2025-03-18_at_14.49.56.png" />
</Frame>

<br />

<Frame caption="Captura de tela mostrando uma notificação push direcionando o segmento Level 5-10 com uma mensagem personalizada">
  <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/97e09b42d25c6d3f4c7cb0a6fff4dfb8893cbb4b283f7ff1f77977c33113319c-Screenshot_2025-03-18_at_14.55.47.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=c7839b12057d65a12a4eaddce6e2c11f" width="2764" height="2286" data-path="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://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/3bf1810580f30984745017056383f151b874513b6bfb1445fb1016e5c9a79e82-Untitled_design_12.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=94b6e9eeeb5516285a256a72063a0906" width="1920" height="1080" data-path="images/docs/3bf1810580f30984745017056383f151b874513b6bfb1445fb1016e5c9a79e82-Untitled_design_12.png" />
</Frame>

### Adicionar assinaturas de email e/ou SMS

Anteriormente vimos como nosso SDK cria assinaturas mobile para enviar mensagens push e no aplicativo. Você também pode alcançar usuários através de canais de email e SMS criando as assinaturas correspondentes.

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

Se o endereço de email e/ou número de telefone já existir no aplicativo OneSignal, o SDK irá adicioná-lo ao usuário existente, não criará duplicatas.

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

<Frame caption="Um perfil de usuário com assinaturas push, email e SMS unificadas por External ID">
  <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b1cf9999d41da6e4ce333e1126612529b85eac47447bb0b434418d082f595acd-Screenshot_2025-03-18_at_14.43.46.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=7c3885b66e44e097fa0ed7c47f27c911" width="1506" height="848" data-path="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 assinaturas 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 os usuários possam selecionar quais canais eles preferem.
</Note>

***

### Privacidade e consentimento do usuário

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

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

Consulte nossos documentos de Privacidade & segurança para mais sobre:

* [Dados coletados pelo SDK](/docs/en/data-collected-by-the-onesignal-sdk)
* [Manipulação de dados pessoais](/docs/en/handling-personal-data)

***

## Solicitar permissões push

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

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

***

## Ouvir eventos de push, usuário e mensagens no aplicativo

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

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

### Eventos de notificação push

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

Para customização completa, consulte [Mobile Service Extensions](/docs/en/service-extensions).

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

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

### Eventos de mensagens no aplicativo

* [`addClickListener()`](/docs/en/mobile-sdk-reference#addclicklistener-in-app): Manipula ações de clique em mensagens no aplicativo. Ideal para deep linking ou rastreamento de eventos.
* [`addLifecycleListener()`](/docs/en/mobile-sdk-reference#addclicklistener-in-app): Rastreia o ciclo de vida completo de mensagens no aplicativo (mostradas, clicadas, dispensadas, etc.).

***

## Desativar o method swizzling (opcional)

Por padrão, o SDK do OneSignal usa method swizzling para lidar automaticamente com os métodos de delegado de notificação push. Se seu aplicativo precisar desativar o swizzling (por exemplo, para evitar conflitos com outros SDKs ou para manter controle total sobre os métodos de delegado de notificação), você pode optar por sair via `Info.plist`.

Quando o swizzling está desativado, você deve encaminhar manualmente os métodos de delegado de notificação para o SDK do OneSignal. Todos os outros recursos do SDK (listeners, observers, mensagens in-app, outcomes, etc.) continuam funcionando normalmente.

### Etapa 1. Adicionar o flag no Info.plist

Adicione o seguinte ao `Info.plist` do seu aplicativo:

```xml theme={null}
<key>OneSignal_disable_swizzling</key>
<true/>
```

Quando o SDK detecta esse flag, ele ignora todo o method swizzling na inicialização e registra um aviso lembrando você de implementar o encaminhamento manual.

### Etapa 2. Definir o delegado do UNUserNotificationCenter

Defina seu `AppDelegate` como delegado do `UNUserNotificationCenter` **antes** de chamar `OneSignal.initialize`. Sem isso, a exibição de notificações em primeiro plano e o tratamento de toques em notificações não funcionarão.

<CodeGroup>
  ```swift Swift theme={null}
  // In application(_:didFinishLaunchingWithOptions:), BEFORE OneSignal.initialize()
  UNUserNotificationCenter.current().delegate = self
  ```

  ```objc Objective-C theme={null}
  // In application:didFinishLaunchingWithOptions:, BEFORE [OneSignal initialize:]
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  ```
</CodeGroup>

### Etapa 3. Encaminhar métodos de delegado de notificação

Implemente os seguintes métodos no seu `AppDelegate`. Todos os métodos são chamados por meio de `OneSignal.Notifications`.

**Registro de token:**

<CodeGroup>
  ```swift Swift theme={null}
  func application(_ application: UIApplication,
                   didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
      OneSignal.Notifications.didRegisterForRemoteNotifications(application, deviceToken: deviceToken)
  }

  func application(_ application: UIApplication,
                   didFailToRegisterForRemoteNotificationsWithError error: Error) {
      OneSignal.Notifications.handleDidFailRegisterForRemoteNotification(error as NSError)
  }
  ```

  ```objc Objective-C theme={null}
  - (void)application:(UIApplication *)application
      didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      [OneSignal.Notifications didRegisterForRemoteNotifications:application deviceToken:deviceToken];
  }

  - (void)application:(UIApplication *)application
      didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
      [OneSignal.Notifications handleDidFailRegisterForRemoteNotification:error];
  }
  ```
</CodeGroup>

**Notificações em segundo plano / silenciosas:**

<CodeGroup>
  ```swift Swift theme={null}
  func application(_ application: UIApplication,
                   didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                   fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
      OneSignal.Notifications.receiveRemoteNotification(application,
                                                        userInfo: userInfo,
                                                        completionHandler: completionHandler)
  }
  ```

  ```objc Objective-C theme={null}
  - (void)application:(UIApplication *)application
      didReceiveRemoteNotification:(NSDictionary *)userInfo
      fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
      [OneSignal.Notifications receiveRemoteNotification:application
                                                UserInfo:userInfo
                                       completionHandler:completionHandler];
  }
  ```
</CodeGroup>

**Exibição de notificações em primeiro plano:**

O SDK chama seu completion block com um objeto `OSNotification`. Se não for nil, o SDK quer que a notificação seja exibida — passe suas opções de apresentação preferidas. Se for nil (por exemplo, uma pré-visualização do IAM), não passe opções de apresentação.

<CodeGroup>
  ```swift Swift theme={null}
  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              willPresent notification: UNNotification,
                              withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
      OneSignal.Notifications.handleWillPresentNotificationInForeground(
          withPayload: notification.request.content.userInfo
      ) { notif in
          if notif != nil {
              if #available(iOS 14.0, *) {
                  completionHandler([.banner, .list, .sound])
              } else {
                  completionHandler([.alert, .sound])
              }
          } else {
              completionHandler([])
          }
      }
  }
  ```

  ```objc Objective-C theme={null}
  - (void)userNotificationCenter:(UNUserNotificationCenter *)center
         willPresentNotification:(UNNotification *)notification
           withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
      [OneSignal.Notifications
          handleWillPresentNotificationInForegroundWithPayload:notification.request.content.userInfo
          withCompletion:^(OSNotification *notif) {
              if (notif) {
                  if (@available(iOS 14.0, *)) {
                      completionHandler(UNNotificationPresentationOptionBanner |
                                        UNNotificationPresentationOptionList |
                                        UNNotificationPresentationOptionSound);
                  } else {
                      completionHandler(UNNotificationPresentationOptionAlert |
                                        UNNotificationPresentationOptionSound);
                  }
              } else {
                  completionHandler(UNNotificationPresentationOptionNone);
              }
          }];
  }
  ```
</CodeGroup>

<Note>
  O listener de ciclo de vida `onWillDisplayNotification` e as APIs `preventDefault` / `display` continuam funcionando com o encaminhamento manual. O SDK invoca seus listeners a partir de `handleWillPresentNotificationInForegroundWithPayload`.
</Note>

**Toque / ação na notificação:**

<CodeGroup>
  ```swift Swift theme={null}
  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
      OneSignal.Notifications.handleNotificationResponse(response)
      completionHandler()
  }
  ```

  ```objc Objective-C theme={null}
  - (void)userNotificationCenter:(UNUserNotificationCenter *)center
      didReceiveNotificationResponse:(UNNotificationResponse *)response
               withCompletionHandler:(void (^)(void))completionHandler {
      [OneSignal.Notifications handleNotificationResponse:response];
      completionHandler();
  }
  ```
</CodeGroup>

### Opcional: Definir contagem de badges

Quando o swizzling está desativado, o SDK não pode interceptar alterações de badge. Use este método para definir a contagem de badges e manter o cache interno de badges do OneSignal sincronizado:

<CodeGroup>
  ```swift Swift theme={null}
  OneSignal.Notifications.setBadgeCount(5)
  ```

  ```objc Objective-C theme={null}
  [OneSignal.Notifications setBadgeCount:5];
  ```
</CodeGroup>

### Aplicativos SwiftUI

Aplicativos SwiftUI não têm um `AppDelegate` por padrão. Use `@UIApplicationDelegateAdaptor` para adicionar um e, em seguida, implemente todos os métodos de encaminhamento mostrados acima:

```swift Swift theme={null}
@main
struct YourApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate {
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        OneSignal.initialize("YOUR_APP_ID", withLaunchOptions: launchOptions)
        return true
    }

    // Implement all the forwarding methods shown above
}
```

### Referência da API

| Método                                                                    | Propósito                                                          |
| ------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| `didRegisterForRemoteNotifications(_:deviceToken:)`                       | Encaminhar o token de dispositivo APNs para o OneSignal            |
| `handleDidFailRegisterForRemoteNotification(_:)`                          | Encaminhar falha de registro do APNs                               |
| `receiveRemoteNotification(_:userInfo:completionHandler:)`                | Encaminhar notificações em segundo plano/silenciosas               |
| `handleWillPresentNotificationInForegroundWithPayload(_:withCompletion:)` | Encaminhar notificação em primeiro plano para processamento do SDK |
| `handleNotificationResponse(_:)`                                          | Encaminhar toque/ação de notificação para o SDK                    |
| `setBadgeCount(_:)`                                                       | Definir contagem de badges e sincronizar com o cache do SDK        |

***

## Configuração avançada e capacidades

Explore mais capacidades para aprimorar sua integração:

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

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

Certifique-se de ter habilitado todos os recursos principais revisando o guia de [Configuração de push mobile](/docs/en/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/en/mobile-sdk-reference).

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

***

<Info>
  Need help?

  Chat with our Support team or email `support@onesignal.com`

  Please include:

  * Details of the issue you're experiencing and steps to reproduce if available
  * Your OneSignal App ID
  * The External ID or Subscription ID if applicable
  * The URL to the message you tested in the OneSignal Dashboard if applicable
  * Any relevant [logs or error messages](/docs/en/capturing-a-debug-log)

  We're happy to help!
</Info>

***
