# Guía de integración básica del SDK de Unity

Esta guía le guiará a través de la integración del SDK de Pushwoosh para Unity en su aplicación.

## Requisitos previos

<Aside type="note" title="Requisitos">
 - Una [cuenta de Pushwoosh](https://sso.pushwoosh.com/login).
 - Un [proyecto de Pushwoosh](/es/product/first-steps/start-with-your-project/create-your-project) configurado en su cuenta.
 - Unity 2021.3 o posterior.
 - **Para iOS:**
    - Una plataforma iOS configurada para enviar notificaciones push. Recomendamos usar la [Autenticación Basada en Token](/es/developer/first-steps/connect-messaging-services/ios-configuration/ios-token-based-configuration/) como el enfoque más simple.
    - Establezca la Puerta de Enlace (Gateway) en `Sandbox` para enviar pushes a un simulador.
 - **Para Android:**
    - Una [plataforma Android configurada](/es/developer/first-steps/connect-messaging-services/android-configuration/android-firebase-configuration).
    - El `número de proyecto` (también conocido como ID de remitente), el archivo `google-services.json` y el `nombre del paquete` de su proyecto de Firebase.
    - Un proyecto de Firebase conectado a su aplicación de Android. Siga la [guía de configuración de Firebase](https://firebase.google.com/docs/android/setup#manually_add_firebase) si es necesario.
 - Su `Código de Aplicación de Pushwoosh` y el [Token de API de Dispositivo de Pushwoosh](/es/developer/api-reference/api-access-token/#device-api-token) desde el Panel de Control de Pushwoosh.
</Aside>

## Pasos de integración

### 1. Añadir el SDK de Pushwoosh para Unity

<Tabs>
  <TabItem label="UPM a través de Scoped Registry (recomendado)">

Añada lo siguiente a su `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"]
    }
  ]
}
```

Añada solo los paquetes de la plataforma que necesite. Por ejemplo, omita `com.pushwoosh.unity.android` si solo se dirige a iOS.

  </TabItem>
  <TabItem label="UPM a través de URL de Git">

En Unity, vaya a **Window > Package Manager > + > Add package from git URL** y añada las siguientes URLs una por una:

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

Descargue `Pushwoosh.unitypackage` desde [GitHub Releases](https://github.com/Pushwoosh/pushwoosh-unity/releases) e impórtelo a través de **Assets > Import Package > Custom Package**.

  </TabItem>
</Tabs>

### 2. Instalar el External Dependency Manager

El SDK requiere el [External Dependency Manager for Unity (EDM4U)](https://github.com/googlesamples/unity-jar-resolver) para resolver las dependencias nativas de Android e iOS.

Añada el siguiente scoped registry a su `Packages/manifest.json`:

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

Luego añada el paquete a sus dependencias:

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

### 3. Inicializar el SDK

Cree un script `PushNotificator.cs` y adjúntelo a cualquier GameObject en la escena:

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

Reemplace:
- `XXXXX-XXXXX` con su Código de Aplicación de Pushwoosh.
- `XXXXXXXXXXXX` con su número de proyecto de Firebase (solo para Android).

### 4. Configuración nativa de iOS

#### 4.1 Capacidades (Capabilities)

Después de compilar el proyecto de iOS desde Unity, abra el proyecto de Xcode generado y añada las siguientes capacidades en **Signing & Capabilities**:

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

Para Notificaciones Sensibles al Tiempo (iOS 15+), añada también la capacidad **Time Sensitive Notifications**.

#### 4.2 Info.plist

Añada el [Token de API de Dispositivo de Pushwoosh](/es/developer/api-reference/api-access-token/#device-api-token) a su `Info.plist`:

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

#### 4.3 Seguimiento de la entrega de mensajes

Añada un objetivo de Extensión de Servicio de Notificación (Notification Service Extension) a su proyecto de Xcode. Esto es necesario para un seguimiento preciso de la entrega y para Rich Media en iOS.

Siga la [guía nativa](/es/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#4-message-delivery-tracking) para añadir el objetivo de la extensión.

### 5. Configuración nativa de Android

#### 5.1 Añadir el archivo de configuración de Firebase

Coloque el archivo `google-services.json` en el directorio **Assets** de su proyecto de Unity.

#### 5.2 Añadir metadatos de Pushwoosh

Añada el [Token de API de Dispositivo de Pushwoosh](/es/developer/api-reference/api-access-token/#device-api-token) a su `Assets/Plugins/Android/AndroidManifest.xml` dentro de la etiqueta `<application>`:

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

<Aside type="caution">
Asegúrese de dar al token acceso a la aplicación correcta en su Panel de Control de Pushwoosh. [Aprenda más](/es/developer/api-reference/api-access-token/#edit-token)
</Aside>

### 6. Ejecutar el proyecto

1. Compile y ejecute el proyecto en su plataforma de destino.
2. Conceda permiso para las notificaciones push cuando se le solicite.
3. Vaya al Panel de Control de Pushwoosh y [envíe una notificación push](/es/product/messaging-channels/push-notifications/send-push-notifications/one-time-push).

## Integración extendida

En esta etapa, puede enviar y recibir notificaciones push. Las secciones a continuación cubren la funcionalidad principal del SDK.

### Escuchadores de eventos de notificaciones push

El SDK proporciona dos escuchadores de eventos para manejar las notificaciones push:

- `OnPushNotificationsReceived` — se activa cuando llega una notificación push
- `OnPushNotificationsOpened` — se activa cuando un usuario toca una notificación

Configure estos escuchadores durante la inicialización del 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();
}
```

### Configuración de usuario

Personalice las notificaciones push identificando a los usuarios y estableciendo sus propiedades:

```csharp
// Establecer el ID de usuario para el seguimiento entre dispositivos
Pushwoosh.Instance.SetUserId("user-123");

// Establecer el correo electrónico del usuario
Pushwoosh.Instance.SetEmail("user@example.com");

// Establecer usuario con ID y correo electrónico
Pushwoosh.Instance.SetUser("user-123", new List<string> { "user@example.com" });

// Establecer el idioma preferido
Pushwoosh.Instance.SetLanguage("en");
```

### Etiquetas (Tags)

Las etiquetas (Tags) son pares clave-valor asignados a los dispositivos, lo que permite la segmentación de usuarios y la mensajería dirigida:

```csharp
// Etiqueta de cadena (String)
Pushwoosh.Instance.SetStringTag("favorite_category", "electronics");

// Etiqueta de entero (Integer)
Pushwoosh.Instance.SetIntTag("purchase_count", 5);

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

// Obtener todas las etiquetas
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

Rastree las acciones de los usuarios para analizar el comportamiento y activar mensajes automatizados:

```csharp
// Rastrear un evento de inicio de sesión
Pushwoosh.Instance.PostEvent("login", new Dictionary<string, object> {
    { "username", "user-123" },
    { "login_type", "email" }
});

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

### Preferencias de comunicación

Permita a los usuarios optar por recibir o no notificaciones push de forma programática:

```csharp
// Habilitar la comunicación
Pushwoosh.Instance.SetCommunicationEnabled(true);

// Deshabilitar la comunicación
Pushwoosh.Instance.SetCommunicationEnabled(false);

// Comprobar el estado actual
bool isEnabled = Pushwoosh.Instance.IsCommunicationEnabled();
```

### Gestión de la insignia (badge)

Controle el número de la insignia de la aplicación en las plataformas compatibles:

```csharp
// Establecer la insignia a un número específico
Pushwoosh.Instance.SetBadgeNumber(3);

// Incrementar la insignia
Pushwoosh.Instance.AddBadgeNumber(1);

// Limpiar la insignia
Pushwoosh.Instance.SetBadgeNumber(0);
```

## Solución de problemas

Si encuentra algún problema durante el proceso de integración, consulte la sección de [soporte y comunidad](/es/developer/pushwoosh-sdk/support-and-community).