Visão geral: a AppsFlyer usa notificações push silenciosas uma vez por dia para verificar se os aplicativos ainda estão instalados em dispositivos do usuário e conta os eventos de desinstalação que ocorrem para um aplicativo específico, atribuindo-os a uma fonte de mídia específica. A AppsFlyer fornece os dados brutos de desinstalação através de um relatório baixável, Pull API e Data Locker.
Benefícios da métrica de desinstalações
-
Compare a qualidade das fontes de mídia
A taxa de desinstalações é uma métrica que pode ajudar a comparar a qualidade dos usuários adquiridos de diferentes fontes de mídia, campanhas, anúncios únicos ou países. -
Proteja a privacidade dos usuários
Muitos anunciantes executam campanhas de reengajamento para reter usuários. No entanto, isso pode contradizer os termos de uso da app store. Se esse for o caso, use os dados de desinstalação para remover desinstaladores de audiências que passaram por retargeting.
Sistemas operacionais
O suporte ao recurso de Métrica de Desinstalação requer algum desenvolvimento em seus aplicativos.
Aqui estão as instruções do desenvolvedor para:
Dica
Quantos usuários desinstalam aplicativos e quando?
Veja a classificação completa por categoria/país aqui.
Importante
Em 29 de maio de 2019, o Google removeu as APIs do servidor e do cliente do GCM. Se você estiver integrando mensagens em um novo aplicativo, use o FCM. Se você usar o GCM, faça o upgrade para FCM. Depois de fazer o upgrade para o FCM, siga as instruções neste artigo para configurar a mensuração de desinstalação para Android.
Siga a documentação do Google para saber mais:
Métrica de desinstalações para Android
A métrica de desinstalação usando o Firebase Messaging é compatível a partir do Android SDK versão 4.7.0.
1. Obter a chave do servidor do Firebase
- Crie um projeto de aplicativo do Firebase para Android (se você ainda não tiver feito isso) ou migre seu projeto do Google Developer Console (siga as instruções lá). Para mais informações, acesse Firebase.
- Abra o Console do Firebase.
- Na página do console do Firebase , navegue até as configurações do projeto (clique na engrenagem ao lado de Visão geral do projeto no painel esquerdo da página).
- Na aba do Cloud Messaging, você verá duas chaves do servidor (veja a captura de tela abaixo):
- Copie a Chave do servidor.
2. Inserindo a Chave de servidor no painel da AppsFlyer
- Acesse o painel do seu aplicativo na plataforma da AppsFlyer.
- Selecione App Settings (Configurações do aplicativo) no menu à esquerda.
- Defina a Firebase Server Key (Chave do servidor do Firebase) com a chave do servidor que você acabou de copiar.
3. Configurando o Firebase-Messaging em seu aplicativo
- Baixe google-services.json do console do Firebase.
- Adicione o google-services.json ao diretório do módulo do seu aplicativo,
- Adicione regras ao seu arquivo build.gradle de nível de raiz para incluir o plugin google-services:
buildscript { // ... dependencies { // ... classpath 'com.google.gms:google-services:4.2.0' // google-services plugin } }
- Adicione a dependência do FCM ao seu arquivo build.gradle de nível de aplicativo:
dependencies { implementation 'com.google.firebase:firebase-messaging:17.3.4' } // ADD THIS AT THE BOTTOM apply plugin: 'com.google.gms.google-services
A versão mais recente do Firebase pode ser encontrada aqui: Firebase official doc.
Se você receber o erro "Could not find..", certifique-se de ter o último repositório do Google no Gerenciador do SDK para Android.
4. Implementar o serviço de métrica de desinstalação da AppsFlyer
Se um desenvolvedor integrar o FCM com o único objetivo de medir desinstalações com a AppsFlyer, ele poderá usar o serviço appsFlyer.FirebaseMessagingServiceListener, incluído em nosso SDK.
Para fazer isso, é necessário adicionar o serviço ao AndroidManifest.xml:
<application
<!-- ... -->
<service
android:name="com.appsflyer.FirebaseMessagingServiceListener">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<!-- ... -->
</application>
O appsflyer.FirebaseMessagingServiceListener estende a classe <>FirebaseMessagingService do Firebase, que é usada para receber o token de dispositivo do Firebase.
import com.appsflyer.AppsFlyerLib;
import com.google.firebase.messaging.FirebaseMessagingService;
public class MyNewFirebaseManager extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
// Sending new token to AppsFlyer
AppsFlyerLib.getInstance().updateServerUninstallToken(getApplicationContext(), s);
// the rest of the code that makes use of the token goes in this method as well
}
}
Esse serviço deve ser adicionado ao AndroidManifest.xml para funcionar: se o aplicativo estava usando o FCM antes de integrar o SDK da AppsFlyer, há grandes chances de que este serviço já tenha sido estendido e que o desenvolvedor só precise adicionar a seguinte linha ao método onNewToken()
:
AppsFlyerLib.getInstance().updateServerUninstallToken(getApplicationContext(), refreshedToken);
Além do mais, certifique-se de ter adicionado o serviço relevante ao AndroidManifest.xml:
<service
android:name=".MyNewFirebaseManager">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Resolvendo a notificação push de desinstalação do Android não silenciosa
Substituir o método onMessageReceived
do Firebase e implementar sua própria lógica nele pode fazer com que as notificações push de desinstalação não sejam silenciosas. Isso pode impactar a experiência do usuário. Para evitar isso, verifique se a mensagem contém af-uinstall-tracking
. Veja o seguinte exemplo:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if(remoteMessage.getData().containsKey("af-uinstall-tracking")){
return;
} else {
// handleNotification(remoteMessage);
}
}
5. Usar o ProGuard com a métrica de desinstalação
Se você estiver usando o ProGuard, adicione a seguinte regra:
-dontwarn com.appsflyer.**
-keep public class com.google.firebase.messaging.FirebaseMessagingService {
public *;
}
6. Teste de métrica de desinstalação do Android
A métrica Desinstalação está disponível no painel Visão geral.
A lista de usuários que desinstalaram o aplicativo está disponível no relatório de dados brutos de desinstalação.
Para testar a métrica de desinstalação do Android:
- Instale o aplicativo.
-
Desinstalar o aplicativo. Observação: Você pode desinstalar o aplicativo imediatamente após instalá-lo.
O evento de desinstalação é registrado dentro de 24 horas, pois a mensuração de desinstalação é processadadiariamente.
Se o aplicativo for reinstalado durante esse tempo, nenhum evento de desinstalação será registrado.
O evento de desinstalação do aplicativo leva até 48 horas para aparecer nos relatórios raw data e no Relatório de Performance Agregada no seu dashboard da AppsFlyer.
Independentemente de o aplicativo Android estar disponível no Google Play, com envio pendente ou mesmo fora da loja, o teste é o mesmo.
7. Desative a mensuração de desinstalações
Se uma chave de servidor FireBase/GCM for oferecida, a mensuração de desinstalações do aplicativo será ativada por padrão. Os proprietários de aplicativos podem desativar esse recurso através do dashboard.
Atenção! Para que uma desinstalação seja relatada, a opção "Ativar a mensuração de desinstalações" precisa estar ativada durante a instalação do aplicativo. Dispositivos que instalaram o aplicativo enquanto a opção "Ativar mensuração de desinstalações" estava desabilitada não incluirão a desinstalação do aplicativo no relatório.
Para desabilitar a mensuração de desinstalações:
- Na AppsFlyer, acesse Configurações do aplicativo.
- Vá até Atribuição > Desinstalações e desative Ativar mensuração de desinstalação.
Nota
Os dados do evento de desinstalação em iOS da AppsFlyer dependem do serviço Apple Push Notification (APN). Devido a considerações de privacidade, o APN relata em tempo real quando um usuário remove um aplicativo, apenas se pelo menos oito dias se passaram desde a instalação. Isso significa que os dados de desinstalação do iOS estão disponíveis somente após o dia 8.
Clique aqui para saber mais.
Métrica de desinstalações para iOS
Importante!
Para usar este recurso, é necessário possuir a versão 4.5.0 ou superior do SDK. Se você deseja medir as desinstalações no iOS 13 e superior, é necessário possuir no mínimo a versão 4.10.4 do SDK.
Este recurso também exige um certificado p12. Certificados p8 não são compatíveis.
Nota
Usuários que rejeitam permissões de notificações push não podem realizar a métrica de desinstalações.
1. Encontrando seu aplicativo
2. Se você ainda não registrou uma ID do aplicativo, clique no símbolo de + e preencha o formulário.
3. Verifique a caixa de seleção Notificações push
4. Ao expandir o aplicativo, há duas configurações para notificações push com ícones de status amarelos ou verdes.
5. Clique em Settings (Configurações) para continuar.
Nota
O botão Settings (Configurações) pode ter o nome Edit (Editar) se as notificações push já tiverem sido configuradas antes. Se o botão Settings/Edit button (Configurações/Editar) não estiver disponível, é provável que você não seja o agente da equipe ou um administrador. A pessoa que originalmente criou a conta do desenvolvedor é o agente da equipe e ele executa as etapas restantes desta seção.
2. Gerando seu certificado
1. Selecione SSL do serviço de notificação push da Apple (sandbox e produção) na opção de certificados Produção. Se você estiver usando VoIP para notificações push, selecione Certificado de serviços VoIP.
2. Clique em Create Certificate (Criar certificado) na opção Certificado SSL de Produção.
3. Após clicar em Create Certificate(Criar certificado), selecione Add iOS Certificate Assistant(Adicionar Assistência de Certificado iOS). Siga as instruções no assistente e clique em Continue(Continuar).
4. Usando a solicitação de Assinatura de certificado que acabou de ser criada, gere o certificado SSL para APNS Push.
5. Após o botão Download aparecer, o certificado estará pronto para baixar. Talvez seja necessário recarregar a página para atualizá-la. Baixe o certificado recém criado.
6. Abra o certificado. Abrir o certificado abrirá o Acesso ao Conjunto de Chaves.
No Acesso ao Conjunto de Chaves, seu certificado é exibido em My Certificates(Meus certificados). Caso negativo, verifique se o certificado está localizado em Certificates (Certificados).
Nota
Somente administradores de conta podem fazer upload ou alterar o certificado p12.
3. Renovando seu certificado
Se você estiver renovando seu Certificado SSL para Desenvolvimento ou Produção Push, siga os passos destacados acima como se você estivesse fazendo upload do certificado pela primeira vez. Não há necessidade de anular o certificado anterior para fazer esta alteração. Pode haver dois certificados de produção ao mesmo tempo, de modo a permitir que você continue usando o certificado antigo enquanto faz o upload do novo.
4. Exporte o arquivo P12
A etapa final após retornar ao painel da AppsFlyer é salvar seu certificado de assinatura como um arquivo .p12.
1. Selecione o certificado que acabou de ser adicionado ao Acesso ao Conjunto de Chaves
2. Acesse Arquivo> Exportar itens
3. Selecione My Certificates (Meus certificados) no menu Category (Categoria) no lado inferior esquerdo.
Se My Certificates (Meus certificados) não estiver destacado, você não pode exportar um certificado como um arquivo .p12.
3. Ao salvar o arquivo, use o formato Personal Information Exchange (Troca de informações pessoais) (.p12)
4. Certifique-se de que ele indique Apple Push Services e apareça como seguir:
5. Acesse o painel de seu aplicativo na plataforma da AppsFlyer.
6. SelecioneApp Settings (Configurações do aplicativo) no menu à esquerda.
7. Clique no ícone de upload e selecione o arquivo P12 para fazer o upload.
8. (opcional) Se o certificado P12 estiver protegido por senha, preencha a senha em Senha do Certificado P12.
9. Clique em Validate (Validar) para enviar o certificado para a AppsFlyer verificar sua validadz.
10. Clique em Save Settings(Salvar Configurações).
5. integração com o SDK
É necessário registrar as notificações push no nível de código do aplicativo para permitir a coleta de dados de desinstalações.
//add UserNotifications.framework
import UserNotifications
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//...
// iOS 10 support
if #available(iOS 10, *) {
UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in }
application.registerForRemoteNotifications()
}
// iOS 9 and iOS 8 support
else if #available(iOS 8, *), #available(iOS 9, *) {
UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil))
UIApplication.shared.registerForRemoteNotifications()
}
// iOS 7 support
else {
application.registerForRemoteNotifications(matching: [.badge, .sound, .alert])
}
return true
}
// Called when the application sucessfuly registers for push notifications
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
AppsFlyerTracker.shared().registerUninstall(deviceToken)
}
Adicione o seguinte código ao seu AppDelegate.m:
- #import <UserNotifications/UserNotifications.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// The userNotificationTypes below is just an example and may be changed depending on the app
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
}];
[[UIApplication sharedApplication] registerForRemoteNotifications];
// if you do not use push notificaiton in your app, uncomment the following line
//application.applicationIconBadgeNumber = 0;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[[AppsFlyerTracker sharedTracker] registerUninstall:deviceToken];
}
}
Em AppDelegate.h, insira o código a seguir para adicionar UNUserNotificationCenterDelegate à declaração da interface:
#import <AppsFlyerLib/AppsFlyerTracker.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, AppsFlyerTrackerDelegate>
Os trechos de código acima solicitam permissões do usuário para enviar notificações push. No entanto, se você estiver usando apenas notificações push em segundo plano para medir desinstalações, não há necessidade de solicitar a permissão do usuário. Isso ocorre porque essas notificações push são notificações push silenciosas que não precisam pedir a permissão dos usuários.
Permissão do usuário para notificações push em segundo plano
Se você estiver usando apenas notificações push silenciosas, certifique-se de habilitar Notificações remotas em Modos de plano de fundo nos Recursos do seu aplicativo:
- No XCode, selecione seu projeto
- Selecione seu destino
- Alterne para a aba Recursos
- Ative Modos de plano de fundo
- Marque Notificações remotas
6. Notificações push
Certifique-se de adicionar a notificação push na guia de capacidades do XCode. Sem ela, o deviceToken não é coletado.
7. Testando desinstalações
Para testar a métrica de desinstalação do iOS:
- Instale o aplicativo.
- Desinstale o aplicativo. Atenção! Você pode desinstalar o aplicativo imediatamente após instalá-lo.
Ao testar desinstalações do Xcode ou TestFlight, é importante informar ao SDK que o token é gerado em um ambiente de área restrita. Use as seguintes APIs:
AppsFlyerTracker.shared().useUninstallSandbox = true
[AppsFlyerTracker sharedTracker].useUninstallSandbox = true;
Atenção! As desinstalações não aparecem imediatamente no painel da AppsFlyer:
- Demora em média 9 dias para que as desinstalações apareçam nos relatórios
- Pode demorar mais de um mês para que as desinstalações provenientes de ambientes de área restrita apareçam nos relatórios
Além disso, a data da desinstalação é a data em que a desinstalação é reportada. Veja a próxima seção para saber mais.
8. Visualizando dados de desinstalação no painel da AppsFlyer
A métrica de desinstalações é exibida no painel principal, na tabela Desempenho agregado.
Devido a uma alteração recente no serviço Apple Push Notification, o tempo que leva para as desinstalações aparecerem no dashboard é de no mínimo 9 dias. A AppsFlyer atualiza e agrega métricas para desinstalações a cada 24 horas
Exemplo
- Dia 1 - um usuário instala seu aplicativo
- Dia 4 - o usuário desinstala seu aplicativo
- Dia 12 - o serviço de notificação push da Apple reporta a remoção do aplicativo 8 dias após a desinstalação
- Dia 13 - os dados de desinstalação aparecem no dashboard da AppsFlyer e nos dados brutos
Para obter mais detalhes, consulte a seção Mensuração de desinstalações do aplicativo para iOS do Guia de integração do SDK.
9. Desative a mensuração de desinstalações
Se um certificado P12 for oferecido e validado, a mensuração de desinstalações do aplicativo será habilitada por padrão. Os proprietários de aplicativos podem desativar esse recurso através do dashboard.
Atenção! Para que uma desinstalação seja relatada, a opção "Ativar a mensuração de desinstalações" precisa estar ativada durante a instalação do aplicativo. Dispositivos que instalaram o aplicativo enquanto a opção "Ativar mensuração de desinstalações" estava desabilitada não incluirão a desinstalação do aplicativo no relatório.
Para desabilitar a mensuração de desinstalações:
- Na AppsFlyer, acesse Configurações do aplicativo.
- Vá até Atribuição > Desinstalações e desative Ativar mensuração de desinstalação.
Postbacks de eventos de desinstalação
A AppsFlyer permite que você envie um postback de evento de desinstalação, para cada usuário de desinstalação conhecido, aos parceiros com quem você trabalha. O evento de desinstalação é chamado de af_uninstall
no painel da AppsFlyer.
Mapeamento do evento de desinstalação
Você pode mapear o evento af_uninstall
assim como mapeia qualquer evento in-app de seu aplicativo.
Como com qualquer evento in-app, a AppsFlyer pode enviar o postback somente se o evento realmente ocorrer e for registrado pela AppsFlyer. Portanto, mapear af_uninstall só funciona com implementações de desinstalações concluídas. Se você não encontrar desinstalações na página de visão geral ou nos relatórios de dados brutos de desinstalações, nenhum postback de desinstalação será enviado aos parceiros, mesmo que tenha mapeado o evento af_uninstall
.
Timing do af_uninstall
Ao contrário dos postbacks para eventos in-app regulares, o evento af_uninstall
não é enviado em tempo real.
Nos postbacks de dados brutos e parceiros da AppsFlyer, o tempo do evento registrado do af_uninstall
é o momento em que a AppsFlyer é notificada sobre a desinstalação.
- Para dispositivos Android: 24-48 horas após a desinstalação real do aplicativo
- Para dispositivos iOS: 9-11 dias após a desinstalação real do aplicativo
Limitações
Eventos af_uninstall não são incluídos nos relatórios postbacks de eventos in-app.
O evento af_uninstall não está disponível atualmente para todos os parceiros.
Se você quiser mapeá-lo com um parceiro, mas o evento não estiver disponível para o usuário, entre em contato com seu CSM dedicado ou envie um e-mail para hello@appsflyer.com.
Se você for um parceiro e quiser receber eventos af_uninstall, entre em contato com seu PDM dedicado ou envie um e-mail para partners@appsflyer.com.