Inizializzare la libreria e verificare l'operazione

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

Inizializzare la libreria

In un metodo di inizializzazione all'inizio del gioco, inizializza la raccolta creare un'istanza di AndroidPerformanceTuner e chiamare la sua 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 iniziare a giocare instrumentati. Le istruzioni di log indicano l'avvio di Android Performance Tuner e quando la telemetria viene caricata nelle API di Google Play Console. Più tardi, troverai queste istruzioni nel log per verificare che il plug-in funzioni in modo corretto.

Inizializzazione tardiva (solo Vulkan)

Se il tuo gioco ha come target Vulkan e utilizza Android Frame Pacing, Android Performance Tuner devono 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 dei dati di telemetria nelle impostazioni del plug-in è 30 secondi. Questo periodo di tempo è impostato su un intervallo breve per facilitare la verifica del del corretto caricamento dei dati di telemetria. Quando rilasci il gioco in produzione, imposta questo a intervalli molto ampi (ad esempio, ogni 10 minuti) in modo che il gioco fare troppe richieste alle API, il che è particolarmente importante per gli utenti che non dispongono di un piano dati mobili che include dati illimitati. Grande evita anche di consumare la batteria del dispositivo in modo eccessivo.

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 impostazioni.
  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 Gestire la rimozione di codice.

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

adb logcat

Nell'output di adb logcat, cerca "TuningFork" (poiché il diapason è 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 ti sei dimenticato di impostare il 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 i dati di telemetria. Se vedi TuningFork initialized nei log, attendi ancora un po' e cerca i log che indicano che dati di 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. Segui questo messaggio dal codice di risposta poche righe dopo.

Se non vedi i log di caricamento dei dati di telemetria, verifica di aver impostato correttamente il parametro intervallo tra un caricamento e l'altro nelle impostazioni di Android Performance Tuner come 30 secondi.

Gestisci la rimozione del codice

Google.Protobuf.dll usa la riflessione. Durante la rimozione del codice, potrebbe essere rimosso. Per evitare questa rimozione, il plug-in contiene un'etichetta link.xml con informazioni su quali simboli devono essere conservati. Se hanno bisogno di una funzionalità di protobuf che utilizza la riflessione e si dispone di codice striping attivata, aggiungi queste informazioni al file link.xml per conservare .

Puoi scoprire di più slittamento del codice gestito nella documentazione di Unity.

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

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

Compilazione anticipata (AOT)

La compilazione anticipata è obbligatoria per il backend IL2CPP e 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 al compilatore per generare il codice corretto richiesto per protobuf aggiungendo 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.
}

Puoi scoprire di più restrizioni di script nella documentazione di Unity.