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

# RevenueCat

> Sincronize dados de compra no aplicativo e assinatura do RevenueCat para o OneSignal para mensagens personalizadas.

## Visão geral

O RevenueCat ajuda você a rastrear compras no aplicativo e ciclos de vida de assinaturas entre plataformas. Com o OneSignal, você pode usar esses dados para enviar mensagens personalizadas com base no status de assinatura de um usuário.

Esta integração atualiza tags de usuário no OneSignal automaticamente com suas informações de assinatura mais recentes.

### Principais benefícios

Com a integração RevenueCat-OneSignal, você pode:

* Enviar mensagens de onboarding para usuários em teste gratuito ou que acabaram de assinar.
* Reengajar usuários inativos com pesquisas ou descontos.
* Enviar mensagens transacionais para compras, problemas de cobrança ou renovações.

Com dados precisos de assinatura no OneSignal, suas campanhas serão mais inteligentes e eficazes.

***

## Requisitos

* [Conta RevenueCat](https://www.revenuecat.com/docs/welcome/overview)
  * [*SDK Purchases*](https://www.revenuecat.com/docs/getting-started/quickstart) do RevenueCat
  * Entender [integração RevenueCat-OneSignal](https://www.revenuecat.com/docs/integrations/third-party-integrations/onesignal)
* Conta OneSignal com [SDK integrado](./developers)
  * Entender [Tags](./add-user-data-tags), [Usuários](./users) e [Assinaturas](./subscriptions) do OneSignal

***

## Configuração

### Conectar OneSignal ao RevenueCat

1. No seu painel RevenueCat, navegue até as configurações do projeto e escolha 'OneSignal' no menu Integrações.
2. Adicione seu ID de App OneSignal e chave de API OneSignal. Veja [Chaves e IDs](./keys-and-ids) para mais informações.
3. Digite os nomes das tags que o RevenueCat deve usar ou escolha os nomes de tags padrão.

### Passar o ID OneSignal para o RevenueCat

O RevenueCat usa o ID de usuário OneSignal (ID OneSignal) para atualizar tags de usuário no OneSignal com base em seus detalhes de usuário RevenueCat.

<Warning>
  Definir o ID Externo no OneSignal é necessário para um identificador estável. Se ele mudar no meio da sessão, o ID OneSignal também pode mudar, quebrando a conexão RevenueCat.
</Warning>

Para passar o ID OneSignal para o RevenueCat, você deve:

<Steps>
  <Step title="Definir o ID Externo no OneSignal">
    Defina o ID Externo no OneSignal para o ID do seu usuário principal. Isso pode ser feito com o método `login` do SDK.

    * [Método `login` do SDK Móvel](./mobile-sdk-reference#login-external-id)
    * [Método `login` do SDK Web](./web-sdk-reference#login-external-id)
  </Step>

  <Step title="Obter o ID OneSignal">
    Recomendamos usar o método observador de estado do usuário para obter o ID OneSignal, mas também fornecemos métodos getter:

    * Observadores de estado do usuário:
      * [Estado do usuário `addObserver` do SDK Móvel](./mobile-sdk-reference#addobserver-user-state)
      * [Estado do usuário `addObserver` do SDK Web](./web-sdk-reference#addeventlistener-user-state)
    * Métodos getter:
      * [Método `getOneSignalId` do SDK Móvel](./mobile-sdk-reference#getonesignalid)
      * [Propriedade `OneSignalId` do SDK Web](./web-sdk-reference#onesignal-user-onesignalid)
  </Step>

  <Step title="Passar o ID OneSignal para o RevenueCat">
    Passe o ID OneSignal para o RevenueCat.

    * Propriedade RevenueCat: `$onesignalUserId`
    * Método auxiliar RevenueCat: `setOneSignalUserID()` (recomendado)
  </Step>
</Steps>

### Enviar eventos RevenueCat para o OneSignal

Usuários que têm um ID OneSignal mapeado para o RevenueCat terão suas tags atualizadas automaticamente.

#### Testando a integração

<Steps>
  <Step title="Fazer uma compra sandbox">
    Simule um novo usuário instalando seu app e passe pelo fluxo do seu app para completar uma compra sandbox.

    <Warning>
      Certifique-se de que o ID OneSignal está definido no RevenueCat.
    </Warning>
  </Step>

  <Step title="Verificar se os dados do dispositivo necessários foram coletados">
    No RevenueCat, navegue até a Visualização de Cliente para o usuário de teste que acabou de fazer uma compra. Certifique-se de que todos os dados necessários estejam listados como atributos para o usuário.
  </Step>

  <Step title="Verificar se o evento OneSignal foi entregue com sucesso">
    Ainda na Visualização de Cliente, clique no evento de compra de teste no Histórico do Cliente e certifique-se de que o evento de integração OneSignal existe e foi entregue com sucesso.
  </Step>

  <Step title="Verificar se as tags OneSignal foram atualizadas">
    No OneSignal, navegue até **Audiência > Usuários** e procure pelo ID OneSignal. Você deve ver as tags que foram atualizadas pelo RevenueCat.
  </Step>
</Steps>

<Check>
  Integração completa! Agora você deve ver as tags no OneSignal atualizando automaticamente conforme os usuários fazem compras ou atualizam seu status de assinatura.
</Check>

***

## Tags de evento RevenueCat

Para cada evento de assinatura com renovação automática no RevenueCat, as seguintes tags são adicionadas ou atualizadas no usuário no OneSignal. Ao deixar a tag em branco no painel RevenueCat, você pode optar por não enviar nenhum valor para tag(s) específica(s).

| Tag                          | Descrição                                                                                                                                                        |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `app_user_id`                | O ID de usuário do app RevenueCat que disparou o evento                                                                                                          |
| `period_type`                | O tipo de período mais recente para a compra ou renovação. Um de: `TRIAL` (para testes gratuitos), `INTRO` (ou preço introdutório), `NORMAL` (assinatura padrão) |
| `purchased_at`               | Tempo epoch em segundos da compra ou renovação de assinatura mais recente                                                                                        |
| `expiration_at`              | Tempo epoch em segundos da data de expiração da assinatura mais recente                                                                                          |
| `store`                      | Um de `APP_STORE`, `PLAY_STORE` ou `STRIPE`                                                                                                                      |
| `environment`                | Um de `SANDBOX` ou `PRODUCTION`                                                                                                                                  |
| `last_event_type`            | O tipo de evento mais recente do usuário. Um de: `INITIAL_PURCHASE`, `TRIAL_STARTED`, `TRIAL_CONVERTED`, `TRIAL_CANCELLED`, `RENEWAL`, `CANCELLATION`            |
| `product_id`                 | O identificador de produto de assinatura mais recente que o usuário comprou ou renovou                                                                           |
| `entitlement_ids`            | String separada por vírgulas de identificadores de Direito RevenueCat que o usuário desbloqueou                                                                  |
| `active_subscription`        | O valor será definido como `true` em qualquer evento de compra/renovação, e `false` em `EXPIRATION`                                                              |
| `subscription_status`        | Veja Atributo de Status de Assinatura abaixo                                                                                                                     |
| `grace_period_expiration_at` | Se ocorrer um problema de cobrança, enviaremos a data de expiração do período de carência.                                                                       |

<Note>
  * Somente assinaturas com renovação automática
  * O RevenueCat atualiza apenas tags de dados no OneSignal em resposta a eventos de assinatura com renovação automática.
</Note>

### Exemplos de eventos RevenueCat

Os exemplos JSON fornecidos mostram as tags enviadas ao OneSignal com base em [Eventos RevenueCat](https://www.revenuecat.com/docs/integrations/third-party-integrations/onesignal#events).

O evento é salvo como a tag `last_event_type`.

<Tabs>
  <Tab title="initial_purchase">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "NORMAL",
            "purchased_at": 1600016247,
            "expiration_at": 1602608247,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "initial_purchase",
            "last_event_at": 1600016250,
            "product_id": "monthly_sub",
            "entitlement_ids": "Pro"
        }
    }
    ```
  </Tab>

  <Tab title="trial_started">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "TRIAL",
            "purchased_at": 1600031584,
            "expiration_at": 1600290784,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "trial_started",
            "last_event_at": 1600031586,
            "product_id": "three_month_sub_trial",
            "entitlement_ids": "Pro"
        }
    }
    ```
  </Tab>

  <Tab title="trial_converted">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "NORMAL",
            "purchased_at": 1602136340,
            "expiration_at": 1602741140,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "trial_converted",
            "last_event_at": 1602114850,
            "product_id": "weekly_sub_trial",
            "entitlement_ids": null
        }
    }
    ```
  </Tab>

  <Tab title="trial_cancelled">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "TRIAL",
            "purchased_at": 1602051920,
            "expiration_at": 1602311120,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "trial_cancelled",
            "last_event_at": 1602129368,
            "product_id": "weekly_sub_trial",
            "entitlement_ids": null
        }
    }
    ```
  </Tab>

  <Tab title="renewal">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "NORMAL",
            "purchased_at": 1602125078,
            "expiration_at": 1604807078,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "renewal",
            "last_event_at": 1602122793,
            "product_id": "monthly_sub",
            "entitlement_ids": "Pro"
        }
    }
    ```
  </Tab>

  <Tab title="cancellation">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "NORMAL",
            "purchased_at": 1602086660,
            "expiration_at": 1602691460,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "cancellation",
            "last_event_at": 1602118600,
            "product_id": "weekly_sub",
            "entitlement_ids": null
        }
    }
    ```
  </Tab>

  <Tab title="uncancellation">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "TRIAL",
            "purchased_at": 1663445025,
            "expiration_at": 1664049825,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "uncancellation",
            "last_event_at": 1663969096,
            "product_id": "annual_sub",
            "entitlement_ids": "Premium"
        }
    }
    ```
  </Tab>

  <Tab title="non_subscription_purchase">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "purchased_at": 1602086660,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "non_renewing_purchase",
            "last_event_at": 1602118600,
            "product_id": "one_time_purchase_product",
            "entitlement_ids": null
        }
    }
    ```
  </Tab>

  <Tab title="subscription_paused">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "NORMAL",
            "purchased_at": 1602086660,
            "expiration_at": 1602691460,
            "store": "PLAY_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "subscription_paused",
            "last_event_at": 1602118600,
            "product_id": "weekly_sub",
            "auto_resume_at": 1602119600,
            "entitlement_ids": null
        }
    }
    ```
  </Tab>

  <Tab title="expiration">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "period_type": "NORMAL",
            "purchased_at": 1652374230,
            "expiration_at": 1652979030,
            "last_event_type": "expiration",
            "last_event_at": 1652988735
        }
    }
    ```
  </Tab>

  <Tab title="billing_issue">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "TRIAL",
            "purchased_at": 1652383957,
            "expiration_at": 1654371157,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "billing_issue",
            "last_event_at": 1652988776,
            "product_id": "annual_sub",
            "entitlement_ids": "Premium"
        }
    }
    ```
  </Tab>

  <Tab title="product_change">
    ```json theme={null}
    {
        "app_id": "12345678-1234-1234-1234-123456789012",
        "tags": {
            "app_user_id": "$RCAnonymousID:87c6049c58069238dce29853916d624c",
            "period_type": "NORMAL",
            "purchased_at": 1602086660,
            "expiration_at": 1602691460,
            "store": "APP_STORE",
            "environment": "PRODUCTION",
            "last_event_type": "product_change",
            "last_event_at": 1602118600,
            "product_id": "weekly_sub",
            "new_product_id": "monthly_sub",
            "entitlement_ids": null
        }
    }
    ```
  </Tab>
</Tabs>

### Tag `subscription_status`

Sempre que o RevenueCat envia um evento para o OneSignal, uma tag `subscription_status` é adicionada ou atualizada com quaisquer alterações aplicáveis, usando um dos seguintes valores:

| Status               | Descrição                                                                                                            |
| :------------------- | :------------------------------------------------------------------------------------------------------------------- |
| active               | O cliente tem uma assinatura ativa e paga que está configurada para renovar na próxima data de renovação.            |
| intro                | O cliente tem uma assinatura ativa e paga através de uma oferta introdutória paga.                                   |
| cancelled            | O cliente tem uma assinatura paga que está configurada para expirar na próxima data de renovação.                    |
| grace\_period        | O cliente tem uma assinatura paga que entrou em um período de carência após falhar ao renovar com sucesso.           |
| trial                | O cliente está em um período de teste que está configurado para converter para pago no final do período de teste.    |
| cancelled\_trial     | O cliente está em um período de teste que está configurado para expirar no final do período de teste.                |
| grace\_period\_trial | O cliente estava em um período de teste e agora entrou em um período de carência após falhar ao renovar com sucesso. |
| expired              | A assinatura do cliente expirou.                                                                                     |
| promotional          | O cliente tem acesso a um direito através de um RevenueCat                                                           |
| expired\_promotional | O cliente teve anteriormente acesso a um direito através de um Direito Concedido RevenueCat que desde então expirou. |
| paused               | O cliente tem uma assinatura paga que foi pausada e está configurada para retomar em alguma data futura.             |

Para clientes com múltiplas assinaturas ativas, este atributo representará o status apenas da assinatura para a qual o evento mais recente ocorreu.

***

## FAQ

### Como saber se a integração está funcionando?

No OneSignal, navegue até **Audiência > Usuários** e procure pelo ID OneSignal. Você deve ver as tags que foram atualizadas pelo RevenueCat.

Você também pode ir para **Audiência > Segmentos** e criar um segmento que filtra pelas tags que você definiu via RevenueCat.

### Quantas tags posso definir?

Não há limite para a quantidade de tags que você pode definir no OneSignal, mas há um limite de quantas tags cada usuário pode ter em um determinado momento.

Veja nossa [página de Preços](https://onesignal.com/pricing) para mais informações.

***
