Inizializzare la libreria e verificare l'operazione

In questa pagina viene descritto come inizializzare la raccolta nel codice di gioco e verificare che i dati vengano caricati su Google Play. Per scoprire di più 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 instaurando 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 è stato avviato Android Performance Tuner 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 essere sottoposto a 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 della 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 corretto caricamento della telemetria. Quando rilasci il gioco in produzione, imposta 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. Inoltre, un intervallo di tempo prolungato evita 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 Instrumentation Settings (Impostazioni strumentazione) e fai clic su Use Advanced settings (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" (dal momento 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 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

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 dei dati telemetrici, verifica di aver impostato correttamente l'intervallo tra ogni caricamento nelle impostazioni di Android Performance Tuner su un valore basso, ad esempio 30 secondi.

Gestisci la rimozione del codice

Google.Protobuf.dll utilizza il riflesso. Durante la rimozione del codice, parte del codice richiesto potrebbe essere rimosso. Per evitare questa rimozione, il plug-in contiene un file link.xml con informazioni su quali simboli devono essere conservati. Se hai bisogno di alcune funzionalità di protobuf che utilizzano la riflessione e hai attivato l'eliminazione del codice, aggiungi queste informazioni al file link.xml per conservare i simboli.

Per ulteriori informazioni sull'eliminazione del codice gestito, consulta la documentazione di Unity.

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

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

Compilazione anticipata (AOT)

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

Il compilatore AOT non può 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 restrizioni dello script, consulta la documentazione di Unity.