Tabele wyników w grach na Androida

Z tego przewodnika dowiesz się, jak używać interfejsów API tabel wyników w aplikacji na Androida, aby tworzyć wizualne tabele wyników, rejestrować wyniki graczy i porównywać je z wynikami z poprzednich sesji gry. Interfejsy API można znaleźć w pakietach com.google.android.gms.gamescom.google.android.gms.games.leaderboards.

Zanim zaczniesz

Jeśli jeszcze tego nie zrobiono, warto zapoznać się z pojęciami dotyczącymi gier z tablicami wyników.

Zanim zaczniesz pisać kod z użyciem interfejsów API tablic wyników:

Pobieranie klienta tabeli wyników

Aby zacząć korzystać z interfejsu API tabel wyników, gra musi najpierw uzyskać obiekt LeaderboardsClient. Możesz to zrobić, wywołując metodę PlayGames.getLeadeboardsClient() i przekazując aktywność.

Aktualizowanie wyniku gracza

Gdy wynik gracza się zmieni (np. po zakończeniu gry), gra może zaktualizować jego wynik w tabeli wyników, wywołując LeaderboardsClient.submitScore() i przekazując identyfikator tabeli wyników oraz wartość surowego wyniku.

Poniższy fragment kodu pokazuje, jak aplikacja może zaktualizować wynik gracza:

PlayGames.getLeaderboardsClient(this)
    .submitScore(getString(R.string.leaderboard_id), 1337);

Dobrym rozwiązaniem jest zdefiniowanie identyfikatora tabeli wyników w pliku strings.xml, aby gra mogła odwoływać się do tabel wyników za pomocą identyfikatora zasobu. Podczas wywoływania funkcji aktualizowania i wczytywania wyników graczy postępuj zgodnie z tymi sprawdzonymi metodami, aby uniknąć przekroczenia limitu interfejsu API.

Wyświetlanie tabeli wyników

Aby wyświetlić tabelę wyników, wywołaj funkcję LeaderboardsClient.getLeaderboardIntent(), aby uzyskać Intent i utworzyć domyślny interfejs użytkownika tabeli wyników. Gra może wtedy wyświetlić interfejs, wywołując funkcję startActivityForResult.

Poniższy fragment kodu pokazuje, jak aplikacja może zaktualizować wynik gracza. We fragmencie kodu RC_LEADERBOARD_UI to dowolna liczba całkowita oznaczająca kod żądania.

private static final int RC_LEADERBOARD_UI = 9004;

private void showLeaderboard() {
  PlayGames.getLeaderboardsClient(this)
      .getLeaderboardIntent(getString(R.string.leaderboard_id))
      .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent intent) {
          startActivityForResult(intent, RC_LEADERBOARD_UI);
        }
      });
}

Nawet jeśli nie jest zwracany żaden wynik, musisz użyć startActivityForResult, aby interfejs API mógł uzyskać tożsamość pakietu wywołującego. Poniżej znajdziesz przykład domyślnego interfejsu tablicy wyników.