# FAQ do SDK para iOS

### FAQ de integração com iOS

#### P: Como posso instalar o SDK da Pushwoosh no meu projeto iOS?
Você pode integrar o SDK da Pushwoosh usando o Swift Package Manager ou o CocoaPods.

#### P: Como instalo o SDK da Pushwoosh usando o Swift Package Manager?
No Xcode, navegue até a seção **Package Dependencies** e adicione o pacote usando a seguinte URL: `https://github.com/Pushwoosh/Pushwoosh-XCFramework`.

#### P: Como instalo o SDK da Pushwoosh usando o CocoaPods?
Abra o `Podfile` do seu projeto e adicione a linha `pod 'PushwooshXCFramework'`. Em seguida, execute o comando `pod install` no terminal.

#### P: Quais capabilities preciso adicionar ao meu projeto para habilitar as Notificações Push?
Na seção Signing & Capabilities das configurações do seu projeto, você precisa adicionar as capabilities `Push Notifications` e `Background Modes`. Ao adicionar `Background Modes`, certifique-se de marcar a caixa para `Remote notifications`.

#### P: Qual capability adicional é necessária para Time Sensitive Notifications (Notificações Sensíveis ao Tempo)?
Se você pretende usar Time Sensitive Notifications (iOS 15+), também precisa adicionar a capability `Time Sensitive Notifications`.

#### P: Onde preciso adicionar o código de inicialização da Pushwoosh?
O código de inicialização precisa ser adicionado à sua classe `AppDelegate`.

#### P: Qual código de inicialização devo adicionar no AppDelegate do SwiftUI?
Consulte o [exemplo de código Swift fornecido para integrar a Pushwoosh em um projeto SwiftUI](/pt/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate).

#### P: Qual código de inicialização devo adicionar em um AppDelegate Swift padrão?
Consulte o [exemplo de código Swift fornecido para integrar a Pushwoosh em um projeto Swift padrão](/pt/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate).

