Integração do SDK da AppsFlyer - Unity

  • Anunciantes
  • Desenvolvedores

Official_unity_logo.png

Versão atual do SDK do Unity: v4.20.3
Compatível com SDK do Android v4.10.2 e SDK do iOS v4.10.3

1. Visão geral

O SDK do Unity da AppsFlyer oferece funcionalidade de instalação de aplicativo móvel e de gravação de eventos para projetos do Unity para Android e iOS. Você pode gravar instalações, atualizações e sessões e também gravar eventos pós-instalações (incluindo compras in-app, níveis de jogo, etc.) para avaliar o ROI e os níveis de engajamento do usuário.

Aplicativos móveis, que são desenvolvidos na plataforma Unity, podem integrar o SDK da AppsFlyer uma vez e as instalações de atribuição para aplicativos gerados pelo Android e iOS. O guia a seguir detalha como integrar o SDK da AppsFlyer ao 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 BÁSICA do SDK, isto é, somente atribuição de instalações
  • É ALTAMENTE RECOMENDÁVEL implementar o capítulo Gravação de eventos in-app
  • A implementação do restante dos recursos descritos é OPCIONAL, embora alguns deles possam ser necessários para você, dependendo da lógica de negócios do seu aplicativo. Por exemplo, a gravação de receita ou a obtenção dos dados de conversão na primeira inicialização podem ser vitais para o fluxo do 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


Frameworks 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 conseguirá atribuir instalações ao Facebook, Twitter e à 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 atribuir 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. Gravação de eventos in-app

Eventos in-app fornecem insights sobre o que está acontecendo em seu aplicativo. É aconselhável investir tempo para definir os eventos que você deseja avaliar para permitir medir o ROI (retorno sobre o investimento) e LTV (valor de vida útil).

A gravação de eventos in-app é executada chamando trackRichEvent com parâmetros de nome e valor do evento. Consulte a documentação de Eventos in-apppara 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 gravação:

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. Realizar deep linking

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

AndroidiOS
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>

Para receber seus dados de links diretos, você deve implementar o callback onAppOpenAttribution (encontrado na classe AppsFlyerTrackerCallbacks) que é chamado pelo SDK da AppsFlyer. Ele retorna os parâmetros de Onelink/link de atribuição utilizados para acionar a abertura do aplicativo. Em seguida, você pode analisar os valores e aplicar a lógica para acionar a página do aplicativo relevante.

public void onAppOpenAttribution(string validateResult) {
	print ("AppsFlyerTrackerCallbacks:: got onAppOpenAttribution = " + validateResult);
}

6. Gravação de receita

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 valor de receita deve ser semelhante a 1234,56, por exemplo.

Gravação de receita negativa

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

AppsFlyer.trackRichEvent(AFInAppEvents.PURCHASE, 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 ID de usuário cliente o quanto antes, pois ela é associada apenas a eventos relatados após sua configuração. A ID do cliente (Customer User ID) 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.

Google Advertising ID

A partir da versão 4.15.1 do SDK, a AppsFlyer coleta automaticamente a google_advertising_id. O requisito para coletar a ID de publicidade do Google é relevante apenas para as versões do SDK anteriores à versão 4.15.1.

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. No entanto, aplicativos com Google Play Services devem evitar a coleta de IMEI, pois esta é 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 - FirebaseAndroid - GCMiOS
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.

Gravação de 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.

Atribuição de promoção cruzada

A AppsFlyer permite que você atribua e registre instalações originadas de uma promoção cruzada de um de seus aplicativos de dentro do aplicativo atual do usuário. Os aplicativos de promoção cruzada podem ser um fator de crescimento importante na condução de instalações adicionais para seus aplicativos.

Para obter detalhes, consulte o artigo Atribuição de promoção cruzada,aqui.

Atribuição de convite do usuário

A AppsFlyer permite que você atribua e registre instalações originadas de convites do usuário dentro do seu aplicativo. Permitir que os usuários existentes convidem seus amigos e contatos como novos usuários para seu aplicativo pode ser um fator de crescimento importante para seu aplicativo. Para obter detalhes, consulte o artigo de Atribuição de convite do usuário, 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 do Android Chamar o Listener (somente 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);

 Observações

  • Calling validateAndTrackInAppPurchase automatically generates an af_purchase in-app event, so you don't need to send this event yourself. 
  • 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);
A atribuição e a gravação de eventos podem ser reiniciadas chamando deviceTrackingDisabled novamente definido como false.

 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.

Atribuir 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 gravar instalações fora do Google Play, defina o canal/loja no AndroidManifest.xml do aplicativo com um canal único ou qualquer nome de loja para cada APK. O valor CHANNEL 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 obter mais detalhes sobre como gravar instalações para aplicativos fora da loja, leia aqui.

Exclusão (opt-out)

Em alguns casos extremos, convém encerrar todas as funções do SDK devido à conformidade legal e de privacidade. Isso pode ser conseguido com a APIisStopTracking. Depois que essa API é invocada, nosso SDK não se comunica mais com nossos servidores e deixa 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 toda e qualquer atribuição e gravação de evento. O uso dessa API afeta GRAVEMENTE sua atribuição, coleta de dados e mecanismo de deep linking.

Configuração de dados personalizados adicionais

A API setAdditionalData é necessária para integrar-se ao nível do SDK com várias plataformas de parceiros 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 definir programaticamente uma fonte de mídia pré-instalada, a partir 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

PlayerPrefs.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 medir os resultados das 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="UnityEngine">
    <type fullname="UnityEngine.AndroidJavaRunnableProxy" preserve="all" />
  </assembly>
</linker>

IMPL_APP_CONTROLLER_SUBCLASS

Se você estiver usando plug-ins adicionais que precisem substituir AppControllerClassName, modifique AppsFlyerAppController conforme descrito abaixo (objective-c):

+(void)load
{
  [AppsFlyerAppController plugin];
}

// Singleton accessor.
+ (AppsFlyerAppController *)plugin
{
  static AppsFlyerAppController *sharedInstance = nil;
  static dispatch_once_t onceToken;
  
  dispatch_once(&onceToken, ^{
    
    sharedInstance = [[AppsFlyerAppController alloc] init];
  });
  
  return sharedInstance;
}

//IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController)

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: 4 de 12

Comentários

0 comentário

Por favor, entrar para comentar.