SDK do Unity - Integração Básica

Pré-requisitos

Conclua estas etapas de pré-requisito antes de instalar o SDK do Unity da Singular para garantir um processo de integração tranquilo.

Pré-requisitos obrigatórios:


Instalação

Instalando via Unity Package Manager (UPM)

O SDK do Unity da Singular é instalado através do Unity Package Manager usando URLs do Git. Siga estas etapas para adicionar o SDK ao seu projeto.

Etapas de instalação

  1. Abra o Package Manager: No Unity, navegue até Window > Package Manager .
  2. Adicione o pacote a partir do Git: Clique no botão [+] no canto superior esquerdo e selecione "Add package from git URL" .
  3. Insira a URL do Git:
    • Para o SDK padrão: Insira https://github.com/singular-labs/Singular-Unity-SDK.git
    • Para o SDK infantil (Kids): Insira https://github.com/singular-labs/Singular-Unity-SDK.git#kids
  4. Conclua a instalação: Clique em "Add" para instalar o pacote do SDK.

Não está usando o Google EDM4U? Se o seu projeto não usa o External Dependency Manager, você deve baixar e adicionar manualmente as dependências nativas.

Instalação manual de dependências

  1. Baixe as dependências: Baixe o arquivo Plugins.zip apropriado do bucket S3 da Singular:
  2. Extraia para Assets: Extraia os arquivos baixados e mova-os para Assets > Plugins no seu projeto Unity.
  3. Configure o framework do iOS: Navegue até Assets > Plugins > iOS e selecione Singular.xcframework .
  4. Incorpore o binário: No painel Inspector, marque a opção "Add to Embedded Binaries" .

Dicas de configuração do Android

Configure as definições de build do Android para garantir o funcionamento adequado do SDK. O Unity oferece várias formas de personalizar os manifestos do Android e os arquivos Gradle.

Como atualizar o AndroidManifest.xml

Você pode modificar o AndroidManifest usando um destes dois métodos:

Método 1: Manifesto personalizado do Unity

  1. Navegue até File > Build Settings > Player Settings > Publishing Settings .
  2. Ative "Custom Main Manifest" na seção Publishing Settings.
  3. O Unity gera um arquivo AndroidManifest.xml padrão em Assets/Plugins/Android/AndroidManifest.xml .
  4. Edite este arquivo para adicionar as permissões e configurações necessárias.

Fonte: Documentação do Unity sobre o Android Manifest

Método 2: Android Studio

  1. Exporte seu projeto do Unity usando File > Build Settings > Export Project .
  2. Abra o projeto exportado no Android Studio.
  3. Edite o arquivo AndroidManifest.xml diretamente no Android Studio.
Como atualizar os arquivos de build do Gradle

Método 1: Template personalizado do Unity

  1. Navegue até File > Build Settings > Player Settings > Publishing Settings .
  2. Ative "Custom Gradle Template" na seção Publishing Settings.
  3. O Unity gera um arquivo mainTemplate.gradle em Assets/Plugins/Android/mainTemplate.gradle .
  4. Adicione suas configurações personalizadas do Gradle a este arquivo.

Fonte: Documentação de visão geral do Gradle no Unity

Método 2: Android Studio

  1. Exporte seu projeto do Unity.
  2. Abra o projeto no Android Studio.
  3. Edite o arquivo build.gradle do app diretamente.
Resolvendo erros de classe duplicada

Ao compilar apps Android no Unity, você pode encontrar erros de "Duplicate class" causados por várSDK do iOSs que incluem as mesmas dependências transitivas. Isso geralmente ocorre com a biblioteca Android Vending Licensing ao usar tanto o AppLovin SDK quanto o Singular SDK.

Exemplo de erro:

Duplicate class com.android.vending.licensing.ILicensingService found in modules
applovin-sdk-13.5.0.aar -> jetified-applovin-sdk-13.5.0-runtime (com.applovin:applovin-sdk:13.5.0)
and singular_sdk-12.11.0.aar -> jetified-singular_sdk-12.11.0-runtime (com.singular.sdk:singular_sdk:12.11.0)

Solução 1: Usando o External Dependency Manager (EDM4U)

