Integração do SDK da AppsFlyer - Unity

  • Anunciantes
  • Desenvolvedores

Official_unity_logo.png

Versão atual do SDK da Unity:  v4.17.0
Compatível com SDK do Android v4.8.13 e SDK do iOS v4.8.7

1. Visão geral

O SDK da AppsFlyer fornece a funcionalidade de instalação de aplicativos móveis e de acompanhamento de eventos para Android, iOS, Windows Phone e muitas outras plataformas de desenvolvimento móvel.

Você pode acompanhar instalações, atualizações e sessões, e também acompanhar eventos pós-instalação (incluindo compras no aplicativo, níveis de jogos, etc) para avaliar o ROI e os níveis de engajamento do usuário.

Os aplicativos móveis desenvolvidos na plataforma Unity podem desfrutar uma vez da integração do SDK da AppsFlyer e do acompanhamento de aplicativos gerados tanto em Android quanto iOS. O guia a seguir detalha como integrar o SDK da AppsFlyer no seu código Unity para seus aplicativos iOS e Android.

 Nota

A AppsFlyer suporta integração com o Unity versão 5 ou superior

 Importante!

Google Play Install Referrer API é suportado a partir da v 4.16.0 do plugin Unity. Se você quiser usar o novo Referrer API, atualize o plugin para a versão 4.16.0 ou superior.

 Dica

  • Os capítulos 2 e 3 são OBRIGATÓRIOS para implementar a integração de SDK BÁSICO, isto é, somente atribuição de instalações
  • É ALTAMENTE RECOMENDÁVEL  implementar o capítulo Acompanhamento de eventos in-app
  • A implementação do restante dos recursos descritos é OPCIONAL, embora talvez você precise de algum deles dependendo da lógica de negócios de seu aplicativo. Por exemplo, acompanhamento de receitas ou obtenção de dados de conversão na primeira inicialização pode ser fundamental para o fluxo de seu aplicativo

2. Início rápido

2.1 Fazendo o download do plugin Unity da AppsFlyer

Você pode encontrar o plugin no Github aqui: https://github.com/AppsFlyerSDK/Unity

Abaixo apresentamos as instruções de integração para usar o plugin Unity da AppsFlyer.

2.2 Instalando o plugin

Abaixo apresentamos as instruções de instalação do plugin da AppsFlyer:

  1. Importe o AppsFlyerUnityPlugin.unitypackage para o seu projeto Unity.
  2. Vá para Recursos >> Importar Pacote >> Pacote Personalizado
  3. Selecione o arquivo AppsFlyerUnityPlugin.unitypackage.

2.3 Configuração obrigatória para Android e iOS

Configuração para Android


Configurando permissões o receptor AF no AndroidManifest.xml:

<!-- receiver should be inside the <application> tag -->
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
        <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
</receiver>
<!-- Mandatory permission: -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />


Definindo as permissões necessárias

O AndroidManifest.xml inclui a seguinte permissão:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional : -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


Configurando o BroadcastReceiver no AndroidManifest.xml

As duas opções a seguir estão disponíveis para implementar o receptor de broadcast da referência de instalação:

Usando um receptor de broadcast único Usando um receptor de broadcast múltiplo

Se você não tiver um receptor ouvindo no INSTALL_REFERRER, no AndroidManifest.xml, adicione o seguinte receptor dentro da tag do aplicativo:

<receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true">
    <intent-filter>
         <action android:name="com.android.vending.INSTALL_REFERRER" />
     </intent-filter>
</receiver>

Configuração para o iOS


Estruturas e bibliotecas vinculadas


Após criar o projeto no Unity para o xCode, você deve adicionar Security.Framework às Estruturas e bibliotecas vinculadas do xCode se a estrutura não tiver sido adicionada anteriormente.


Anúncios do Apple Search do iOS

Adicione o seguinte:

AdSupport.framework
A AppsFlyer coleta o IDFA somente se você incluir essa estrutura. Se essa estrutura não for adicionada, você não consegue acompanhar o Facebook, o Twitter e a maioria das outras redes de anúncios.
iAd.framework

É altamente recomendável adicionar essa estrutura ao seu projeto de aplicativo, já que ela é obrigatória para acompanhar os anúncios do Apple Search.

3. Inicialização do SDK

Nos métodos Start/Init defina a Dev key da AppsFlyer e os IDs dos aplicativos usados pelo iTunes e Google Play. Observe que você precisa definir o ID do aplicativo iOS com dígitos apenas, sem o prefixo "id".

Adicione o seguinte código:

