---
title: "OneSignal"
description: "Integra OneSignal con Adapty para mejorar el engagement basado en notificaciones push."
---

[OneSignal](https://onesignal.com/) es una plataforma líder de engagement con clientes que ofrece notificaciones push, correo electrónico, SMS y mensajería in-app. Integrar Adapty con OneSignal te permite acceder a todos tus eventos de suscripción en un solo lugar, lo que te permite activar comunicaciones automatizadas basadas en esos eventos.

Con Adapty puedes hacer seguimiento de [eventos de suscripción](events) en múltiples stores, analizar el comportamiento de los usuarios y usar esos datos para una comunicación más segmentada. Esta integración te ayuda a monitorear eventos de suscripción dentro de tu dashboard de OneSignal y asociarlos con tus [campañas de adquisición](https://documentation.onesignal.com/docs/en/automated-messages).

Adapty actualiza las etiquetas de OneSignal en función de los eventos de suscripción, lo que te permite enviar notificaciones push personalizadas con una configuración mínima.

**Características de la integración**

| Característica de la integración | Descripción                                                  |
| :-------------------------------- | :----------------------------------------------------------- |
| Frecuencia                        | Actualizaciones en tiempo real                               |
| Dirección de los datos            | Unidireccional: de Adapty al servidor de OneSignal           |
| Punto de integración de Adapty    | <ul><li>SDK de OneSignal y de Adapty en el código de la app móvil</li><li>Servidor de Adapty</li></ul>|

## Configurar la integración con OneSignal \{#setting-up-one-signal-integration\}

Para configurar la integración:

1. Abre [Integrations → OneSignal](https://app.adapty.io/integrations/onesignal) en tu Adapty Dashboard.

   
     <img src="/assets/shared/img/onesignal-on.webp"
     style={{
       border: '1px solid #727272', /* border width and color */
       width: '700px', /* image width */
       display: 'block', /* for alignment */
       margin: '0 auto' /* center alignment */
     }}
   />
   

2. Activa el interruptor de la integración.
3. Introduce tu **OneSignal App ID**.

Para configurar la integración con OneSignal, ve a [Integrations -> OneSignal](https://app.adapty.io/integrations/onesignal) en tu Adapty dashboard, activa el interruptor y configura las credenciales de la integración.

## Obtener tu OneSignal App ID \{#retrieving-your-onesignal-app-id\}

Encuentra tu **OneSignal App ID** en tu [OneSignal Dashboard](https://dashboard.onesignal.com/login):

1. Ve a **Settings** → **Keys & IDs**.

   
     <img src="/assets/shared/img/onesignal-dashboard.webp"
     style={{
       border: '1px solid #727272', /* border width and color */
       width: '700px', /* image width */
       display: 'block', /* for alignment */
       margin: '0 auto' /* center alignment */
     }}
   />
   

2. Copia tu **OneSignal App ID** y pégalo en el campo **App ID** del Adapty Dashboard.

   
     <img src="/assets/shared/img/onesignal-id.webp"
     style={{
       border: '1px solid #727272', /* border width and color */
       width: '700px', /* image width */
       display: 'block', /* for alignment */
       margin: '0 auto' /* center alignment */
     }}
   />
   

Puedes encontrar más información sobre el ID de OneSignal en la [siguiente documentación.](https://documentation.onesignal.com/docs/en/keys-and-ids)

### Configurar eventos \{#configuring-events\}

Adapty te permite enviar tres grupos de eventos a OneSignal. Activa los que necesites en el Adapty Dashboard. Puedes ver la lista completa de eventos disponibles con una descripción detallada [aquí](events).

  <img src="/assets/shared/img/onesignal.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

Adapty envía eventos de suscripción a OneSignal mediante una integración servidor a servidor, lo que te permite hacer seguimiento de toda la actividad relacionada con suscripciones en OneSignal.

:::warning

A partir del 17 de abril de 2023, el Plan Gratuito de OneSignal ya no incluye esta integración. Solo está disponible en los planes **Growth**, **Professional** y superiores. Para más información, consulta [OneSignal Pricing](https://onesignal.com/pricing).

:::

## Etiquetas personalizadas \{#custom-tags\}

Esta integración actualiza y asigna diversas propiedades a tus usuarios de Adapty como etiquetas, que luego se envían a OneSignal. Consulta la lista de etiquetas a continuación para encontrar las que mejor se adapten a tus necesidades.
:::warning
OneSignal tiene un límite de etiquetas. Esto incluye tanto las etiquetas generadas por Adapty como las ya existentes en OneSignal. Superar el límite puede provocar errores al enviar eventos.
:::

| Etiqueta | Tipo | Descripción                                                                                                                                                                                                                                                                                                                                      |
|---|----|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `adapty_customer_user_id` | String | El identificador único del usuario en tu app. Debe ser coherente en tu sistema, Adapty y OneSignal.                                                                                                                                                                                                                                             |
| `adapty_profile_id` | String | El ID de perfil del usuario en Adapty, disponible en tu [Adapty Dashboard](profiles-crm).                                                                                                                                                                                                                                                        |
| `environment` | String | `Sandbox` o `Production`, que indica el entorno actual del usuario.                                                                                                                                                                                                                                                                              |
| `store` | String | Store donde se compró el producto. Opciones: **app_store**, **play_store**, **stripe** o el nombre de tu [store personalizado](custom-store).                                                                                                                                                                                                     |
| `vendor_product_id` | String | El ID del producto en el store (p. ej., `org.locals.12345`).                                                                                                                                                                                                                                                                                     |
| `subscription_expires_at` | String | Fecha de expiración de la suscripción más reciente (`YYYY-MM-DDTHH:MM:SS+0000`, p. ej., `2023-02-10T17:22:03.000000+0000`).                                                                                                                                                                                                                      |
| `last_event_type` | String | El tipo de evento más reciente de la [lista de eventos de Adapty](events).<br/> Ten en cuenta lo siguiente:<br/>- Para el evento **Subscription expired**, Adapty envía la propiedad `last_event_type` como `subscription_cancelled`.<br/>- Para **Trial renew canceled** — como `auto_renew_off`<br/>- Para **Subscription renew canceled** — como `auto_renew_off_subscription` |
| `purchase_date` | String | Fecha de la última transacción (`YYYY-MM-DDTHH:MM:SS+0000`, p. ej., `2023-02-10T17:22:03.000000+0000`).                                                                                                                                                                                                                                          |
| `active_subscription` | String | `true` si el usuario tiene una suscripción activa y `false` si la suscripción ha expirado.                                                                                                                                                                                                                                                       |
| `period_type` | String | Indica el tipo de período más reciente para la compra o renovación. Valores posibles: `trial` para un período de prueba o `normal` para todos los demás casos.                                                                                                                                                                                   |

Todos los valores de tipo float se redondean a enteros. Las cadenas de texto se mantienen sin cambios.

Además de las etiquetas predefinidas, puedes enviar [atributos personalizados](segments#custom-attributes) como etiquetas, lo que proporciona mayor flexibilidad en los datos que incluyes. Esto es útil para rastrear detalles específicos relacionados con tu producto o servicio.

Los atributos personalizados de usuario se envían automáticamente a OneSignal si la casilla **Send user attributes** está marcada en la [página de integración](https://app.adapty.io/integrations/onesignal). Si no está marcada, Adapty envía exactamente 10 etiquetas. Si está marcada, se pueden enviar más de 10 etiquetas, lo que permite capturar más datos.

## Configuración del SDK \{#sdk-configuration\}

Hay dos formas de integrar OneSignal con Adapty:

1. **Legacy (anterior a v5):** Usa `playerId` (obsoleto en el [OneSignal SDK v5](https://github.com/OneSignal/OneSignal-iOS-SDK/releases/tag/5.0.0)).
2. **Actual (v5+):** Usa `subscriptionId`.

:::warning
Asegúrate de enviar `playerId` (para el OneSignal SDK anterior a v5) o `subscriptionId` (para el OneSignal SDK v5+) a Adapty. Sin esto, las etiquetas de OneSignal no se actualizarán y la integración no funcionará correctamente.
:::

<Tabs groupId="current-version" queryString> 
<TabItem value="v5+" label="OneSignal SDK v5+ (current)" default> 

<Tabs groupId="current-os" queryString>
<TabItem value="swift" label="iOS (Swift)" default>

```swift showLineNumbers
// SubscriptionID
OneSignal.Notifications.requestPermission({ accepted in
    Task {
        try await Adapty.setIntegrationIdentifier(
            key: "one_signal_subscription_id", 
            value: OneSignal.User.pushSubscription.id
        )
    }
}, fallbackToSettings: true)
```

</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

```kotlin showLineNumbers
// SubscriptionID
val oneSignalSubscriptionObserver = object: IPushSubscriptionObserver {
    override fun onPushSubscriptionChange(state: PushSubscriptionChangedState) {
        Adapty.setIntegrationIdentifier("one_signal_subscription_id", state.current.id) { error ->
            if (error != null) {
                // handle the error
            }
        }
    }
}
```

</TabItem>
<TabItem value="java" label="(Android) Java" default>

```java showLineNumbers
// SubscriptionID
IPushSubscriptionObserver oneSignalSubscriptionObserver = state -> {
    Adapty.setIntegrationIdentifier("one_signal_subscription_id", state.getCurrent().getId(), error -> {
        if (error != null) {
            // handle the error
        }
    });
};
```

</TabItem>  

<TabItem value="flutter" label="Flutter (Dart)" default>

```javascript showLineNumbers
// 1. Since OneSignal.User.pushSubscription.id may return null if called too early, 
// OneSignal suggests to listen for the updates:

OneSignal.User.pushSubscription.addObserver((state) {
   if (state.current.optedIn) {
      // now you can try to retrieve subscriptionId
   }
});

// 2. Then you can push subscriptionId to Adapty:
final subscriptionId = OneSignal.User.pushSubscription.id;
if (subscriptionId != null) {
   await Adapty().setIntegrationIdentifier(key: "one_signal_subscription_id", value: subscriptionId);
}
```

</TabItem>
<TabItem value="unity" label="Unity (C#)" default>

```csharp showLineNumbers
using AdaptySDK;
using OneSignalSDK;

var pushUserId = OneSignal.Default.PushSubscriptionState.userId;

Adapty.SetIntegrationIdentifier(
  "one_signal_player_id", 
  pushUserId, 
  (error) => {
  // handle the error
});
```

</TabItem>
<TabItem value="rn" label="React Native (TS)" default>

```typescript showLineNumbers

OneSignal.User.pushSubscription.addEventListener('change', (subscription) => {
  const subscriptionId = subscription.current.id;

  if (subscriptionId) {
    adapty.setIntegrationIdentifier("one_signal_subscription_id", subscriptionId);
  }
});
```

</TabItem>
</Tabs>

 </TabItem> 

<TabItem value="pre-v5" label="OneSignal SDK v. up to 4.x (legacy)" default> 

<Tabs groupId="current-os" queryString>
<TabItem value="swift" label="iOS (Swift)" default>

```swift showLineNumbers
// PlayerID
// in your OSSubscriptionObserver implementation
func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges) {
    if let playerId = stateChanges.to.userId {
        Task {
            try await Adapty.setIntegrationIdentifier(
                key: "one_signal_player_id", 
                value: playerId
            )
        }
    }
}
```

</TabItem>
<TabItem value="kotlin" label="Android (Kotlin)" default>

```kotlin showLineNumbers
// PlayerID
val osSubscriptionObserver = OSSubscriptionObserver { stateChanges ->
    stateChanges?.to?.userId?.let { playerId ->
        Adapty.setIntegrationIdentifier("one_signal_player_id", playerId) { error ->
            if (error != null) {
                // handle the error
            }
        }
    }
}
```

</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
// PlayerID
OSSubscriptionObserver osSubscriptionObserver = stateChanges -> {
    OSSubscriptionState to = stateChanges != null ? stateChanges.getTo() : null;
    String playerId = to != null ? to.getUserId() : null;
    
    if (playerId != null) {
        Adapty.setIntegrationIdentifier("one_signal_player_id", playerId, error -> {
            if (error != null) {
                // handle the error
            }
        });
    }
};
```

</TabItem>  

<TabItem value="flutter" label="Flutter (Dart)" default>

```javascript showLineNumbers
// PlayerID (pre-v5 OneSignal SDK)
// in your OSSubscriptionObserver implementation
func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges) {
    if let playerId = stateChanges.to.userId {
        Task {
            try await Adapty.setIntegrationIdentifier(
                key: "one_signal_player_id", 
                value: playerId
            )
        }
    }
}
```

</TabItem>
<TabItem value="rn" label="React Native (TS)" default>
```typescript showLineNumbers

OneSignal.addSubscriptionObserver(event => {
  const playerId = event.to.userId;
  
  adapty.setIntegrationIdentifier("one_signal_player_id", playerId);
});
```

</TabItem>
</Tabs>

 </TabItem> 

</Tabs>

Más información en la documentación de OneSignal:

- [ID de suscripción push](https://documentation.onesignal.com/docs/en/mobile-sdk-reference#user-pushsubscription-id)
- [Cambios en la suscripción push](https://documentation.onesignal.com/docs/en/mobile-sdk-reference#addobserver-push-subscription-changes)

## Gestionar múltiples dispositivos \{#dealing-with-multiple-devices\}

Si un usuario tiene varios dispositivos, hacer seguimiento de los eventos de compra y las suscripciones puede ser complicado. OneSignal ofrece una forma de gestionar esto mediante [IDs de usuario externos](https://documentation.onesignal.com/docs/en/users).

Para mantener los datos del usuario coherentes entre dispositivos:

1. Relaciona los distintos dispositivos en tu **servidor** y envía esos datos a OneSignal.
2. Usa el [customer_user_id](identifying-users) de Adapty como [externalUserId](https://documentation.onesignal.com/docs/en/users#external-id) en OneSignal. Si tu app no tiene un sistema de registro, considera usar otro identificador único que sea constante en todos los dispositivos del usuario.

Es importante mantener la coherencia del identificador de usuario en todos los dispositivos y actualizar OneSignal cada vez que cambie el ID de un usuario. Esto simplifica el seguimiento de la actividad y las suscripciones, garantiza una mensajería coherente y permite obtener análisis más precisos y una mejor experiencia de usuario. Para más detalles, consulta la [documentación de ID de usuario externo de OneSignal](https://documentation.onesignal.com/docs/en/users).