Initialiser la bibliothèque et vérifier son bon fonctionnement

Cette page explique comment initialiser la bibliothèque dans votre code de jeu et vérifier qu'elle importe bien des données vers Google Play. Pour en savoir plus sur des fonctions de bibliothèque spécifiques, consultez la documentation de référence.

Initialiser la bibliothèque

Dans une méthode d'initialisation au début de votre jeu, initialisez la bibliothèque en instanciant AndroidPerformanceTuner et en appelant sa méthode 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);
        };
    }
}

Ce code est suffisant pour lancer Android Performance Tuner et instrumenter votre jeu. Les instructions de journalisation indiquent quand Android Performance Tuner a démarré et quand la télémétrie a été importée dans les API de la Google Play Console. Vous trouverez ces instructions plus tard dans le journal pour vérifier que le plug-in fonctionne correctement.

Initialisation tardive (Vulkan uniquement)

Si votre jeu cible Vulkan et utilise Android Frame Pacing, l'initialisation d'Android Performance Tuner doit être tardive :

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

Vérifier l'intervalle entre les importations de télémétrie

L'intervalle par défaut entre les importations de télémétrie dans les paramètres du plug-in est de 30 secondes. Ce délai est défini sur un intervalle court pour faciliter la vérification de la bonne importation de la télémétrie. Lorsque vous mettez votre jeu en production, définissez un intervalle élevé (par exemple, toutes les 10 minutes) afin que le jeu n'envoie pas trop de requêtes aux API, ce qui est particulièrement important pour les utilisateurs dont le forfait de données mobiles n'est pas illimité. Un intervalle élevé évite également de trop décharger la batterie de l'appareil.

Pour vérifier que l'intervalle est défini sur 30 secondes, procédez comme suit :

  1. Sélectionnez Google > Android Performance Tuner pour accéder aux paramètres.
  2. Sélectionnez l'onglet Paramètres d'instrumentation, puis cliquez sur Utiliser les paramètres avancés.
  3. Vérifiez que le champ Intervalles (minutes) contient 0.5.

Onglet Paramètres d'instrumentation du plug-in

Vérifier le bon fonctionnement

Si vous utilisez IL2CPP ou la suppression de code, consultez la section Gérer la suppression de code.

Compilez votre jeu pour Android. Pendant le lancement de votre jeu sur un appareil, ouvrez un terminal sur votre ordinateur et lancez adb logcat :

adb logcat

Dans le résultat de adb logcat, recherchez "TuningFork" (TuningFork étant le nom interne de la bibliothèque) :

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 vous avez fait une erreur lors de la configuration du plug-in (par exemple, si vous avez oublié de définir la clé d'API), une erreur s'affiche dans les journaux d'initialisation :

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

Vérifiez qu'Android Performance Tuner importe la télémétrie. Si vous voyez TuningFork initialized dans les journaux, attendez un peu plus et recherchez les journaux indiquant que la télémétrie est en cours d'importation.

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

Vous pouvez également rechercher "Connecting to:" (Connexion à :) dans les journaux. Ce message est suivi du code de réponse quelques lignes plus tard.

Si vous ne voyez pas les journaux d'importation de télémétrie, vérifiez que vous avez bien défini l'intervalle entre chaque importation dans les paramètres Android Performance Tuner sur une petite valeur, par exemple 30 secondes.

Gérer la suppression de code

Google.Protobuf.dll utilise la réflexion. Lors de la suppression de code, une partie du code requis peut être supprimée. Pour éviter cette suppression, le plug-in contient un fichier link.xml contenant des informations sur les symboles à conserver. Si vous avez besoin d'une fonctionnalité de tampon de protocole qui utilise la réflexion et que la suppression de code est activée, ajoutez ces informations dans le fichier link.xml pour conserver les symboles.

Pour en savoir plus sur la suppression de code gérée, consultez la documentation Unity.

Si vous devez conserver tous les symboles dans le tampon de protocole, ajoutez à votre projet un fichier link.xml contenant les éléments suivants :

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

Compilation anticipée (Ahead-of-time ou AOT)

La compilation AOT est requise pour le backend IL2CPP et les versions 2017 et 2018 d'Unity (mais pas pour les versions ultérieures d'Unity).

Le compilateur AOT ne générera peut-être pas de code pour des méthodes génériques. Vous devez forcer le compilateur à générer le code nécessaire à l'utilisation du tampon de protocole en ajoutant la méthode suivante :

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

Pour en savoir plus sur les restrictions liées aux scripts, consultez la documentation Unity.