Se o seu projeto usa o External Dependency Manager for Unity (recomendado), adicione regras de exclusão ao seu arquivo Dependencies XML.

  1. Localize o arquivo *Dependencies.xml no seu projeto Unity (normalmente em Assets/Editor ou em um local semelhante).
  2. Adicione uma regra de exclusão a uma das dependências do SDK:
XML
<dependencies>
  <androidPackages>
    <androidPackage spec="com.applovin:applovin-sdk:13.5.0">
      <androidSdkPackageIds>
        <exclude group="com.android.vending" module="licensing"/>
      </androidSdkPackageIds>
    </androidPackage>
    <androidPackage spec="com.singular.sdk:singular_sdk:12.11.0" />
  </androidPackages>
</dependencies>

Observação: Essa abordagem é mais persistente do que modificar os templates do Gradle, pois o Android Resolver pode sobrescrever as alterações personalizadas do template durante a resolução.

Solução 2: Usando templates personalizados do Gradle

Se você não está usando o EDM4U, aplique as regras de exclusão diretamente nos seus arquivos de configuração do Gradle.

  1. Navegue até File > Build Settings > Player Settings > Publishing Settings .
  2. Ative "Custom Main Gradle Template" ou "Custom Launcher Gradle Template" .
  3. Abra Assets/Plugins/Android/mainTemplate.gradle (ou launcherTemplate.gradle ).
  4. Adicione a regra de exclusão ao seu bloco de dependências:
Gradle
dependencies {
    implementation('com.applovin:applovin-sdk:13.5.0') {
        exclude group: 'com.android.vending', module: 'licensing'
    }
    implementation 'com.singular.sdk:singular_sdk:12.11.0'
}

Alternativa: Aplique uma exclusão global adicionando isto após o seu bloco de dependências:

Gradle
configurations.all {
    exclude group: 'com.android.vending', module: 'licensing'
}

Verifique a resolução

  1. Após aplicar a exclusão, limpe seu projeto excluindo as pastas Library/Bee e Temp .
  2. Recompile seu projeto Android no Unity.
  3. Verifique se o erro de classe duplicada não aparece mais na saída da build.

Por que isso funciona: Ambos os SDKs incluem a mesma biblioteca de licenciamento do Android como dependência transitiva. A exclusão informa ao Gradle para usar apenas uma cópia, resolvendo o conflito.

Configuração do ProGuard

Se o seu projeto usa o ProGuard para ofuscação de código, adicione as seguintes regras de keep ao seu arquivo proguard-unity.txt para evitar que o Singular SDK seja removido:

proguard-unity.txt
-keep class com.singular.sdk.** { *; }
-keep public class com.android.installreferrer.** { *; }
-keep public class com.singular.unitybridge.** { *; }

Dicas de configuração do iOS

Configure as definições específicas do iOS para habilitar a atribuição, o deep linking e a funcionalidade de testes adequadamente.

Atualizar as dependências do CocoaPods

Após compilar seu projeto Unity para iOS e antes de compilar no Xcode, atualize as dependências do CocoaPods para garantir que você tenha as versões mais recentes do SDK.

Terminal
cd /path/to/your/ios/project
pod repo update
pod update
Registrar o IDFV para testes

Para testar sua integração, registre o IDFV (Identifier for Vendor) para adicionar rapidamente seu dispositivo de teste no Singular SDK Console.

Adicionar registro do IDFV

  1. Abra seu projeto Xcode após compilar a partir do Unity.
  2. Navegue até Classes > UnityAppController.mm .
  3. Localize o método applicationDidBecomeActive .
  4. Adicione o seguinte código para registrar o IDFV:
Objective-C
// Log IDFV for testing
NSLog(@"Singular === IDFV: %@", [[[UIDevice currentDevice] identifierForVendor] UUIDString]);
  1. Compile e execute seu app no Xcode.
  2. Verifique os logs do console do Xcode para ver a saída do IDFV.
  3. Copie o IDFV e adicione-o como dispositivo de teste no Singular SDK Console .
Configurar o suporte a Deep Link

