Inicializar a biblioteca e verificar a operação

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:

  1. Selecione Google > Android Performance Tuner para acessar as configurações.
  2. Selecione a guia Configurações de instrumentação e clique em Usar configurações avançadas.
  3. 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.

Você pode ler mais sobre remoção gerenciada de código 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.
}

Você pode ler mais sobre restrições de script na documentação do Unity.