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.

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 restrições de script na documentação do Unity.