Zainicjuj bibliotekę i sprawdź operację

Na tej stronie znajdziesz informacje o tym, 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.

Inicjowanie biblioteki

W metodzie inicjowania na początku gry zainicjuj bibliotekę, tworząc instancję klasy 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);
        };
    }
}

Ten kod wystarczy, aby uruchomić narzędzie Android Performance Tuner i zintegrować je z grą. Instrukcje logowania wskazują, kiedy Android Performance Tuner został uruchomiony i kiedy dane telemetryczne zostały przesłane do interfejsów API Konsoli Google Play. Później znajdziesz te instrukcje w dzienniku, aby sprawdzić, czy wtyczka działa prawidłowo.

Opóźniona inicjalizacja (tylko Vulkan)

Jeśli Twoja gra jest przeznaczona na Vulkan i korzysta z funkcji Android Frame Pacing, narzędzie Android Performance Tuner powinno być inicjowane z opóźnieniem:

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 interwał między przesyłaniem danych telemetrycznych w ustawieniach wtyczki to 30 sekund. Ten czas jest ustawiony na krótki interwał, aby ułatwić weryfikację prawidłowego przesyłania danych telemetrycznych. Gdy udostępnisz grę w wersji produkcyjnej, ustaw duży interwał (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ą mobilnego pakietu danych z nieograniczoną ilością danych. Długi interwał zapobiega też nadmiernemu zużyciu baterii urządzenia.

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

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

Karta Ustawienia instrumentacji we wtyczce

Sprawdzanie prawidłowego działania

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

Stwórz grę na Androida. Gdy gra uruchamia się na urządzeniu, otwórz terminal na komputerze i uruchom adb logcat:

adb logcat

W danych wyjściowych polecenia adb logcat wyszukaj „TuningFork” (ponieważ jest 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, np. zapomnisz ustawić klucz 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 narzędzie Android Performance Tuner przesyła dane telemetryczne. Jeśli w logach widzisz znak TuningFork initialized, poczekaj jeszcze chwilę i poszukaj logów wskazujących, że dane telemetryczne są przesyłane.

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ć ciąg „Connecting to:” (Łączenie z:). Kilka wierszy dalej znajduje się kod odpowiedzi.

Jeśli nie widzisz logów przesyłania danych telemetrycznych, sprawdź, czy w ustawieniach narzędzia Android Performance Tuner prawidłowo ustawiono małą wartość interwału między poszczególnymi przesyłaniami, np. 30 sekund.

Zarządzanie usuwaniem kodu

Google.Protobuf.dll wykorzystuje odbicie. Podczas usuwania kodu może zostać usunięta część wymaganego kodu. Aby uniknąć usunięcia, wtyczka zawiera plik link.xml z informacjami o tym, które symbole powinny zostać zachowane. Jeśli potrzebujesz funkcji protokołu buforów, która korzysta z odbicia, a masz włączone usuwanie 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 protokole 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 w przypadku backendu IL2CPP i wersji Unity 2017 i 2018 (ale nie w przypadku nowszych wersji Unity).

Kompilator AOT może nie generować kodu dla metod ogólnych. Musisz wymusić na kompilatorze wygenerowanie odpowiedniego kodu wymaganego przez protokół buforów, 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.