Habilite os Universal Links para deep linking configurando os Associated Domains no seu projeto Xcode.

  1. Adicione o Associated Domain: No Xcode, navegue até a aba Signing & Capabilities do target do seu app.
  2. Habilite a capability: Clique em [+] Capability e adicione "Associated Domains" .
  3. Adicione o domínio: Adicione seu domínio de tracking da Singular no formato: applinks:yourdomain.sng.link
  4. Configure o Team ID: No dashboard da Singular, navegue até as configurações do seu app e adicione seu Apple Team ID. Isso permite que a Singular gere e hospede o arquivo Apple App Site Association (AASA) exigido para os Universal Links.

Importante: Sem os Associated Domains e o Team ID configurados corretamente, os Universal Links não funcionarão e os usuários não conseguirão abrir seu app a partir dos links de tracking da Singular.

⚠️ Importante: Resolvendo conflitos do UnityAppController

Se você está usando outros SDKs que registram o UnityAppController (como Firebase, Adjust ou AppsFlyer), você pode encontrar conflitos que impedem a inicialização correta da Singular. No Unity, apenas uma classe pode se registrar como UnityAppController por vez.

Para resolver esse conflito:

  1. Abra o arquivo SingularSwizzledAppController.m no seu projeto Xcode.
  2. Descomente todo o código deste arquivo.
  3. Abra SingularAppDelegate.m e valide se a seguinte linha não está comentada:
    IMPL_APP_CONTROLLER_SUBCLASS(SingularAppDelegate)

Isso permite que a Singular funcione em conjunto com outros SDKs usando method swizzling em vez de criar uma subclasse do UnityAppController.


Integre o SDK

Crie o GameObject SingularSDK

O Singular SDK requer um GameObject na hierarquia da sua cena Unity para funcionar. Você pode adicionar esse GameObject usando o prefab fornecido ou criando-o manualmente.

Método 1: Usar o Prefab da Singular (Recomendado)

Adicionar o Prefab à cena

  1. No painel Project , navegue até Packages > Singular > SingularSDK > Prefabs .
  2. Arraste o prefab SingularSDKObject para o seu painel Hierarchy .
  3. O prefab agora está pronto para ser configurado no Inspector.
Método 2: Criar o GameObject manualmente

Criação manual do GameObject

  1. No painel Hierarchy , clique com o botão direito e selecione Create Empty .
  2. Nomeie o GameObject como SingularSDKObject (nome exato obrigatório).
  3. Com o GameObject selecionado, navegue até o painel Inspector .
  4. Clique em Add Component .
  5. Pesquise por "Singular" e selecione o componente de script Singular SDK .

Crítico: O GameObject deve ser nomeado exatamente como SingularSDKObject para que o SDK funcione corretamente.

Configure as definições do SDK

Configure suas credenciais do SDK e as definições de inicialização através do Inspector do Unity. Sua API Key e Secret são necessárias para que o SDK se comunique com os servidores da Singular.

Adicione as credenciais da API

  1. Selecione o SingularSDKObject: Clique no SingularSDKObject na sua Hierarchy.
  2. Localize as credenciais: Faça login na sua conta Singular e navegue até Developer Tools > SDK Integration > SDK Keys .
  3. Copie as chaves: Copie sua SDK Key e SDK Secret .
  4. Cole no Inspector: No painel Inspector do Unity, cole as credenciais nos campos Singular API Key e Singular API Secret .

Crítico: NÃO use a Singular Reporting API Key. Use apenas a API Key e a Secret específicas do SDK da página de SDK Integration. Usar as credenciais erradas impedirá que os dados sejam enviados para a Singular.

Verifique sua integração: Após a configuração, teste sua implementação usando o Singular SDK Console para garantir que os eventos estão sendo rastreados corretamente.

Configurações padrão do Inspector

O SingularSDKObject vem com valores padrão sensatos. Entender essas configurações ajuda você a personalizar o comportamento do SDK conforme os requisitos do seu app.

