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ć:
- Logowanie jest uruchamiane automatycznie po uruchomieniu gry. Zamiast logować się za pomocą pakietu
GoogleSignInClient
pakietu GoogleSignIn SDK, możesz użyć plikuGamesSignInClient.isAuthenticated()
, który umożliwi pobranie wyniku próby logowania automatycznego. - Klasy fabryki klienta nie będą już potrzebować przekazywanego obiektu
GoogleSignInAccount
. Nie można zażądać dodatkowych zakresów OAuth (żądaniaGAMES_LITE
iSCOPE_APPFOLDER
będą wysyłane automatycznie). - Tokeny uwierzytelniania są teraz dostarczane za pomocą
GamesSignInClient.requestServerSideAccess()
w pakiecie SDK usług gier Play. - 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.
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(). } });
Usuń wszystkie wywołania wylogowania, ponieważ zarządzanie kontem odbywa się teraz w ustawieniach systemu operacyjnego i aplikacji Gry Play.
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()
.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() } );
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