Osiągnięcia w grach na Androida

Po wycofaniu interfejsu Google Sign-In API w 2026 roku usuniemy pakiet SDK do gier w wersji 1. Z końcem lutego 2025 r. nie będzie już można publikować w Google Play nowych tytułów, w których zastosowano integrację z wersją 1 pakietu SDK gier. Zamiast tego zalecamy używanie pakietu SDK do gier w wersji 2.
Dotychczasowe tytuły z integracjami gier w wersji 1 będą działać jeszcze przez kilka lat, ale zachęcamy do przejścia na wersję 2 od czerwca 2025 r.
Ten przewodnik dotyczy korzystania z pakietu SDK usług gier Play w wersji 1. Informacje o najnowszej wersji pakietu SDK znajdziesz w dokumentacji wersji 2.

Z tego przewodnika dowiesz się, jak używać interfejsów API osiągnięć w aplikacji na Androida, aby odblokowywać i wyświetlać osiągnięcia w grze. Interfejsy API można znaleźć w pakietach com.google.android.gms.gamescom.google.android.gms.games.achievements.

Zanim zaczniesz

Jeśli jeszcze tego nie zrobiono, warto zapoznać się z pojęciami dotyczącymi gier z osiągnięciami.

Zanim zaczniesz pisać kod z użyciem interfejsu API osiągnięć:

Pobieranie klienta osiągnięć

Aby zacząć korzystać z interfejsu API osiągnięć, gra musi najpierw uzyskać obiekt AchievementsClient. Możesz to zrobić, wywołując metodę Games.getAchievementClient() i przekazując aktywność oraz GoogleSignInAccount bieżącego gracza. Aby dowiedzieć się, jak pobrać informacje o koncie gracza, przeczytaj artykuł Logowanie się w grach na Androida.

Odblokowywanie osiągnięć

Aby odblokować osiągnięcie, wywołaj metodę AchievementsClient.unlock() i przekaż identyfikator osiągnięcia.

Ten fragment kodu pokazuje, jak aplikacja może odblokowywać osiągnięcia:

Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .unlock(getString(R.string.my_achievement_id));

Jeśli osiągnięcie jest typu wieloetapowego (czyli wymaga wykonania kilku czynności, aby je odblokować), zamiast tego wywołaj funkcję AchievementsClient.increment().

Poniższy fragment kodu pokazuje, jak aplikacja może zwiększyć liczbę osiągnięć gracza:

Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .increment(getString(R.string.my_achievement_id), 1);

Nie musisz pisać dodatkowego kodu, aby odblokować osiągnięcie. Usługi gier Google Play automatycznie odblokowują osiągnięcie, gdy osiągnie ono wymaganą liczbę kroków.

Dobrym rozwiązaniem jest zdefiniowanie identyfikatorów osiągnięć w pliku strings.xml, aby gra mogła odwoływać się do osiągnięć za pomocą identyfikatora zasobu. Podczas wywoływania funkcji aktualizowania i wczytywania osiągnięć pamiętaj, aby stosować te sprawdzone metody, aby uniknąć przekroczenia limitu interfejsu API.

Wyświetlanie osiągnięć

Aby wyświetlić osiągnięcia gracza, wywołaj funkcję AchievementsClient.getAchievementsIntent(), aby uzyskać obiekt Intent, który umożliwi utworzenie domyślnego interfejsu osiągnięć. Gra może wtedy wyświetlić interfejs, wywołując funkcję startActivityForResult.

Poniższy fragment kodu pokazuje, jak aplikacja może wyświetlać domyślny interfejs osiągnięć. W tym fragmencie kodu RC_ACHIEVEMENT_UI to dowolna liczba całkowita, której gra używa jako kodu żądania.

private static final int RC_ACHIEVEMENT_UI = 9003;

private void showAchievements() {
  Games.getAchievementsClient(this, GoogleSignIn.getLastSignedInAccount(this))
      .getAchievementsIntent()
      .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent intent) {
          startActivityForResult(intent, RC_ACHIEVEMENT_UI);
        }
      });
}

Poniżej znajduje się przykład domyślnego interfejsu osiągnięć.