Cómo inicializar la biblioteca y verificar la operación

En esta página, se describe cómo inicializar la biblioteca en el código de tu juego y verificar que este suba datos a Google Play. Para obtener más información sobre las funciones específicas de las bibliotecas, consulta la documentación de referencia.

Cómo inicializar la biblioteca

En un método de inicialización al comienzo del juego, crea una instancia de AndroidPerformanceTuner y llama a su método Start() a fin de inicializar la biblioteca:

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);
        };
    }
}

Este código es suficiente a los efectos de iniciar Android Performance Tuner e instrumentar el juego. Las instrucciones de registro indican cuándo se inició Android Performance Tuner y cuándo se subió la telemetría a las API de Google Play Console. Luego, encontrarás estas instrucciones en el registro de modo que se verifique que el complemento funciona correctamente.

Inicialización tardía (solo Vulkan)

Si tu juego se orienta a Vulkan y usa Android Frame Pacing, Android Performance Tuner debería tener una inicialización tardía:

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);
    };
}

Cómo verificar el intervalo entre cargas de telemetría

El intervalo predeterminado entre cargas de telemetría en la configuración del complemento es de 30 segundos. Este tiempo se establece en un intervalo corto para facilitar la verificación de la carga correcta de la telemetría. Cuando lances tu juego a la etapa de producción, configura esto en un intervalo grande (por ejemplo, cada 10 minutos) a fin de que el juego no realice demasiadas solicitudes a las API, lo que es especialmente importante para los usuarios que no tengan un plan de datos móviles que incluya datos ilimitados. Además, los intervalos grandes evitan el uso excesivo de la batería del dispositivo.

A fin de comprobar que el intervalo se estableció en 30 segundos, haz lo siguiente:

  1. Selecciona Google > Android Performance Tuner para acceder a la configuración.
  2. Selecciona la pestaña Instrumentation Settings y haz clic en Use advanced settings.
  3. Verifica que el campo Intervals (minutes) contenga 0.5.

Pestaña Instrumentation Settings del complemento

Cómo verificar que la operación se realice correctamente

Si usas el IL2CPP o la eliminación de código, consulta Cómo administrar la eliminación del código.

Compila tu juego para Android. Mientras se inicia el juego en un dispositivo, abre una terminal en tu computadora y, luego, inicia adb logcat:

adb logcat

En el resultado de adb logcat, busca "TuningFork" (ya que Tuning Fork es el nombre interno de la 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

Si el complemento no se configuró correctamente (por ejemplo, si olvidaste establecer la clave de API), verás un error en los registros de inicialización:

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

Comprueba que Android Performance Tuner esté subiendo telemetría. Si ves TuningFork initialized en los registros, espera un poco más y busca registros que indiquen que se está subiendo la telemetría.

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 {}

También puedes buscar "Connecting to:" en los registros. Algunas líneas después de este mensaje, aparece el código de respuesta.

Si no ves los registros de carga de telemetría, comprueba desde la configuración de Android Performance Tuner si estableciste correctamente el intervalo entre cada carga en un valor pequeño, como 30 segundos.

Cómo administrar la eliminación de código

Google.Protobuf.dll usa la reflexión. Durante la eliminación de código, es posible que se quite parte del código necesario. Para evitar esta eliminación, el complemento contiene un archivo link.xml con información sobre los símbolos que se deben conservar. Si necesitas alguna funcionalidad de protobuf que use reflexión y tienes habilitada la eliminación de código, agrega esta información al archivo link.xml a fin de conservar los símbolos.

Puedes leer más sobre la eliminación de código administrada en la documentación de Unity.

Si necesitas conservar todos los símbolos en protobuf, agrega un archivo link.xml a tu proyecto que contenga lo siguiente:

<linker>
  <assembly fullname="Google.Protobuf" preserve="all"/>
</linker>

Compilación anticipada (AOT)

Se requiere una compilación anticipada para el backend de IL2CPP y las versiones de Unity 2017 y 2018 (pero no para las versiones posteriores de Unity).

Es posible que el compilador AOT no genere código para métodos genéricos. Debes forzar al compilador a fin de que genere el código que se necesita para protobuf. Para ello, agrega el siguiente 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.
}

Puedes leer más sobre las restricciones de secuencias de comandos en la documentación de Unity.