SDK do Unity - Rastreamento de desinstalação

Documento

Rastreamento de desinstalação

Rastreie desinstalações de aplicativos para medir a retenção de usuários e otimizar campanhas de reengajamento integrando serviços de notificação por push com o SDK Singular.

Importante: o Google descontinuou as APIs do GCM em abril de 2018. Use o Firebase Cloud Messaging (FCM) para todas as implementações de rastreamento de desinstalação do Android.

Rastreamento de desinstalação do Android

Pré-requisitos

Antes de implementar o rastreamento de desinstalação em seu aplicativo Unity, configure seu aplicativo na plataforma Singular seguindo o guia Configurando o rastreamento de desinstalação do Android.


Requisitos do sistema

O rastreamento de desinstalação requer o Firebase Cloud Messaging e configurações específicas do dispositivo.

Requisitos de FCM(fonte):

  • Versão do Android: Os dispositivos devem executar o Android 4.1 (API 16) ou superior
  • Serviços do Google Play: Os dispositivos devem ter o aplicativo Google Play Store instalado
  • Suporte de emulador: São suportados emuladores Android 4.1+ com APIs do Google
  • Distribuição: As aplicações podem ser distribuídas fora da Google Play Store, continuando a suportar o controlo de desinstalações

Nota: os utilizadores de versões do Android não suportadas ou de dispositivos sem o Google Play Services não serão rastreados para desinstalações.


Etapas de implementação

Etapa 1: Integrar o Firebase Cloud Messaging

Configure o Firebase Cloud Messaging no seu aplicativo Unity se ainda não estiver configurado.

Siga o guia oficial do Google para Configurar o Firebase Cloud Messaging para Unity. Isso inclui:

  1. Adicionar Firebase ao seu projeto Unity
  2. Importar o pacote Unity do Firebase Messaging
  3. Configurar as definições do Firebase para Android
  4. Solicitar permissões de notificação (Android 13+)

Etapa 2: Configurar AndroidManifest.xml

Registre seu Firebase Messaging Service no manifesto do Android para receber mensagens FCM.

AndroidManifest.xml
<service 
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Importante: Substitua .java.MyFirebaseMessagingService pelo nome totalmente qualificado da sua classe que estende FirebaseMessagingService.


Passo 3: Registar o Token de Dispositivo FCM

Recupere o token do dispositivo FCM e envie-o para a Singular para rastrear a desinstalação antes da inicialização do SDK.

C#
using UnityEngine;
using Singular;
using Firebase.Messaging;
using System.Threading.Tasks;

public class UninstallTrackingManager : MonoBehaviour
{
    async void Start()
    {
        // Initialize Firebase
        await InitializeFirebase();

        // Get FCM token and register it with Singular
        await RegisterFCMToken();

        // Initialize Singular SDK after registering the token
        SingularSDK.InitializeSingularSDK();
    }

    private async Task InitializeFirebase()
    {
        var dependencyStatus = await Firebase.FirebaseApp.CheckAndFixDependenciesAsync();

        if (dependencyStatus == Firebase.DependencyStatus.Available)
        {
            Debug.Log("Firebase is ready");
        }
        else
        {
            Debug.LogError($"Could not resolve Firebase dependencies: {dependencyStatus}");
        }
    }

    private async Task RegisterFCMToken()
    {
        try
        {
            // Get FCM token
            string token = await Firebase.Messaging.FirebaseMessaging.GetTokenAsync();

            if (!string.IsNullOrEmpty(token))
            {
                // Register token with Singular BEFORE SDK initialization
                SingularSDK.RegisterTokenForUninstall(token);
                Debug.Log($"FCM token registered with Singular: {token}");
            }
            else
            {
                Debug.LogWarning("FCM token is empty");
            }
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"Error getting FCM token: {ex.Message}");
        }
    }
}

Crítico: O método RegisterTokenForUninstall()deve ser chamado antes deSingularSDK.InitializeSingularSDK(). Registrar o token após a inicialização não permitirá o rastreamento da desinstalação.


Etapa 4: Tratar a atualização do token

Atualize o token FCM com o Singular sempre que ele for atualizado para manter o rastreamento de desinstalação preciso.

C#
using UnityEngine;
using Singular;
using Firebase.Messaging;

public class FCMTokenRefreshHandler : MonoBehaviour
{
    void Start()
    {
        // Subscribe to token refresh event
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
    }

    void OnDestroy()
    {
        // Unsubscribe when destroyed
        Firebase.Messaging.FirebaseMessaging.TokenReceived -= OnTokenReceived;
    }