Plugin Unity 4.15.1 e superior Plugin Unity 4.14.3 e inferior
void Start () {
/* Mandatory - set your AppsFlyer’s Developer key. */
AppsFlyer.setAppsFlyerKey ("YOUR_APPSFLYER_DEV_KEY");
/* For detailed logging */
/* AppsFlyer.setIsDebug (true); */
#if UNITY_IOS
   /* Mandatory - set your apple app ID
      NOTE: You should enter the number only and not the "ID" prefix */
   AppsFlyer.setAppID ("YOUR_APP_ID_HERE");
   AppsFlyer.trackAppLaunch ();
#elif UNITY_ANDROID
   /* Mandatory - set your Android package name */
   AppsFlyer.setAppID ("YOUR_ANDROID_PACKAGE_NAME_HERE");
   /* For getting the conversion data in Android, you need to add the "AppsFlyerTrackerCallbacks" listener.*/
   AppsFlyer.init ("YOUR_APPSFLYER_DEV_KEY","AppsFlyerTrackerCallbacks");
#endif
}

 Importante!

  • Para o Android, AppsFlyer.init inclui chamada para trackAppLaunch. Portanto, não chame trackAppLaunch na compilação Android do plugin Unity.
  • No iOS, a resposta dos dados de conversão é acionada na classe AppsFlyerTrackerCallbacks.cs.

4. Acompanhamento de eventos no aplicativo

Eventos no aplicativo fornecem insights sobre o que está acontecendo em seu aplicativo. É aconselhável investir tempo para definir os eventos que deseja avaliar para permitir que o acompanhamento do ROI (Retorno sobre o investimento) e do LTV (Valor de vida útil).

O acompanhamento de eventos no aplicativo é realizado chamando trackRichEvent com o nome do evento e os parâmetros de valor. Consulte a  documentação Eventos in-app para mais detalhes.

 Nota

Um nome de evento no aplicativo não deve ultrapassar 45 caracteres. Nomes de eventos com mais de 45 caracteres não aparecem no painel, mas apenas nos Dados brutos e nas APIs de pull e push.


Exemplo de evento de acompanhamento:

System.Collections.Generic.Dictionary<string, string> purchaseEvent = new   
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add ("af_currency", "USD");
purchaseEvent.Add ("af_revenue", "0.99");
purchaseEvent.Add ("af_quantity", "1");
AppsFlyer.trackRichEvent ("af_purchase", purchaseEvent);

 Nota

A AppsFlyer suporta caracteres não pertencentes ao Inglês com eventos no aplicativo, ou com qualquer outra API de SDK, começando da versão 4.15.1 do SDK para Unity.

5. Acompanhamento de links diretos (deep linking)

Para os links diretos, siga as instruções conforme seu sistema operacional.

Android iOS
Adicione o seguinte ao seu arquivo de manifesto:

<activity android:name="com.appsflyer.GetDeepLinkingActivity" android:exported="true">
 <intent-filter>
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />
   <data android:scheme="your_scheme" />
 </intent-filter>
</activity>

6. Acompanhamento de receitas

Use o parâmetro de evento AFInAppEvents.REVENUE para contabilizar receitas como parte de um evento no aplicativo. Você pode preenchê-lo com qualquer valor numérico, positivo ou negativo.

 Nota

O AFInAppEvents.REVENUE (equivalente a usar af_revenue) é o ÚNICO parâmetro de evento que é considerado na AppsFlyer como receita real nos dados brutos e no painel. Para mais detalhes, clique aqui.

 Exemplo

Evento de receita no aplicativo
AppsFlyer.trackRichEvent(AFInAppEvents.LEVEL_ACHIEVED, new Dictionary<string, string>(){
	{AFInAppEvents.CONTENT_ID, "1234567"},
	{AFInAppEvents.CONTENT_TYPE, "category_a"},
	{AFInAppEvents.REVENUE, "1.99"},
	{AFInAppEvents.CURRENCY, "USD"}
});

 Importante!

NÃO formate o valor de receita de forma alguma. Ele não deve conter separadores de vírgula, símbolo de moeda ou texto. Um evento de receita deve ser semelhante a 1234.56, por exemplo.

Acompanhamento de receitas negativas

Se você precisar acompanhar receitas negativas, por exemplo, quando um usuário cancela uma compra ou recebe um reembolso, você pode enviar receitas negativas.

AppsFlyer.trackRichEvent(AFInAppEvents.LEVEL_ACHIEVED, new Dictionary<string, string>(){
	{AFInAppEvents.CONTENT_ID, "1234567"},
	{AFInAppEvents.CONTENT_TYPE, "category_a"},
	{AFInAppEvents.REVENUE, "-1.99"},
	{AFInAppEvents.CURRENCY, "USD"}
});

 Nota