#### P: Qual código de inicialização devo adicionar em um AppDelegate Objective-C?
Consulte o [exemplo de código Objective-C fornecido para integrar a Pushwoosh em um projeto Objective-C](/pt/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#appdelegate).

#### P: Quais chaves preciso adicionar ao meu arquivo Info.plist?
Você precisa adicionar a chave `Pushwoosh_APPID` definida com o seu Código de Aplicativo e a chave `PW_API_TOKEN` definida com o seu Token de API no arquivo `Info.plist` do seu aplicativo.

#### P: Qual é o propósito do rastreamento de entrega de mensagens?
A Pushwoosh suporta o rastreamento de eventos de entrega para notificações push usando a Notification Service Extension.

#### P: Como adiciono uma Notification Service Extension ao meu projeto?
No Xcode, vá para **File** > **New** > **Target...**, escolha **Notification Service Extension** e pressione **Next**. Insira um nome para o target e pressione **Finish**. Quando solicitado para ativar, pressione **Cancel**.

#### P: Como adiciono o SDK da Pushwoosh à Notification Service Extension?
Adicione o [trecho de código Swift ou Objective-C fornecido](/pt/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#add-pushwoosh-sdk-to-notification-service-extension) ao arquivo principal `.swift` ou `.m` da sua Notification Service Extension. Este código utiliza o `PWNotificationExtensionManager` para lidar com a solicitação de notificação.

#### P: Qual é o propósito dos App Groups?
A capability App Groups é necessária para permitir que a Notification Service Extension se comunique com o aplicativo principal.

#### P: Como habilito os App Groups para o meu target principal e para a Notification Service Extension?
Para ambos os targets, vá para **Signing & Capabilities**, adicione a capability **App Groups** e crie um novo grupo pressionando o botão +. Certifique-se de que o nome do grupo comece com `group.` e use o mesmo nome de grupo para ambos os targets.

#### P: Quais chaves preciso adicionar ao Info.plist do meu target principal para os App Groups?
No `Info.plist` do seu target principal, adicione a chave `PW_APP_GROUPS_NAME` e defina seu valor para o nome do seu grupo de App Groups.

#### P: Quais chaves preciso adicionar ao Info.plist da minha Notification Service Extension?
No `Info.plist` da sua Notification Service Extension, adicione a chave `PW_APP_GROUPS_NAME` (definida com o nome do seu grupo de App Groups) e a chave `Pushwoosh_APPID` (definida com o seu Código de Aplicativo).

#### P: Como verifico a integração da Pushwoosh?
Após compilar e executar seu projeto, vá para o Painel de Controle da Pushwoosh e envie uma notificação push para o seu aplicativo. Você deve ver a notificação aparecer no seu dispositivo.

#### P: Quais são os dois callbacks principais para lidar com notificações push no SDK da Pushwoosh?
Os dois callbacks principais são `onMessageReceived` e `onMessageOpened`.

#### P: Quando o callback `onMessageReceived` é invocado?
O método `onMessageReceived` é chamado quando uma notificação push é recebida pelo aplicativo.

#### P: Quando o callback `onMessageOpened` é invocado?
O método `onMessageOpened` é chamado quando o usuário interage e abre uma notificação push.

#### P: Como posso acessar o payload de uma notificação push recebida ou aberta?
O payload de um objeto `PWMessage` (passado para os callbacks `onMessageReceived` e `onMessageOpened`) pode ser acessado através de sua propriedade `payload`.

#### P: Como posso definir um ID de usuário na Pushwoosh?
Use o método `setUserId(_:)` do objeto `Pushwoosh.sharedInstance()`, passando o ID do usuário como argumento.

#### P: Como posso definir o endereço de e-mail de um usuário na Pushwoosh?
Use o método `setEmail(_:)` do objeto `Pushwoosh.sharedInstance()`, fornecendo o e-mail do usuário.

#### Como posso definir informações adicionais do usuário como tags na Pushwoosh?
Use o método `setTags(_:)` do objeto `Pushwoosh.sharedInstance()`, passando um dicionário onde as chaves são os nomes das tags e os valores são os valores correspondentes das tags.

#### Como posso rastrear um evento de usuário com atributos adicionais?**
Use o método `postEvent(_:withAttributes:)` do `PWInAppManager.shared()`, fornecendo o nome do evento (por exemplo, `"login"`) e um dicionário de atributos (por exemplo, `"name"`, `"last_login"`).

#### P: Como posso rastrear um evento de compra de usuário com detalhes do produto?
Use o método `postEvent(_:withAttributes:)` do `PWInAppManager.shared()` com o nome do evento `"purchase"` e um dicionário contendo detalhes do produto como `"product_id"`, `"product_name"`, `"price"` e `"quantity"`.

#### P: Como configuro um delegate para lidar com a apresentação de rich media?
No seu view controller ou em outra classe apropriada, conforme-se ao protocolo `PWRichMediaPresentingDelegate` e defina a propriedade `delegate` de `PWRichMediaManager.shared()` para a sua instância conformada.

#### P: Como posso configurar o estilo de apresentação de rich media?
Use o objeto `PWModalWindowConfiguration.shared()` para configurar propriedades como a posição da janela modal e as animações de apresentação/dispensa usando o método `configureModalWindow(with:present:dismiss:)`.

#### P: Quais informações posso acessar nos métodos do delegate de rich media?**
Os métodos do delegate fornecem acesso ao objeto `PWRichMedia`, que contém informações sobre o conteúdo de rich media, incluindo seu `pushPayload`. O método `presentingDidFailForRichMedia:withError:` também fornece um objeto `Error` descrevendo a falha.


### Solução de problemas

<Aside type="caution">
Para fins de balanceamento de carga, podemos precisar alterar os endpoints da API em seu aplicativo. Isso acontece automaticamente e é gerenciado pelo nosso SDK. **Certifique-se de que nada em seu aplicativo esteja bloqueando o acesso a qualquer URL que contenha \*.pushwoosh.com.**
</Aside>

<Aside type="note">
#### Se você estiver atrás de um Firewall ou se o seu roteador Wi-Fi atuar como um Firewall

Se o seu dispositivo estiver conectado à Internet via Wi-Fi e as mensagens não chegarem ao dispositivo, **certifique-se de que as portas APNs não estão bloqueadas pelo seu firewall.**\
Provedores de push, dispositivos iOS e computadores Mac geralmente estão atrás de firewalls. Para enviar notificações, você precisará permitir pacotes TCP de entrada e saída pela porta 2195. Dispositivos e computadores que se conectam ao serviço de push por **Wi-Fi precisarão permitir pacotes TCP de entrada e saída pela porta 5223.**\
O intervalo de endereços IP para o serviço de push pode mudar; espera-se que os provedores se conectem pelo nome do host em vez do endereço IP. O serviço de push usa um esquema de balanceamento de carga que resulta em um endereço IP diferente para o mesmo nome de host. No entanto, todo o bloco de endereços 17.0.0.0/8 é atribuído à Apple, então você pode especificar esse intervalo nas regras do seu firewall.
</Aside>

#### P: Erro "Your provisioning profile does not have APS entry"

Se você vir a mensagem de erro "Your provisioning profile does not have APS entry.", certifique-se de que seu perfil de provisionamento é compatível com push e possui a string `aps-environment` com o valor `production` ou `development`. A maneira mais fácil de verificar é abrir o perfil de provisionamento móvel em qualquer editor de texto e procurar pela string `aps-environment`. Ela deve estar lá.

Se estiver, e você continuar recebendo o erro, significa que o Xcode ainda está selecionando um perfil "não compatível com push". Por favor, certifique-se de que você está assinando com o correto - às vezes, se você tiver dois perfis para o mesmo App ID, o Xcode se confunde e assina com o antigo.

Os passos recomendados são:

1. [Remova](https://stackoverflow.com/questions/18923095/delete-provisioning-profile-from-xcode-5) todos os perfis do Xcode;
2. Adicione o único e novo perfil;
3. Recompile o aplicativo.

#### P: Qual é a aparência do push token e do hwid do iOS?

Os push tokens de dispositivos iOS são strings com 64 símbolos hexadecimais. Exemplo de push token:\
`03df25c845d460bcdad7802d2vf6fc1dfde97283bf75cc993eb6dca835ea2e2f`\
Certifique-se de que os push tokens do iOS que você usa ao direcionar dispositivos específicos em suas solicitações de API estejam em **letras minúsculas**.

A Pushwoosh usa o IDFV como o HWID do dispositivo. Note que ele pode mudar caso o usuário reinstale todos os aplicativos de um fornecedor específico.

`CBAF8ED1-17FB-49A3-73BD-DC79B63AEF93`

#### P: Como eu ativo e desativo o banner quando meu aplicativo está em execução?

Por padrão, nosso SDK mais recente para iOS exibe o banner de notificação quando o aplicativo está em execução em primeiro plano.\
Você pode controlar esse comportamento alterando as seguintes flags no Info.plist:

Flag `Pushwoosh_ALERT_TYPE` – tipo string, os valores são:

* `BANNER` – valor padrão, exibe um alerta de banner no aplicativo
* `ALERT` – notificação de alerta
* `NONE` – não mostrar notificações quando o aplicativo está em primeiro plano

#### P: Como obtenho o push token do meu dispositivo iOS para usar em Dispositivos de Teste?

Para obter o push token do seu dispositivo iOS,

1. Abra o Xcode => Devices & Simulators;
2. Conecte o dispositivo de teste ao seu computador;
3. Selecione seu dispositivo conectado na lista de dispositivos à esquerda;
4. Clique no botão Open Console.

<img src="/ios-push-notifications-ios-faq-1.webp" alt=""/>

Inicie o aplicativo para o qual você precisa do push token do dispositivo e localize seu push token de 64 caracteres hexadecimais na linha “Registered for push notifications”:

<img src="/ios-push-notifications-ios-faq-2.webp" alt=""/>

#### P: Por que os badges não são limpos depois que eu desinstalo e reinstalo meu aplicativo em um curto período?

Este é um comportamento esperado - os badges são gerenciados pelo próprio iOS e seus valores são armazenados nas preferências do aplicativo, que não são removidas instantaneamente quando você desinstala seu aplicativo. O valor de um badge permanece lá por algum tempo em caso de reinstalação imediata, resultando nos mesmos badges sendo exibidos após a reinstalação de um aplicativo.