Przejdź na logowanie w usługach gier Play w wersji 2

Z tego artykułu dowiesz się, jak przenieść kod klienta z usług gier Play w wersji 1 do wersji 2.

Nowy pakiet SDK zawiera 4 główne zmiany, które ułatwią logowanie. O czym warto pamiętać:

  1. Logowanie jest uruchamiane automatycznie po uruchomieniu gry. Zamiast logować się za pomocą pakietu GoogleSignInClient pakietu GoogleSignIn SDK, możesz użyć pliku GamesSignInClient.isAuthenticated(), który umożliwi pobranie wyniku próby logowania automatycznego.
  2. Klasy fabryki klienta nie będą już potrzebować przekazywanego obiektu GoogleSignInAccount. Nie można zażądać dodatkowych zakresów OAuth (żądania GAMES_LITE i SCOPE_APPFOLDER będą wysyłane automatycznie).
  3. Tokeny uwierzytelniania są teraz dostarczane za pomocą GamesSignInClient.requestServerSideAccess() w pakiecie SDK usług gier Play.
  4. Usunęliśmy już tę metodę wylogowania i nie będziemy już potrzebować przycisku w grze, aby logować się w usługach gier Play lub wylogowywać się z nich.

Dodatkowo w grze będą pojawiać się dodatkowe logowanie dzięki logowaniu automatycznemu po jej premierze. Dlatego sprawdź zarządzanie limitem, aby mieć pewność, że Twoja gra nie przekracza limitu próśb o zalogowanie.

Ustaw kierowanie na nowe repozytorium SDK Maven

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:+"
}

Zainicjuj pakiet SDK

Zainicjuj pakiet SDK Gier Play w wywołaniu zwrotnym onCreate(..) klasy Application. Na przykład:

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

...

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

Usuń połączenia dotyczące logowania i wylogowania

Jeśli nie określisz dodatkowych zakresów poza GAMES, GAMES_LIGHT i SCOPE_APPFOLDER, migracja Twojego przypadku użycia powinna być prosta.

  1. Usuń wywołania logowania za pomocą interfejsu GoogleSignIn API. Logowanie zawsze jest wykonywane w momencie uruchomienia gry. Zamiast tego nasłuchuj wyniku automatycznej próby logowania za pomocą 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 wywołania wylogowania, ponieważ zarządzanie kontem odbywa się teraz w ustawieniach systemu operacyjnego i aplikacji Gry Play.

  3. Jeśli gracz się zalogował, usuń z gry przycisk logowania w Grach Play. Jeśli użytkownik nie zdecyduje się na logowanie po premierze gry, możesz nadal wyświetlać przycisk z ikoną Gier Play i uruchamiać proces logowania w GamesSignInClient.signIn().

  4. Po sprawdzeniu, czy użytkownik jest zalogowany, można pobrać identyfikator gracza, który umożliwi jego identyfikację.

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

Zaktualizuj nazwy klas klienta

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

Poproś o dostęp po stronie serwera

Gdy żądasz dostępu po stronie serwera, użyj zasady GamesSignInClient.requestServerSideAccess(), a nie 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 via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Usuń dodatkowe zakresy

W usługach gier Play w wersji 2 nie możesz prosić o dodatkowe zakresy. Jeśli nadal chcesz wysyłać prośby o dodatkowe zakresy, zalecamy używanie pakietu SDK Google Sign In razem z usługami gier Play.

Migracja z GoogleApiClient

W przypadku starszych integracji działanie gry może zależeć od wersji pakietu SDK usług gier Play w interfejsie GoogleApiClient API. Rozwiązanie to zostało wycofane pod koniec 2017 r. i zastąpione przez klienty bez połączenia. Aby przeprowadzić migrację, możesz zastąpić klasę GoogleApiClient odpowiednikiem „bez połączenia”. Musisz też zastosować się do powyższych wskazówek, aby przenieść grę z wersji 1 do wersji 2. Poniżej znajduje się 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