Observe o seguinte no código abaixo:

  1. O valor da receita é precedido por um sinal de menos.
  2. O nome do evento tem um valor único de "cancel_purchase" – para permitir que você identifique eventos de receitas negativas no painel e relatórios de dados brutos

7. Obter dados de conversão

A AppsFlyer permite que você acesse os dados de conversão dos usuários em tempo real diretamente no nível do SDK. Isso possibilita que você personalize a página inicial que um usuário visualiza na primeira vez em que o aplicativo é aberto após uma nova instalação do aplicativo.

Para carregar os dados de conversão da AppsFlyer dos seus servidores:

  1. Adicione um GameObject vazio.
  2. Anexe-o ao AppsFlyerTrackerCallbacks.cs que está incluído no projeto (você deve dar o nome de AppsFlyerTrackerCallbacks a esse gameobject).
Plugin Unity > 4.15.1 para Android Plugin Unity < 4.14.3 para Android iOS
/*Para obter os dados de conversão no Android, você precisa adicionar este listener. to the init() method*/
AppsFlyer.init ("YOUR_DEV_KEY","AppsFlyerTrackerCallbacks");


No Android, você pode mover os métodos do AppsFlyerTrackerCallbacks.cs para outra classe e chamar essa classe em seu listener.

Você deve usar exatamente os mesmos namespaces do método que aparece no AppsFlyerTrackerCallbacks.

8. Identificadores de usuários

Obter ID de dispositivo da AppsFlyer

A identificação de dispositivo única da AppsFlyer é criada para cada nova instalação de um aplicativo. Use a seguinte API para obter a identificação única da AppsFlyer:

public String getAppsFlyerId();


Exemplo de uso:

string AppsFlyerUID = AppsFlyer.getAppsFlyerId();

Definir ID de usuário cliente

Defina a identificação do usuário conforme usada pelo aplicativo. 

Para definir a identificação do usuário, chame o método a seguir:

AppsFlyer.setCustomerUserID("someId");

 Nota

A customerUserID DEVE ser definida antes do trackAppLaunch/init. Recomenda-se definir sua identificação de usuário cliente o quanto antes, pois ela é associada apenas a eventos relatados após sua configuração. A ID de usuário cliente também pode ser usada para concluir integrações com plataformas analíticas como Mixpanel e Swrve.

 Importante!

Para iOS – certifique-se de definir o ID de usuário cliente sempre que o aplicativo for inicializado, antes de chamar trackAppLaunch

Para mais informações sobre ID de usuário cliente, clique aqui.

Definir o e-mail do usuário

Atualmente indisponível no Unity.

Google Advertising ID

A partir da versão 4.8.0 do SDK, a AppsFlyer coleta automaticamente a google_advertising_id. O requisito para coletar esse código de publicidade do Google é relevante apenas para as versões 4.7.X ou inferiores do SDK.

IMEI e Android ID

Por padrão, o IMEI e o Android ID não são coletados pelo SDK se a versão do SO for superior à KitKat (4.4) e se o dispositivo tiver o Google Play Services (nas versões 4.16.4 ou anterior do SDK do Unity o aplicativo específico exigia GPS). 

Para explicitamente enviar essas IDs à AppsFlyer, os desenvolvedores podem usar as seguintes APIs:

AppsFlyer.setAndroidIdData(string)
AppsFlyer.setImeiData(string)

Se o aplicativo NÃO tiver o Google Play Services, o SDK coleta o IMEI e o Android ID. Contudo, aplicativos com Google Play Services devem evitar a coleta de IMEI, pois isso é uma violação da política do Google Play.

Os desenvolvedores podem cancelar a colera de IMEI e Android ID usando estas APIs:

AppsFlyer.setCollectAndroidID(bool) 
AppsFlyer.setCollectIMEI(bool)

 Aviso

Pelo menos um identificador de dispositivo, GAID, Android ID ou IMEI, DEVE ser coletado para permitir atribuição correta.

IDFA e IDFV

A AppsFlyer coleta automaticamente o IDFA (identificador para anunciantes) e o IDFV (identificador para fornecedores) se o AdSupport.framework estiver incluído no aplicativo.

9. Recursos opcionais

Medir desinstalações

Para a Medição de desinstalações, siga as instruções conforme seu sistema operacional.

Android - Firebase Android - GCM iOS
1.  Baixe o SDK do Firebase do Unity em: https://firebase.google.com/docs/unity/setup
2.  Importe FirebaseMessaging.unitypackage para o projeto.
3.  Importe google-services.json para o projeto (obtido no console do Firebase)

 Nota