Opções de configuração padrão
  • Initialize On Awake: Habilitado por padrão. O SDK é inicializado automaticamente quando o GameObject é despertado (awake). Desabilite isto se você precisar atrasar a inicialização por consentimento de privacidade ou outros requisitos.
  • SKAN Enabled: Habilitado por padrão (apenas iOS). Habilita a atribuição via SKAdNetwork em Managed Mode, onde a Singular atualiza automaticamente os conversion values com base no seu modelo de conversão configurado.
  • Wait For Tracking Authorization: Definido como 0 (desabilitado). Se o seu app exibe o prompt do iOS App Tracking Transparency (ATT), defina isto como 300 segundos. Isso atrasa a sessão do SDK até que o usuário responda ao prompt do ATT, garantindo que o IDFA possa ser capturado se o consentimento for concedido. Deixe em 0 se não estiver usando o ATT.
  • Enable Logging: Habilitado por padrão. Gera logs de debug do SDK para ajudar na integração e no troubleshooting. Deve ser desabilitado em builds de produção. Funciona com a configuração Log Level (veja abaixo).
  • Log Level: Definido como 3 (Info) por padrão. Controla a verbosidade do logging. Números menores produzem logs mais verbosos:
    C#
    // Based on Android Logger log levels
    public enum LogLevel {
       Verbose = 2,  // Most verbose
       Debug   = 3,
       Info    = 4,  // Default
       Warn    = 5,
       Error   = 6,
       Assert  = 7   // Least verbose
    }

    Observação: Logs detalhados estão disponíveis principalmente no Android.

  • DDL Timeout Sec: Definido como 0 (usa o padrão de 60 segundos). Determina por quanto tempo o SDK aguarda os dados de deferred deep link do servidor. O servidor para de pesquisar após esse timeout se nenhum deferred deep link for encontrado.
  • Session Timeout Sec: Definido como 0 (usa o padrão de 60 segundos). Define por quanto tempo o app pode ficar em segundo plano antes de o SDK criar uma nova sessão ao retornar ao primeiro plano.
  • Shortlink Resolve Timeout: Definido como 0 (usa o padrão de 10 segundos). Tempo máximo de espera para a resolução de short links. Protege a experiência do usuário evitando longas esperas se um short link não puder ser resolvido.

Opções de configuração adicionais

Configuração do Facebook (Meta) Install Referrer

A partir de 18 de junho de 2025: O Advanced Mobile Measurement (AMM) da Meta elimina a necessidade de implementar o Meta Install Referrer. Se o reporting via AMM estiver habilitado, você não precisa configurar o Meta Install Referrer.

Se você precisar dar suporte ao método legado de atribuição do Meta Install Referrer, adicione seu Facebook App ID à configuração do SingularSDKObject.

Etapas de configuração

  1. Selecione o SingularSDKObject na hierarquia da sua cena.
  2. No painel Inspector, localize o campo "Facebook App ID" .
  3. Insira seu Facebook App ID (encontre-o no seu Facebook Developer Console).

Recursos adicionais:


Inicialize o SDK

Conformidade com a privacidade: Ao implementar o Singular SDK, esteja em conformidade com as leis de privacidade das regiões em que você opera, incluindo GDPR, CCPA, COPPA e outras. Para orientações, consulte Práticas de Opt-In e Opt-Out do SDK .

Inicialize o Singular SDK toda vez que seu app for iniciado. A inicialização do SDK é essencial para toda a funcionalidade de atribuição da Singular e cria uma nova sessão para calcular métricas de retenção de usuários.

Inicialização automática

Por padrão, o script SingularSDK.cs inicializa automaticamente o SDK quando sua cena é carregada, por meio do método Awake() do Unity. Nenhum código adicional é necessário se Initialize On Awake estiver habilitado no Inspector.

Inicialização manual

Se você precisar inicializar o SDK em um momento específico (por exemplo, após obter o consentimento do usuário), desabilite a inicialização automática e chame o método de inicialização manualmente.

Configuração da inicialização manual

  1. Selecione o SingularSDKObject na hierarquia da sua cena.
  2. No painel Inspector, desmarque Initialize On Awake .
  3. Chame SingularSDK.InitializeSingularSDK() no seu código quando estiver pronto para inicializar.

Método InitializeSingularSDK

Use este método para inicializar o SDK manualmente quando a inicialização automática estiver desabilitada.

C#
using UnityEngine;
using Singular;

public class GameInitializer : MonoBehaviour
{
    void Start()
    {
        // Perform any required setup (e.g., consent management)
        CheckUserConsent();

        // Initialize Singular SDK after consent is obtained
        // SDK Key and Secret are configured on the SingularSDKObject
        SingularSDK.InitializeSingularSDK();
    }

