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:
- Logowanie uruchamia się automatycznie po uruchomieniu gry. Zamiast używać do logowania funkcji
GoogleSignInClient
w pakiecie SDKGoogleSignIn
, możesz użyć funkcjiGamesSignInClient.isAuthenticated()
, aby pobrać wynik automatycznej próby logowania. - Klasy Client Factory nie będą już wymagać przekazywania obiektu
GoogleSignInAccount
. Nie można poprosić o dodatkowe zakresy OAuth (GAMES_LITE
zostanie poproszony automatycznie). - Tokeny uwierzytelniania są teraz udostępniane za pomocą pakietu SDK usług gier Play
GamesSignInClient.requestServerSideAccess()
. - 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.
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(). } });
Usuń wszystkie wezwania do wylogowania się, ponieważ zarządzanie kontem jest teraz dostępne w ustawieniach systemu operacyjnego i aplikacji Gier Play.
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()
.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() } );
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