Inizializzare la libreria e verificare l'operazione

In questa pagina viene descritto come inizializzare la raccolta nel codice di gioco e come verificare che stia caricando dati su Google Play. Per ulteriori informazioni su funzioni di libreria specifiche, consulta la documentazione di riferimento.

Inizializzare la libreria

In un metodo di inizializzazione all'inizio del gioco, inizializza la raccolta rafforzando AndroidPerformanceTuner e richiamando il suo 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 configurare il tuo gioco. Le istruzioni di log indicano quando Android Performance Tuner è stato avviato e quando la telemetria è stata caricata nelle API Google Play Console. In seguito, troverai queste dichiarazioni nel log per verificare che il plug-in funzioni correttamente.

Inizializzazione tardiva (solo Vulkan)

Se il tuo gioco ha come target Vulkan e utilizza il pacing del frame Android, Android Performance Tuner deve 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 telemetria

L'intervallo predefinito tra i caricamenti di telemetria nelle impostazioni del plug-in è di 30 secondi. Questo tempo è impostato su un intervallo breve per semplificare la verifica del caricamento corretto dei dati di telemetria. Quando rilasci il gioco in produzione, imposta un intervallo ampio (ad esempio ogni 10 minuti) in modo che il gioco non invii troppe richieste alle API, il che è particolarmente importante per gli utenti che non hanno un piano dati mobili che include dati illimitati. Un intervallo di tempo esteso consente inoltre di evitare un uso 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 strumentazione e fai clic su Utilizza impostazioni avanzate.
  3. Verifica che il campo Intervalli (minuti) contenga 0,5.

Scheda Impostazioni strumentazione nel plug-in

Verificare il corretto funzionamento

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

Crea il tuo gioco per Android. Durante l'avvio del gioco su un dispositivo, apri un terminale sul computer e avvia adb logcat:

adb logcat

Nell'output di adb logcat, cerca "TuningFork" (dato che 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 fatto un errore durante la configurazione del plug-in, ad esempio hai dimenticato di impostare la chiave API, viene 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

Verifica che Android Performance Tuner stia caricando la telemetria. Se vedi TuningFork initialized nei log, attendi un po' di più 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 "Connessione a:" nei log. Questo messaggio è seguito dal codice di risposta poche righe dopo.

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

Gestire la rimozione del codice

Google.Protobuf.dll utilizza il riflesso. Durante la rimozione del codice, una parte del codice richiesto potrebbe essere rimossa. Per evitare questa rimozione, il plug-in contiene un file link.xml con informazioni sui simboli da conservare. Se hai bisogno di qualche funzionalità di protobuf che utilizza la riflessione e hai abilitato la rimozione del codice, aggiungi queste informazioni nel file link.xml per conservare i simboli.

Per ulteriori informazioni sulla rimozione del codice gestita, consulta la documentazione di Unity.

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

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

Compilazione anticipata (AOT)

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

Il compilatore AOT potrebbe non generare codice per 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 ulteriori informazioni sulle limitazioni relative agli script, consulta la documentazione di Unity.