    void CheckUserConsent()
    {
        // Your consent logic here
    }
}

Thread Safety: Sempre chame os métodos do SDK do Unity da Singular a partir da mesma thread usada para outras chamadas da API do Unity. O SDK não é thread-safe entre múltiplas threads.


Configuração avançada

Obrigatório para Google Ads iOS Integrated Conversion Measurement

Se o seu app executa campanhas do Google Ads direcionadas a usuários de iOS 14.5+, são necessárias etapas adicionais de configuração do SDK para dar suporte ao iOS Integrated Conversion Measurement (ICM). Isso inclui:

  • Integrar o On-Device Measurement (ODM) SDK do Google
  • Atualizar para o SDK do iOS da Singular v12.8.1+ (ou v5.5.0+ para Unity, v1.8.0+ para Flutter/Cordova, v3.9.0+ para React Native)
  • Adicionar a linker flag -ObjC e habilitar enableOdmWithTimeoutInterval em SingularConfig

Observação: Habilitar enableOdmWithTimeoutInterval atrasa a inicialização do SDK e pode adiar os callbacks de deep link. Conclua esta configuração durante a implementação inicial do SDK para evitar retrabalho.

Ver os requisitos técnicos completos de ICM para iOS


Configurar o Session Timeout

Personalize por quanto tempo seu app pode permanecer em segundo plano antes de o SDK criar uma nova sessão quando o app retorna ao primeiro plano.

Configuração do Session Timeout

O session timeout padrão é de 60 segundos. Para alterar esse valor:

  1. Selecione o SingularSDKObject na hierarquia da sua cena.
  2. No painel Inspector, localize o campo Session Timeout Sec .
  3. Insira o valor de timeout desejado em segundos (por exemplo, 120 para 2 minutos).
  4. Deixe em 0 para usar o timeout padrão de 60 segundos.

Boa prática: Considere os padrões típicos de uso do seu app ao definir o session timeout. Jogos com sessões curtas e frequentes podem se beneficiar de um timeout mais curto, enquanto apps de produtividade podem precisar de timeouts mais longos.


Fazendo upgrade do .unitypackage para UPM

Se você está migrando do método de instalação legado .unitypackage para a abordagem moderna do Unity Package Manager (UPM), siga estas etapas críticas de upgrade.

Instruções de migração: .unitypackage para UPM

Crítico: Você deve remover manualmente todos os arquivos existentes do Singular SDK antes de instalar o pacote UPM. Não fazer isso causará conflitos e erros de build.

Procedimento de upgrade

Conclua estas etapas em ordem antes de instalar o SDK via Unity Package Manager:

Remoção de arquivos passo a passo

1. Remova os arquivos de código

Navegue até a pasta /Code do seu projeto (normalmente Assets/Singular/Code ) e exclua todos os scripts C# relacionados à Singular.

2. Remova as dependências do Android

Navegue até /Plugins/Android e remova os seguintes arquivos da Singular:

  • Todos os arquivos .aar com "singular" no nome
  • Todos os arquivos .jar com "singular" no nome
  • singular-sdk.aar
  • install-referrer-*.aar
  • singular-unitybridge.aar

3. Remova as dependências do iOS

Navegue até /Plugins/iOS e remova os seguintes arquivos da Singular:

  • Todos os arquivos de cabeçalho .h (por exemplo, SingularSDK.h )
  • Todos os arquivos de implementação .m (por exemplo, SingularUnityBridge.m )
  • pasta Singular.xcframework

Importante: Remova apenas os arquivos específicos da Singular. Tenha cuidado para não excluir outros arquivos de plugin dos quais seu projeto possa depender.

4. Verifique o estado limpo

  1. Após remover os arquivos, feche o Unity completamente.
  2. Exclua a pasta Library no diretório do seu projeto para forçar o Unity a reimportar os assets.
  3. Reabra seu projeto Unity.
  4. Aguarde o Unity terminar de reimportar os assets.
  5. Verifique se não há erros de compilação antes de prosseguir com a instalação via UPM.

5. Instale o pacote UPM

Agora você está pronto para instalar o Singular SDK via Unity Package Manager. Siga as instruções de instalação via UPM no topo deste guia.