Przejdź na wersję 2 logowania w usługach gier Play

Z tego przewodnika dowiesz się, jak przenieść kod klienta z Usług Google Play w wersji 1 do wersji 2.

Nowe SDK zawiera 4 ważne zmiany, które mają zwiększyć skuteczność logowania. Oto one:

  1. Logowanie uruchamia się automatycznie po uruchomieniu gry. Zamiast używać do logowania funkcji GoogleSignInClient w pakiecie SDK GoogleSignIn, możesz użyć funkcji GamesSignInClient.isAuthenticated(), aby pobrać wynik automatycznej próby logowania.
  2. Klasy Client Factory nie będą już wymagać przekazywania obiektu GoogleSignInAccount. Nie można poprosić o dodatkowe zakresy OAuth (GAMES_LITE zostanie poproszony automatycznie).
  3. Tokeny uwierzytelniania są teraz udostępniane za pomocą pakietu SDK usług gier PlayGamesSignInClient.requestServerSideAccess().
  4. Metoda wylogowania została usunięta i nie będzie już wymagane przycisk w grze do zalogowania się lub wylogowania z usług gier Play.

Dodatkowo Twoja gra będzie się logować automatycznie, ponieważ logowanie będzie się odbywać automatycznie po uruchomieniu gry. Dlatego sprawdź zarządzanie limitami, aby upewnić się, że Twoja gra nie przekracza limitu próśb o logowanie.

Ustaw jako docelowe nowe repozytorium Maven pakietu SDK

Jeśli używasz systemu kompilacji Gradle, możesz to zrobić, zmieniając zależność na artefakt com.google.android.gms:play-services-games-v2:+ w pliku build.gradle modułu. Na przykład:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Inicjowanie pakietu SDK

Zainicjuj pakiet SDK Usług Google Play w obiekcie onCreate(..) w klasie Application. Na przykład:

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Usuwanie wywołań logowania i wylogowywania

Jeśli nie określisz żadnych dodatkowych zakresów, przeniesienie przypadku użycia powinno być proste.

  1. Usuń wywołania logowania za pomocą interfejsu GoogleSignIn API. Logowanie będzie zawsze wykonywane podczas uruchamiania gry. Zamiast tego odsłuchaj wynik automatycznej próby zalogowania się za pomocą funkcji GamesSignInClient.isAuthenticated().

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. Usuń wszystkie wezwania do wylogowania się, ponieważ zarządzanie kontem jest teraz dostępne w ustawieniach systemu operacyjnego i aplikacji Gier Play.

  3. Jeśli gracz jest zalogowany, usuń z gry przycisk logowania w Grach Play. Jeśli użytkownik zdecyduje się nie logować podczas uruchamiania gry, możesz opcjonalnie nadal wyświetlać przycisk z ikoną Gier Google Play i uruchomić proces logowania za pomocą GamesSignInClient.signIn().

  4. Po sprawdzeniu, czy użytkownik jest zalogowany, możesz pobrać identyfikator gracza, aby go zidentyfikować.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Usuń zależność od interfejsu API GoogleSignIn, jeśli nie jest już używana.

Aktualizowanie nazw klas klientów

Podczas tworzenia klientów (np. LeaderboardsClient lub AchievementsClient) używaj wartości PlayGames.getFooClient() zamiast Games.getFooClient().

Prośba o dostęp po stronie serwera

Gdy żądasz dostępu po stronie serwera, użyj wartości GamesSignInClient.requestServerSideAccess() zamiast GoogleSignInAccount.getServerAuthCode().

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Usuwanie dodatkowych zakresów

W usługach gier Play w wersji 2 nie można żądać żadnych dodatkowych zakresów. Jeśli nadal musisz poprosić o dodatkowe zakresy, zalecamy użycie pakietu SDK logowania się przez Google wraz z usługami gier Google Play.

Migracja z GoogleApiClient

W przypadku starszych, istniejących integracji Twoja gra może być zależna od wersji interfejsu GoogleApiClient API pakietu SDK usług gier Play. Został on wycofany pod koniec 2017 r. i zastąpiony przez klientów „bez połączenia”. Aby przeprowadzić migrację, możesz zastąpić klasę GoogleApiClient odpowiednikiem „bez połączenia”. Następnie musisz postępować zgodnie z instrukcjami na tej stronie, aby przenieść grę z wersji 1 do 2. Oto mapowanie typowych klas:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes