Zainicjuj bibliotekę i sprawdź operację

Na tej stronie opisujemy, jak zainicjować bibliotekę w kodzie gry i sprawdzić, czy przesyła ona dane do Google Play. Więcej informacji o poszczególnych funkcjach biblioteki znajdziesz w dokumentacji referencyjnej.

Inicjowanie biblioteki

W ramach metody inicjowania na początku gry zainicjuj bibliotekę, inicjując AndroidPerformanceTuner i wywołując jej metodę 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);
        };
    }
}

Wystarczy ten kod, aby uruchomić narzędzie Android Performance Tuner i zainstalować grę. Instrukcje w dzienniku wskazują, kiedy narzędzie Android Performance Tuner uruchomiło się i kiedy do interfejsów API Konsoli Google Play zostały przesłane dane telemetryczne. Możesz je później znaleźć w dzienniku, aby sprawdzić, czy wtyczka działa prawidłowo.

Inicjowanie opóźnione (tylko interfejs Vulkan)

Jeśli gra jest kierowana na interfejs Vulkan i korzysta z Android Frame Pacing, narzędzie Android Performance Tuner powinno uruchamiać się późno:

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

Sprawdzanie odstępu między przesyłaniem danych telemetrycznych

Domyślny odstęp między przesyłaniem danych telemetrycznych w ustawieniach wtyczki to 30 sekund. Ten czas jest ustawiony na krótki odstęp, aby ułatwić weryfikację prawidłowego przesyłania danych telemetrycznych. Gdy publikujesz grę w wersji produkcyjnej, ustaw dłuższy odstęp czasu (np. co 10 minut), aby gra nie wysyłała zbyt wielu żądań do interfejsów API. Jest to szczególnie ważne w przypadku użytkowników, którzy nie mają abonamentu na mobilną transmisję danych, który obejmuje nieograniczoną transmisję danych. Długi odstęp pozwala też uniknąć nadmiernego obciążenia baterii urządzenia.

Aby sprawdzić, czy interwał jest ustawiony na 30 sekund, wykonaj te czynności:

  1. Aby uzyskać dostęp do ustawień, kliknij Google > Android Performance Tuner.
  2. Wybierz kartę Ustawienia instrumentacji i kliknij Użyj ustawień zaawansowanych.
  3. Sprawdź, czy pole Intervals (minutes) (Interwały (minuty)) zawiera wartość 0,5.

Karta Ustawienia instrumentacji we wtyczce

Sprawdź poprawność działania

Jeśli używasz IL2CPP lub usuwania kodu, przeczytaj sekcję Zarządzanie usuwaniem kodu.

Utwórz grę na Androida. Podczas uruchamiania gry na urządzeniu otwórz terminal na komputerze i uruchom adb logcat:

adb logcat

W danych wyjściowych adb logcat wyszukaj „TuningFork” (ponieważ Tuning Fork to wewnętrzna nazwa biblioteki):

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

Jeśli podczas konfigurowania wtyczki popełnisz błąd, na przykład zapomnisz ustawić klucz interfejsu API, w dziennikach inicjowania pojawi się błąd:

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

Sprawdź, czy Android Performance Tuner przesyła dane telemetryczne. Jeśli widzisz w logach TuningFork initialized, poczekaj jeszcze i poszukaj logów wskazujących, że są przesyłane dane telemetryczne.

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

W dziennikach możesz też wyszukać hasło „Łączenie z:”. Kilka wierszy po tym komunikacie znajduje się kod odpowiedzi.

Jeśli nie widzisz dzienników przesyłania danych telemetrycznych, sprawdź, czy odstępy między poszczególnymi przesyłaniem danych są ustawione na małą wartość, np. 30 sekund, w ustawieniach narzędzia Android Performance Tuner.

Zarządzanie usuwaniem kodu

Google.Protobuf.dll używa odbicia. Podczas usuwania kodu niektóre wymagane elementy mogą zostać usunięte. Aby uniknąć tego usunięcia, wtyczka zawiera plik link.xml z informacjami, które symbole należy zachować. Jeśli potrzebujesz funkcji protokołu, która wykorzystuje odbicie, i masz włączone wycinanie kodu, dodaj te informacje do pliku link.xml, aby zachować symbole.

Więcej informacji o usuwaniu kodu zarządzanego znajdziesz w dokumentacji Unity.

Jeśli chcesz zachować wszystkie symbole w protobuf, dodaj do projektu plik link.xml, który zawiera:

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

Kompilacja z wyprzedzeniem (AOT)

Kompilacja z wyprzedzeniem jest wymagana dla backendu IL2CPP oraz środowiska Unity w wersjach 2017 i 2018 (ale nie w nowszych wersjach Unity).

Kompilator AOT może nie generować kodu w przypadku metod ogólnych. Musisz wymusić przez kompilator wygenerowanie odpowiedniego kodu wymaganego na potrzeby protokołu protobuf, dodając tę metodę:

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

Więcej informacji o ograniczeniach dotyczących skryptów znajdziesz w dokumentacji Unity.