Os receptores do manifesto devem ser automaticamente adicionados ao SDK do Firebase do Unity.


4.  Na classe do Unity que está processando o código da AppsFlyer, adicione o seguinte:
using Firebase.Messaging;
using Firebase.Unity;

5.  Adicione ao método Start():
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;

6.  Adicione o seguinte método:
public void OnTokenReceived
    (object sender, Firebase.Messaging.TokenReceivedEventArgs token) { 
        AppsFlyer.updateServerUninstallToken (token.Token);
}

 

 Aviso

Os usuários que implementam o SDK do Firebase do Unity não devem adicionar a seguinte chamada de método para enableUninstallTracking(“SenderID”), já que o SDK do Firebase obterá o identificador do remetente do arquivo google-services.json que acionamos anteriormente. Adicionar esse método pode ocasionar um aviso de depuração do Android.

Acompanhamento das notificações por push

A AppsFlyer permite que você avalie notificações por push como parte de uma campanha de redirecionamento.

handlePushNotification(Dictionary<string, string> payload)

O payload de dados deve incluir um objeto: af com a string de chave-valor relevante:

Exemplo:

{  
   "data":{  
      "score":"5x1",
      "time":"15:10",
      "af":{  
         "c":"test_campaign",
         "is_retargeting":"true",
         "pid":"push_provider_int"
      }
   }
}

// with deep-linking
{
   "data":{
      "score":"5x1",
      "time":"15:10",
      "click_action":"com.example.someAction",
      "af":{
         "c":"test_campaign",
         "is_retargeting":"true",
         "pid":"push_provider_int"
      }
   }
}

 Nota

Para mais informações sobre medição de notificações por push, leia aqui.

Acompanhamento de promoções cruzadas

A AppsFlyer permite que você acompanhe e atribua instalações originadas de uma promoção cruzada de um de seus aplicativos dentro do aplicativo atual do usuário. Aplicativos de promoções cruzadas podem ser um importante fator de crescimento para impulsionar novas instalações para seus aplicativos.

Para mais detalhes, consulte o artigo Acompanhamento de promoção cruzada aqui.

Acompanhamento de convites de usuários

A AppsFlyer permite que você acompanhe e atribua instalações originadas de convites de usuários dentro de seu aplicativo. Permitir que seus usuários existentes convidem amigos e contatos como novos usuários do seu aplicativo pode ser um fator de crescimento fundamental para o seu aplicativo.

Para mais detalhes, consulte o artigo Acompanhamento de convites de usuários aqui.

Definir código de moeda

Você pode definir um código de moeda global usando a API abaixo, além de códigos de moeda específicos que podem ser usados como parte de cada evento no aplicativo enviado para a AppsFlyer. O código de moeda global é usado quando af_currency

AFInAppEvents.CURRENCY

não for enviado como parte de um evento no aplicativo.

USD é o valor padrão. Você pode encontrar códigos de moeda ISO aceitáveis aqui.

Use a seguinte API para definir o código de moeda:

public void setCurrencyCode(String currencyCode);

Exemplo de uso:

setCurrencyCode(string currencyCode)

Validação de instalações no aplicativo

Para Validação do recebimento de compras no aplicativo, siga as instruções de acordo com seu sistema operacional.

Chamada Android Chamada do Listener (apenas no Android) iOS
//Para obter os callbacks
//AppsFlyer.createValidateInAppListener ("AppsFlyerTrackerCallbacks", 
"onInAppBillingSuccess", "onInAppBillingFailure"); AppsFlyer.validateReceipt(string publicKey, string purchaseData,
string signature, string price, string currency, Dictionary additionalParametes);

A resposta de compra validada é acionada na classe AppsFlyerTrackerCallbacks.cs

Anonimizar dados de usuários

A AppsFlyer fornece um método para anonimizar ítens identificadores dos usuários em suas análises. Esse método está em conformidade com os mais recentes requisitos de privacidade e cumpre as políticas de privacidade e dados do Facebook. O padrão é NÃO, ou seja, a anonimização NÃO está habilitada por padrão.

Use esta API durante a inicialização do SDK para anonimizar explicitamente as instalações, eventos e sessões de um usuário:

public void setDeviceTrackingDisabled(boolean isDisabled);

Exemplo de uso:

AppsFlyer.setDeviceTrackingDisabled(true);
O acompanhamento pode ser reiniciado chamando deviceTrackingDisabled novamente definido como falso.

 Aviso

A exclusão de usuários prejudica GRAVEMENTE suas informações de atribuição.
Use essa opção APENAS em regiões que legalmente impedem você de coletar informações de seus usuários.

