Inizializzare la libreria e verificare l'operazione

Questa pagina descrive come inizializzare la libreria nel codice del gioco e verificare che carichi i dati su Google Play. Per saperne di più su funzioni specifiche della libreria, consulta la documentazione di riferimento.

Inizializzare la libreria

In un metodo di inizializzazione all'inizio del gioco, inizializza la libreria istanziando AndroidPerformanceTuner e chiamando il relativo metodo 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);
        };
    }
}

Questo codice è sufficiente per avviare Android Performance Tuner e instrumentare il tuo gioco. Le istruzioni di log indicano quando è stato avviato Android Performance Tuner e quando la telemetria è stata caricata nelle API Google Play Console. In seguito, troverai queste istruzioni nel log per verificare che il plug-in funzioni correttamente.

Inizializzazione tardiva (solo Vulkan)

Se il tuo gioco ha come target Vulkan e utilizza Android Frame Pacing, Android Performance Tuner dovrebbe avere un'inizializzazione tardiva:

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

Verifica l'intervallo tra i caricamenti di dati di telemetria

L'intervallo predefinito tra i caricamenti della telemetria nelle impostazioni del plug-in è di 30 secondi. Questo periodo di tempo è impostato su un intervallo breve per semplificare la verifica del corretto caricamento della telemetria. Quando rilasci il gioco in produzione, imposta questo valore su un intervallo ampio (ad esempio, ogni 10 minuti) in modo che il gioco non effettui troppe richieste alle API, il che è particolarmente importante per gli utenti che non hanno un piano dati mobili che include dati illimitati. Un intervallo ampio evita anche un utilizzo eccessivo della batteria del dispositivo.

Per verificare che l'intervallo sia impostato su 30 secondi:

  1. Seleziona Google > Android Performance Tuner per accedere alle impostazioni.
  2. Seleziona la scheda Impostazioni di strumentazione e fai clic su Utilizza impostazioni avanzate.
  3. Verifica che il campo Intervalli (minuti) contenga 0,5.

Scheda Impostazioni di strumentazione nel plug-in

Verifica il corretto funzionamento

Se utilizzi IL2CPP o la rimozione del codice, consulta la sezione Gestire la rimozione del codice.

Crea il tuo gioco per Android. Mentre il gioco viene avviato su un dispositivo, apri un terminale sul computer e avvia adb logcat:

adb logcat

Nell'output di adb logcat, cerca "TuningFork" (poiché Tuning Fork è il nome interno della libreria):

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 hai commesso un errore durante la configurazione del plug-in, ad esempio hai dimenticato di impostare la chiave API, verrà visualizzato un errore nei log di inizializzazione:

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

Controlla che Android Performance Tuner stia caricando la telemetria. Se nei log vedi TuningFork initialized, attendi un altro po' e cerca i log che indicano che la telemetria è in fase di caricamento.

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

Puoi anche cercare nei log "Connecting to:". Questo messaggio è seguito dal codice di risposta alcune righe dopo.

Se non vedi i log di caricamento della telemetria, verifica di aver impostato correttamente l'intervallo tra ogni caricamento nelle impostazioni di Android Performance Tuner su un valore piccolo, ad esempio 30 secondi.

Gestisci rimozione del codice

Google.Protobuf.dll utilizza la riflessione. Durante la rimozione del codice, alcune parti obbligatorie potrebbero essere eliminate. Per evitare questa rimozione, il plug-in contiene un file link.xml con informazioni sui simboli da conservare. Se hai bisogno di alcune funzionalità di protobuf che utilizzano la reflection e hai attivato l'eliminazione del codice, aggiungi queste informazioni al file link.xml per conservare i simboli.

Per saperne di più sull'eliminazione del codice gestito, consulta la documentazione di Unity.

Se devi conservare tutti i simboli in protobuf, aggiungi un file link.xml al tuo progetto che contenga quanto segue:

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

Compilazione ahead-of-time (AOT)

La compilazione AOT è necessaria per il backend IL2CPP e per le versioni di Unity 2017 e 2018 (ma non per le versioni successive di Unity).

Il compilatore AOT potrebbe non generare codice per i metodi generici. Devi forzare il compilatore a generare il codice corretto richiesto per protobuf aggiungendo il seguente metodo:

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

Per saperne di più sulle limitazioni degli script, consulta la documentazione di Unity.