    private void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs e)
    {
        Debug.Log($"New FCM token received: {e.Token}");

        // Update token with Singular
        SingularSDK.RegisterTokenForUninstall(e.Token);

        // Also send token to your server if needed
        SendTokenToServer(e.Token);
    }

    private void SendTokenToServer(string token)
    {
        // Implement your server communication logic here
        Debug.Log($"Sending token to server: {token}");
    }
}

Melhores práticas: Os tokens FCM podem ser atualizados a qualquer momento (atualizações de aplicativos, restauração de dispositivos, etc.). Sempre assine o evento TokenReceived para manter o Singular atualizado com o token mais recente.


Rastreamento de desinstalação do iOS

Pré-requisitos

O rastreamento de desinstalação no iOS é baseado na tecnologia do serviço de notificação por push da Apple (APNs).

Se o seu aplicativo não for compatível com notificações por push, consulte o guia da Apple para Registrar seu aplicativo com APNs.


Registar o Token de Dispositivo APNS

Passe o token de dispositivo devolvido pelos APNs utilizando o método RegisterTokenForUninstall depois de o SDK ser inicializado.

Assinatura do método:

public static void RegisterTokenForUninstall(string APNSToken)

Parâmetros:

  • APNSToken: O token de dispositivo retornado dos APNs como uma cadeia de caracteres hexadecimal

Formato do token: O token APNS é normalmente um dado binário na sua forma nativa, mas é necessário passá-lo ao Singular como uma representação de cadeia hexadecimal.


Exemplo de uso

Registre o token de dispositivo APNS com o Singular para rastreamento de desinstalação do iOS.

C#
using UnityEngine;
using Singular;

#if UNITY_IOS
using Unity.Notifications.iOS;
#endif

public class iOSUninstallTracking : MonoBehaviour
{
    void Start()
    {
        #if UNITY_IOS
        // Initialize Singular SDK first
        SingularSDK.InitializeSingularSDK();

        // Request notification authorization
        RequestNotificationAuthorization();
        #endif
    }

    #if UNITY_IOS
    private void RequestNotificationAuthorization()
    {
        var authorizationOption = AuthorizationOption.Alert | 
                                  AuthorizationOption.Badge | 
                                  AuthorizationOption.Sound;

        using (var req = new AuthorizationRequest(authorizationOption, true))
        {
            while (!req.IsFinished)
            {
                // Wait for authorization
            }

            string deviceToken = req.DeviceToken;

            if (!string.IsNullOrEmpty(deviceToken))
            {
                // Convert device token to hex string and register with Singular
                SingularSDK.RegisterTokenForUninstall(deviceToken);
                Debug.Log($"APNS token registered: {deviceToken}");
            }
            else
            {
                Debug.LogWarning("Failed to get APNS device token");
            }
        }
    }
    #endif
}

Exemplo Token:

// Pass the APNS token as a hex-string
SingularSDK.RegisterTokenForUninstall("ba85ab31a7c7f5c2f012587f29fb0e596d4b67e7b7b2838fa1a8582c1f7dbdee");

Diferença de plataforma: Ao contrário do Android, onde o token deve ser registrado antes da inicialização do SDK, os tokens do iOS devem ser registrados após ainicialização do SDK.


Verificação e solução de problemas

Verificar a implementação

Confirme se o rastreamento de desinstalação está funcionando corretamente.

  1. Verifique os logs: Verifique se o registro do token aparece nos logs do console do Unity
  2. Teste a geração de tokens: Certifique-se de que os tokens sejam gerados na primeira inicialização do aplicativo
  3. Monitorar painel: Verifique o painel do Singular para obter dados de rastreamento de desinstalação após 24-48 horas
  4. Teste a atualização do token: Limpar os dados do aplicativo e verificar se o token é atualizado corretamente

Problemas comuns

  • Token Android não gerado: Verifique se as dependências do Firebase foram adicionadas corretamente e se o Firebase está configurado no seu projeto Unity
  • O token não está sendo atualizado: Verifique se você se inscreveu no evento TokenReceived para Android ou se manipulou corretamente os retornos de chamada de APNs para iOS
  • Dados ausentes: Certifique-se de que os dispositivos atendam aos requisitos da plataforma (Android 4.1+ com Google Play Services, iOS com suporte a APNs)
  • Erro de configuração: Confirmar se o rastreamento de desinstalação está ativado nas configurações da plataforma Singular
  • Ordem de inicialização: Para Android, verifique se RegisterTokenForUninstall() é chamado antes de InitializeSingularSDK()

Recursos adicionais: Para obter uma solução de problemas detalhada, consulte o Guia de configuração de rastreamento de desinstalação do Androide a Documentação do Firebase Cloud Messaging para Unity.