Personalizar o tempo entre sessões

Por padrão, deve haver um intervalo de, no mínimo, 5 segundos entre duas inicializações de aplicativos para contabilizar como duas sessões separadas (saiba mais sobre contabilização de sessões). 
No entanto, é possível usar a seguinte API para definir seu valor personalizado para o tempo mínimo necessário entre sessões:
setMinTimeBetweenSessions(int seconds)


Exemplo de Utilização:

AppsFlyer.setMinTimeBetweenSessions(10);

Observe que definir um alto valor para o tempo personalizado entre inicializações pode gerar um impacto negativo nas APIs que dependem de dados de sessões, como links diretos.

Sessões em segundo plano para aplicativos utilitários

Atualmente indisponível no Unity.

Acompanhar aplicativos fora da loja

 Nota

O Google Play é a loja padrão. Se você estiver publicando seu aplicativo apenas no Google Play, ignore esta seção.

Para acompanhar instalações fora do Google Play, defina o canal/loja no AndroidManifest.xml do aplicativo com um único canal ou qualquer nome de loja para cada APK. O valor do CANAL diferencia maiúsculas de minúsculas.

Exemplos:

<meta-data android:name="CHANNEL" android:value="Amazon" />
<meta-data android:name="CHANNEL" android:value="Standalone"/>
<meta-data android:name="CHANNEL" android:value="Verizon" />

 Nota

Você deve definir o valor do CANAL no painel da AppsFlyer ao configurar o aplicativo.

Coloque a tag de meta-dados antes da tag </application>.

Para mais detalhes sobre como acompanhar as instalações para aplicativos fora da loja, leia aqui.

Exclusão (opt-out)

Em alguns casos extremos você pode querer encerrar todos os acompanhamentos de SDK devido à conformidade legal e de privacidade. Você pode fazer isso com a API isStopTracking. Após a execução desta API, nosso SDK não se comunicará mais com nossos servidores e parará de funcionar.

AppsFlyer.stopTracking(true);

Em qualquer evento, o SDK pode ser reativado chamando a mesma API passando o valor "false".

Há vários cenários diferentes para a exclusão (opt-out) de usuários. É altamente recomendado seguir as instruções exatas do cenário relevante para seu aplicativo.

 Aviso

Use esta API somente quando quiser ignorar totalmente este usuário em todo e qualquer acompanhamento. Usar esta API afeta GRAVEMENTE sua atribuição, coleta de dados e mecanismo de links diretos.

Configuração de dados personalizados adicionais

A API setAdditionalData é necessária para integrar-se ao nível do SDK com várias plataformas externas, incluindo Segment, Adobe e Urban Airship. Use esta API somente se o artigo de integração da plataforma afirmar especificamente que a API setAdditionalData é necessária.
Veja a seguir um exemplo de código para a implementação do setAdditionalData no Unity:

Dictionary<string, string> CustomDataMap = new Dictionary<string, string>();
CustomDataMap.Add("custom_param_1", "value_of_param_1");
AppsFlyer.setAdditionalData(CustomDataMap);

Atribuição para aplicativos pré-instalados

Apenas no Android

Você pode configurar de forma programática uma fonte de mídia pré-instalada, do Unity, usando a seguinte API:

setPreinstallAttribution(string MediaSource, string Campaign, string Site_Id);

Para mais detalhes sobre implementações nativas, clique aqui.

 Importante!

Ao usar o SDK do Unity da AppsFlyer, evite

PlayerPrebs.DeleteAll()

10. Testando sua integração

Para instruções sobre o teste das suas integrações de acordo com seu sistema operacional, clique em Teste do Android ou Teste do iOS.

Agora, você pode começar a acompanhar as fontes de mídia com as quais você trabalha.

11. Erros conhecidos

ProGuard

Se você estiver utilizando o ProGuard para Android e se deparar com um aviso relacionado à nossa classe AFKeystoreWrapper, adicione o seguinte código ao seu arquivo de regras do ProGuard:

-keep class com.appsflyer.** { *; }

IL2CPP

Para excluir nosso SDK do Managed bytecode stripping com IL2CPP, adicione o seguinte código ao link.xml:

<linker>
    <assembly fullname="mscorlib">
        <type fullname="AppsFlyer.*" preserve="all"/>
    </assembly>
…
</linker>

12. Projeto de exemplo do Unity

Para visualizar um projeto de exemplo do Unity, clique aqui.

Esse artigo foi útil?
Usuários que acharam isso útil: 3 de 8

Comentários

0 comentário

Por favor, entrar para comentar.