Esta página descreve como inicializar a biblioteca no código do seu jogo e verificar se ela está fazendo upload de dados para o Google Play. Para ver mais informações sobre funções específicas da biblioteca, consulte a documentação de referência.
Inicializar a biblioteca
Em um método de inicialização no começo do jogo, inicialize a biblioteca
instanciando AndroidPerformanceTuner
e chamando
o método
Start()
:
using Google.Android.PerformanceTuner;
using UnityEngine;
public class SomeBehaviour : MonoBehaviour
{
AndroidPerformanceTuner<FidelityParams, Annotation> tuner =
new AndroidPerformanceTuner<FidelityParams, Annotation>();
void Start()
{
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
}
Esse código é suficiente para iniciar o Android Performance Tuner e a instrumentação do seu jogo. Os log statements indicam quando o Android Performance Tuner foi iniciado e quando a telemetria foi enviada às APIs do Google Play Console. Depois, você pode encontrar essas informações no registro para verificar se o plug-in está funcionando corretamente.
Inicialização atrasada (somente Vulkan)
Caso seu jogo seja destinado ao Vulkan e use Android Frame Pacing, o Android Performance Tuner terá uma inicialização atrasada:
IEnumerator Start()
{
yield return new WaitForEndOfFrame();
ErrorCode startErrorCode = tuner.Start();
Debug.Log("Android Performance Tuner started with code: " + startErrorCode);
tuner.onReceiveUploadLog += request =>
{
Debug.Log("Telemetry uploaded with request name: " + request.name);
};
}
Verificar o intervalo entre uploads de telemetria
O intervalo padrão entre os uploads de telemetria nas configurações do plug-in é de 30 segundos. Esse período é definido como um intervalo curto para facilitar a verificação do upload adequado de telemetria. Ao liberar seu jogo para produção, defina esse período como um intervalo longo (por exemplo, a cada 10 minutos) para que o jogo não faça muitas solicitações às APIs. Isso é especialmente importante para os usuários que não têm um plano de dados móveis que inclua dados ilimitados. Um intervalo longo também evita o uso excessivo da bateria do dispositivo.
Para verificar se o intervalo está definido como 30 segundos, faça o seguinte:
- Selecione Google > Android Performance Tuner para acessar as configurações.
- Selecione a guia Configurações de instrumentação e clique em Usar configurações avançadas.
- Verifique se o campo Intervalos (minutos) contém 0,5.
Guia Configurações de instrumentação no plug-in
Verificar a operação adequada
Se você estiver usando IL2CPP ou remoção de código, consulte Gerenciar remoção de código.
Crie seu jogo para Android. Enquanto o jogo estiver sendo iniciado em um dispositivo, abra um
terminal no computador e inicie adb logcat
:
adb logcat
Na saída de adb logcat
, pesquise por "TuningFork" (já que Tuning Fork é o
nome interno da biblioteca):
02-03 16:55:45.103 10511 10536 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:55:45.103 10511 10536 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.105 10511 10536 I TuningFork: OpenGL version 3.2
02-03 16:55:45.105 10511 10536 I TuningFork: TuningFork.GoogleEndpoint: OK
02-03 16:55:45.106 10511 10611 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:55:45.106 10511 10536 I TuningFork: TuningFork Settings:
[...]
02-03 16:55:45.116 10511 10536 I Unity : Tuningfork started with code: Ok
02-03 16:55:45.107 10511 10536 I TuningFork: TuningFork initialized
02-03 16:55:45.107 10511 10536 I UnityTuningfork: Swappy backend: 1
02-03 16:55:45.107 10511 10536 I TuningFork: Creating directory /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork/V1
02-03 16:55:45.110 10511 10613 I TuningFork: OpenGL version 3.2
02-03 16:55:45.110 10511 10613 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:generateTuningParameters
Se você tiver cometido um erro ao configurar o plug-in, como esquecer de definir a chave de API, verá um erro nos registros de inicialização:
02-03 16:49:44.970 8815 8831 I TuningFork: Got settings from tuningfork/tuningfork_settings.bin
02-03 16:49:44.971 8815 8831 I TuningFork: Using local file cache at /data/user/0/com.Unity3d.BoatAttackDay/cache/tuningfork
02-03 16:49:44.972 8815 8831 I TuningFork: OpenGL version 3.2
02-03 16:49:44.972 8815 8831 W TuningFork.GE: The API key in Tuning Fork TFSettings is invalid
02-03 16:49:44.972 8815 8831 E TuningFork: TuningFork.GoogleEndpoint: FAILED
02-03 16:49:44.973 8815 8831 I Unity : Tuningfork started with code: BadParameter
Verifique se o Android Performance Tuner está fazendo upload da telemetria. Caso veja TuningFork
initialized
nos registros, aguarde um pouco mais e procure registros que
indiquem que o upload da telemetria está sendo feito.
02-03 16:58:00.552 10511 10611 I TuningFork:Web: Connecting to: https://performanceparameters.googleapis.com/v1/applications/com.Unity3d.BoatAttackDay/apks/1:uploadTelemetry
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response code: 200
02-03 16:58:00.898 10511 10611 I TuningFork:Web: Response message: OK
02-03 16:58:00.899 10511 10611 I TuningFork.GE: UPLOAD request returned 200 {}
Você também pode pesquisar por "Conectado a:" nos registros. Essa mensagem é seguida pelo código de resposta, algumas linhas depois.
Caso não veja registros de upload de telemetria, verifique se você definiu o intervalo corretamente entre cada upload nas configurações do Android Performance Tuner para um valor baixo, como 30 segundos.
Gerenciar a remoção de código
Google.Protobuf.dll
usa reflexão. Durante a remoção, alguns dos códigos
necessários podem ser removidos. Para evitar isso, o plug-in contém um
arquivo link.xml
com informações sobre quais símbolos precisam ser preservados. Caso você
precise de alguma funcionalidade da protobuf que usa reflexão e a remoção de código
esteja ativada, adicione essas informações ao arquivo link.xml
para preservar os
símbolos.
Leia mais sobre a remoção de código gerenciado na documentação do Unity.
Se você precisar preservar todos os símbolos na protobuf, adicione um arquivo link.xml
ao
projeto, contendo o seguinte:
<linker>
<assembly fullname="Google.Protobuf" preserve="all"/>
</linker>
Compilação antecipada (AOT, na sigla em inglês)
A compilação antecipada é necessária para o back-end IL2CPP e para as versões 2017 e 2018 do Unity (mas não para versões mais recentes).
O compilador AOT pode não gerar código para métodos genéricos. É preciso forçar o compilador a gerar o código adequado que é necessário para a protobuf adicionando o seguinte método:
using Google.Protobuf.Reflection;
using UnityEngine.Scripting;
...
// Don't call this method.
[Preserve]
void ExampleOfForceReflectionInitializationForProtobuf()
{
FileDescriptor.ForceReflectionInitialization<Scene>();
FileDescriptor.ForceReflectionInitialization<ShadowType>();
FileDescriptor.ForceReflectionInitialization<LevelType>();
...
// Add FileDescriptor.ForceReflectionInitialization<T> for each generated enum.
// You can find the list of enums in DevTuningfork.cs -> enum section
// or in the list of enums in Google -> Android Performance Tuner.
}
Leia mais sobre as restrições de script na documentação do Unity.