# Guia de integração básica do SDK do Unity

Este guia orienta você na integração do SDK do Pushwoosh para Unity em seu aplicativo.

## Pré-requisitos

<Aside type="note" title="Requisitos">
 - Uma [conta Pushwoosh](https://sso.pushwoosh.com/login).
 - Um [projeto Pushwoosh](/pt/product/first-steps/start-with-your-project/create-your-project) configurado em sua conta.
 - Unity 2021.3 ou posterior.
 - **Para iOS:**
    - Uma plataforma iOS configurada para enviar notificações push. Recomendamos o uso da [Autenticação Baseada em Token](/pt/developer/first-steps/connect-messaging-services/ios-configuration/ios-token-based-configuration/) como a abordagem mais simples.
    - Defina o Gateway como `Sandbox` para enviar pushes para um simulador.
 - **Para Android:**
    - Uma [plataforma Android configurada](/pt/developer/first-steps/connect-messaging-services/android-configuration/android-firebase-configuration).
    - O `número do projeto` (também conhecido como Sender ID), o arquivo `google-services.json` e o `nome do pacote` do seu projeto Firebase.
    - Um projeto Firebase conectado ao seu aplicativo Android. Siga o [guia de configuração do Firebase](https://firebase.google.com/docs/android/setup#manually_add_firebase) se necessário.
 - Seu `Código de Aplicativo Pushwoosh` e [Token de API de Dispositivo Pushwoosh](/pt/developer/api-reference/api-access-token/#device-api-token) do Painel de Controle Pushwoosh.
</Aside>

## Passos de integração

### 1. Adicionar o SDK do Pushwoosh para Unity

<Tabs>
  <TabItem label="UPM via Scoped Registry (recomendado)">

Adicione o seguinte ao seu `Packages/manifest.json`:

```json title="Packages/manifest.json"
{
  "dependencies": {
    "com.pushwoosh.unity.core": "6.2.7",
    "com.pushwoosh.unity.android": "6.2.7",
    "com.pushwoosh.unity.ios": "6.2.7"
  },
  "scopedRegistries": [
    {
      "name": "npmjs",
      "url": "https://registry.npmjs.org",
      "scopes": ["com.pushwoosh"]
    }
  ]
}
```

Adicione apenas os pacotes de plataforma que você precisa. Por exemplo, omita `com.pushwoosh.unity.android` se você visa apenas o iOS.

  </TabItem>
  <TabItem label="UPM via Git URL">

No Unity, vá para **Window > Package Manager > + > Add package from git URL** e adicione as seguintes URLs uma por uma:

```
https://github.com/Pushwoosh/pushwoosh-unity.git?path=com.pushwoosh.unity.core
https://github.com/Pushwoosh/pushwoosh-unity.git?path=com.pushwoosh.unity.android
https://github.com/Pushwoosh/pushwoosh-unity.git?path=com.pushwoosh.unity.ios
```

  </TabItem>
  <TabItem label=".unitypackage">

Baixe o `Pushwoosh.unitypackage` dos [Lançamentos do GitHub](https://github.com/Pushwoosh/pushwoosh-unity/releases) e importe via **Assets > Import Package > Custom Package**.

  </TabItem>
</Tabs>

### 2. Instalar o External Dependency Manager

O SDK requer o [External Dependency Manager for Unity (EDM4U)](https://github.com/googlesamples/unity-jar-resolver) para resolver as dependências nativas do Android e iOS.

Adicione o seguinte registro com escopo ao seu `Packages/manifest.json`:

```json
{
  "scopedRegistries": [
    {
      "name": "package.openupm.com",
      "url": "https://package.openupm.com",
      "scopes": ["com.google.external-dependency-manager"]
    }
  ]
}
```

Em seguida, adicione o pacote às suas dependências:

```json
"com.google.external-dependency-manager": "1.2.183"
```

### 3. Inicializar o SDK

Crie um script `PushNotificator.cs` e anexe-o a qualquer GameObject na cena:

```csharp title="PushNotificator.cs"
using UnityEngine;
using System.Collections.Generic;

public class PushNotificator : MonoBehaviour
{
    void Start()
    {
        Pushwoosh.ApplicationCode = "XXXXX-XXXXX";
        Pushwoosh.FcmProjectNumber = "XXXXXXXXXXXX";

        Pushwoosh.Instance.OnRegisteredForPushNotifications += (token) => {
            Debug.Log("Push token: " + token);
        };

        Pushwoosh.Instance.OnFailedToRegisteredForPushNotifications += (error) => {
            Debug.Log("Registration failed: " + error);
        };

        Pushwoosh.Instance.RegisterForPushNotifications();
    }
}
```

Substitua:
- `XXXXX-XXXXX` pelo seu Código de Aplicativo Pushwoosh.
- `XXXXXXXXXXXX` pelo número do seu projeto Firebase (apenas Android).

### 4. Configuração nativa do iOS

#### 4.1 Capabilities

Após construir o projeto iOS a partir do Unity, abra o projeto Xcode gerado e adicione as seguintes capabilities em **Signing & Capabilities**:

- **Push Notifications**
- **Background Modes** com **Remote notifications** marcado

Para Time Sensitive Notifications (iOS 15+), adicione também a capability **Time Sensitive Notifications**.

#### 4.2 Info.plist

Adicione o [Token de API de Dispositivo Pushwoosh](/pt/developer/api-reference/api-access-token/#device-api-token) ao seu `Info.plist`:

```xml title="Info.plist"
<key>Pushwoosh_API_TOKEN</key>
<string>__PUSHWOOSH_DEVICE_API_TOKEN__</string>
```

#### 4.3 Rastreamento de entrega de mensagens

Adicione um alvo de Notification Service Extension ao seu projeto Xcode. Isso é necessário para o rastreamento preciso da entrega e Rich Media no iOS.

Siga o [guia nativo](/pt/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#4-message-delivery-tracking) para adicionar o alvo da extensão.

### 5. Configuração nativa do Android

#### 5.1 Adicionar arquivo de configuração do Firebase

Coloque o arquivo `google-services.json` no diretório **Assets** do seu projeto Unity.

#### 5.2 Adicionar metadados do Pushwoosh

Adicione o [Token de API de Dispositivo Pushwoosh](/pt/developer/api-reference/api-access-token/#device-api-token) ao seu `Assets/Plugins/Android/AndroidManifest.xml` dentro da tag `<application>`:

```xml title="AndroidManifest.xml"
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />
```

<Aside type="caution">
Certifique-se de dar ao token acesso ao aplicativo correto em seu Painel de Controle Pushwoosh. [Saiba mais](/pt/developer/api-reference/api-access-token/#edit-token)
</Aside>

### 6. Executar o projeto

1. Compile e execute o projeto na sua plataforma de destino.
2. Conceda permissão para notificações push quando solicitado.
3. Vá para o Painel de Controle Pushwoosh e [envie uma notificação push](/pt/product/messaging-channels/push-notifications/send-push-notifications/one-time-push).

## Integração estendida

Nesta fase, você pode enviar e receber notificações push. As seções abaixo cobrem a funcionalidade principal do SDK.

### Listeners de eventos de notificação push

O SDK fornece dois listeners de eventos para lidar com notificações push:

- `OnPushNotificationsReceived` — acionado quando uma notificação push chega
- `OnPushNotificationsOpened` — acionado quando um usuário toca em uma notificação

Configure esses listeners durante a inicialização do SDK:

```csharp title="PushNotificator.cs"
void Start()
{
    Pushwoosh.ApplicationCode = "XXXXX-XXXXX";
    Pushwoosh.FcmProjectNumber = "XXXXXXXXXXXX";

    Pushwoosh.Instance.OnPushNotificationsReceived += (payload) => {
        Debug.Log("Push received: " + payload);
    };

    Pushwoosh.Instance.OnPushNotificationsOpened += (payload) => {
        Debug.Log("Push opened: " + payload);
    };

    Pushwoosh.Instance.RegisterForPushNotifications();
}
```

### Configuração do usuário

Personalize as notificações push identificando usuários e definindo suas propriedades:

```csharp
// Define o ID do usuário para rastreamento entre dispositivos
Pushwoosh.Instance.SetUserId("user-123");

// Define o e-mail do usuário
Pushwoosh.Instance.SetEmail("user@example.com");

// Define o usuário com ID e e-mail
Pushwoosh.Instance.SetUser("user-123", new List<string> { "user@example.com" });

// Define o idioma preferido
Pushwoosh.Instance.SetLanguage("en");
```

### Tags

Tags são pares de chave-valor atribuídos a dispositivos, permitindo a segmentação de usuários e o envio de mensagens direcionadas:

```csharp
// Tag de string
Pushwoosh.Instance.SetStringTag("favorite_category", "electronics");

// Tag de inteiro
Pushwoosh.Instance.SetIntTag("purchase_count", 5);

// Tag de lista
Pushwoosh.Instance.SetListTag("interests", new List<object> { "sports", "music", "tech" });

// Obter todas as tags
Pushwoosh.Instance.GetTags((tags, error) => {
    if (error != null) {
        Debug.Log("Error: " + error.Message);
        return;
    }
    foreach (var tag in tags) {
        Debug.Log(tag.Key + ": " + tag.Value);
    }
});
```

### Eventos

Rastreie as ações do usuário para analisar o comportamento e acionar mensagens automatizadas:

```csharp
// Rastreia um evento de login
Pushwoosh.Instance.PostEvent("login", new Dictionary<string, object> {
    { "username", "user-123" },
    { "login_type", "email" }
});

// Rastreia um evento de compra
Pushwoosh.Instance.PostEvent("purchase", new Dictionary<string, object> {
    { "product_id", "SKU-001" },
    { "price", 29.99 },
    { "currency", "USD" }
});
```

### Preferências de comunicação

Permita que os usuários optem por receber ou não notificações push programaticamente:

```csharp
// Habilita a comunicação
Pushwoosh.Instance.SetCommunicationEnabled(true);

// Desabilita a comunicação
Pushwoosh.Instance.SetCommunicationEnabled(false);

// Verifica o estado atual
bool isEnabled = Pushwoosh.Instance.IsCommunicationEnabled();
```

### Gerenciamento de emblemas

Controle o número do emblema do aplicativo nas plataformas suportadas:

```csharp
// Define o emblema para um número específico
Pushwoosh.Instance.SetBadgeNumber(3);

// Incrementa o emblema
Pushwoosh.Instance.AddBadgeNumber(1);

// Limpa o emblema
Pushwoosh.Instance.SetBadgeNumber(0);
```

## Solução de problemas

Se você encontrar algum problema durante o processo de integração, consulte a seção de [suporte e comunidade](/pt/developer/pushwoosh-sdk/support-and-community).