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

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

Nowy pakiet SDK zawiera cztery główne zmiany, które mają ułatwić logowanie się, warto wiedzieć:

  1. Logowanie następuje automatycznie po uruchomieniu gry. Zamiast za pomocą pakietu GoogleSignInClient pakietu SDK GoogleSignIn, możesz użyć GamesSignInClient.isAuthenticated(), aby pobrać wynik funkcji automatycznej próby zalogowania się.
  2. Klasy z fabryki klienta nie będą już potrzebować obiektu GoogleSignInAccount zostały przekazane. Nie można żądać dodatkowych zakresów protokołu OAuth (GAMES_LITE będzie żądania wysyłane automatycznie).
  3. Tokeny uwierzytelniania są teraz udostępniane za pomocą GamesSignInClient.requestServerSideAccess() w usługach gier Play SDK.
  4. Usunęliśmy metodę wylogowania i nie będziemy już wymagać posiadania konta w grze aby zalogować się w usługach gier Play lub się z nich wylogować.

Dodatkowo w Twojej grze będą się pojawiać dodatkowe logowania ze względu na automatyczne po uruchomieniu gry. Dlatego zalecamy przejrzenie zarządzaniem limitem, aby mieć pewność, że gra nie przekroczy limitu do limitu żądań logowania.

Kierowanie na nowe repozytorium SDK Maven

Jeśli używasz systemu kompilacji Gradle, możesz to zrobić, zmieniając zależność od artefaktu 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 Gier Play w wywołaniu zwrotnym onCreate(..) swojego żądania Application zajęcia. Na przykład:

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

...

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

Usuń połączenia związane z logowaniem i wylogowywaniem się

Jeśli nie określasz żadnych dodatkowych zakresów, migracja przypadku użycia powinna nie jest prosty.

  1. Usuń wywołania logowania przy użyciu interfejsu GoogleSignIn API. Zalogowanie należy wykonywać przy uruchamianiu gry. Zamiast tego słuchaj wyników Próba automatycznego logowania za pomocą konta 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. Ponieważ zarządzanie kontem zostało wyłączone, wszystkie wezwania do wylogowania zostały usunięte w ustawieniach systemu operacyjnego i aplikacji Gry Play.

  3. Jeśli gracz się zalogował, usuń przycisk logowania przez Gry Play z gry. Jeśli użytkownik nie zaloguje się w momencie uruchomienia gry, może opcjonalnie wyświetlać przycisk z ikoną Gier Play; uruchomi proces logowania za pomocą metody GamesSignInClient.signIn().

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

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

Zaktualizuj nazwy klas klientów

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

Żądanie dostępu po stronie serwera

Żądając dostępu po stronie serwera, używaj 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 with 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 żądać żadnych dodatkowych zakresów. Jeśli musisz jeszcze poprosić o dodatkowe zakresy, zalecamy skorzystanie z Pakiet SDK do logowania Google wraz z usługami gier Play.

Migracja z GoogleApiClient

W przypadku starszych integracji Twoja gra może zależeć od Odmiana interfejsu GoogleApiClient API w pakiecie SDK usług gier Play. To było wycofany pod koniec 2017 roku i zastąpione przez „bezpołączenia” klientów. Aby przeprowadzić migrację, możesz zastąpić Klasa GoogleApiClient z odpowiednikiem „bez połączenia”. Dodatkowo musisz postępować zgodnie z instrukcjami na tej stronie, aby zmienić wersję gry z 1 na 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