Rastreamento de desinstalação
Rastreie as desinstalações de aplicativos para medir a retenção de usuários e otimizar campanhas de reengajamento integrando o Firebase Cloud Messaging (FCM) ao SDK do Singular.
Importante: O Google tornou as APIs do GCM obsoletas em abril de 2018. Use o Firebase Cloud Messaging (FCM) para todas as implementações de rastreamento de desinstalação.
Pré-requisitos
Configurar a plataforma do Singular
Antes de implementar o rastreamento de desinstalação em seu aplicativo, configure seu app na plataforma do Singular e conclua as etapas de integração do SDK do Android + FCM descritas em Configuração do rastreamento de desinstalação no Android .
Requisitos do sistema
O rastreamento de desinstalação requer o Firebase Cloud Messaging e configurações específicas do dispositivo.
Requisitos do FCM ( fonte ):
- Versão do Android: Os dispositivos devem executar o Android 4.1 (API 16) ou superior
- Google Play Services: Os dispositivos devem ter o aplicativo Google Play Store instalado
- Suporte a emuladores: Emuladores com Android 4.1+ e APIs do Google são compatíveis
- Distribuição: Os aplicativos podem ser distribuídos fora da Google Play Store e ainda assim oferecer suporte ao rastreamento de desinstalação
Nota: Usuários em versões do Android não compatíveis ou 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 em seu aplicativo se ainda não estiver configurado.
Siga o guia oficial do Google para Configurar um aplicativo cliente do Firebase Cloud Messaging no Android . Isso inclui:
- Adicione o Firebase ao seu projeto Android
-
Adicione a dependência do SDK do FCM ao seu
app/build.gradle - Crie uma classe Firebase Messaging Service
- Solicite permissões de notificação (Android 13+)
Etapa 2: Confirmar a configuração de FCM no AndroidManifest.xml
Verificar o serviço e as permissões do FCM
Certifique-se de que seu aplicativo já esteja integrado ao Firebase Cloud Messaging e de que o manifesto do Android declare um FirebaseMessagingService para receber mensagens FCM.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.your.package">
<!-- FCM Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application>
<!-- App Firebase Messaging Service -->
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>
Importante: Substitua
.MyFirebaseMessagingService
pelo nome totalmente qualificado da sua classe que estende
FirebaseMessagingService
. Apenas um serviço deve manipular o intent
com.google.firebase.MESSAGING_EVENT
em seu aplicativo.
Etapa 3: Registrar o token do dispositivo FCM
Obtenha o token do dispositivo FCM e envie-o ao Singular para o rastreamento de desinstalação.
Obter e definir o token
Obtenha o token FCM e registre-o no Singular imediatamente após a inicialização do SDK.
import com.google.firebase.messaging.FirebaseMessaging
import com.singular.sdk.Singular
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initialize Singular SDK
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
Singular.init(applicationContext, config)
// Retrieve and register FCM token
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w("FCM", "Fetching FCM token failed", task.exception)
return@addOnCompleteListener
}
// Get FCM token
val token = task.result
// Register token with Singular
Singular.setFCMDeviceToken(token)
Log.d("FCM", "FCM token registered with Singular: $token")
}
}
}
import com.google.firebase.messaging.FirebaseMessaging;
import com.singular.sdk.Singular;
import com.singular.sdk.SingularConfig;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize Singular SDK
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET");
Singular.init(getApplicationContext(), config);
// Retrieve and register FCM token
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w("FCM", "Fetching FCM token failed", task.getException());
return;
}
// Get FCM token
String token = task.getResult();
// Register token with Singular
Singular.setFCMDeviceToken(token);
Log.d("FCM", "FCM token registered with Singular: " + token);
}
});
}
}
Melhor prática:
Registre o token FCM imediatamente após
Singular.init()
para garantir que o rastreamento de desinstalação esteja habilitado
desde a primeira sessão do aplicativo.
Singular.setFCMDeviceToken()
não executa nenhuma ação silenciosamente se for chamado antes da
conclusão de
Singular.init()
ou se o argumento do token for
null
ou vazio. Se o registro do token parecer não fazer nada, confirme se o
SDK foi inicializado primeiro e se o token FCM retornado pelo Firebase
é uma string não vazia.
Lidar com a atualização do token
Atualize o token FCM no Singular sempre que ele for renovado para manter um rastreamento de desinstalação preciso.
import com.google.firebase.messaging.FirebaseMessagingService
import com.singular.sdk.Singular
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
// Send updated token to Singular
Singular.setFCMDeviceToken(token)
Log.d("FCM", "New FCM token registered: $token")
// Also send token to your server if needed
sendTokenToServer(token)
}
private fun sendTokenToServer(token: String) {
// Implement your server communication logic here
}
}
import com.google.firebase.messaging.FirebaseMessagingService;
import com.singular.sdk.Singular;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(@NonNull String token) {
super.onNewToken(token);
// Send updated token to Singular
Singular.setFCMDeviceToken(token);
Log.d("FCM", "New FCM token registered: " + token);
// Also send token to your server if needed
sendTokenToServer(token);
}
private void sendTokenToServer(String token) {
// Implement your server communication logic here
}
}
Importante:
Os tokens FCM podem ser atualizados a qualquer
momento (atualizações do app, restauração do dispositivo, etc.).
Sempre implemente
onNewToken()
para manter o Singular atualizado.
Método de configuração alternativo
Definir o token durante a inicialização
Se você tiver o token FCM disponível antes da inicialização do SDK,
configure-o no objeto
SingularConfig
.
// Get token synchronously (if cached)
val cachedToken = getStoredFCMToken() // Your caching logic
val config = SingularConfig("SDK_KEY", "SDK_SECRET")
.withFCMDeviceToken(cachedToken)
Singular.init(applicationContext, config)
// Get token synchronously (if cached)
String cachedToken = getStoredFCMToken(); // Your caching logic
SingularConfig config = new SingularConfig("SDK_KEY", "SDK_SECRET")
.withFCMDeviceToken(cachedToken);
Singular.init(getApplicationContext(), config);
Assinatura do método:
public SingularConfig withFCMDeviceToken(String fcmDeviceToken);
withFCMDeviceToken
apenas inicializa o SDK com o token que você tem no momento da
inicialização. Ele não se inscreve nas atualizações de token. Você
ainda precisa implementar
FirebaseMessagingService.onNewToken
e chamar
Singular.setFCMDeviceToken(newToken)
lá para manter o registro do Singular atualizado. O método de
configuração também não executa nenhuma ação silenciosamente se o
token fornecido for
null
ou vazio.
Verificação e solução de problemas
Verificar a implementação
Confirme que o rastreamento de desinstalação está funcionando corretamente.
- Verifique os logs: Confirme que o registro do token FCM aparece em seus logs
- Teste a geração do token: Certifique-se de que os tokens sejam gerados na primeira execução do aplicativo
- Monitore o dashboard: Verifique o dashboard do Singular para os dados de rastreamento de desinstalação após 24-48 horas
- Teste a atualização do token: Limpe os dados do aplicativo e verifique se o token é atualizado corretamente
Problemas comuns
- Token não gerado: Verifique se as dependências do FCM foram adicionadas corretamente e se o Firebase está configurado em seu projeto
-
Token não atualizando:
Verifique se o callback
onNewToken()está implementado em seu FirebaseMessagingService - Dados ausentes: Certifique-se de que os dispositivos atendam aos requisitos do FCM (Android 4.1+, Google Play Services instalado)
- Erro de configuração: Confirme se o rastreamento de desinstalação está habilitado nas configurações da plataforma do Singular
Recursos adicionais: Para uma solução de problemas detalhada, consulte o Guia de configuração do rastreamento de desinstalação e a Documentação do Firebase Cloud Messaging .