Aby można było uzyskać dostęp do usług gier Google Play, gra musi mieć dostęp do konta zalogowanego gracza. Z tej dokumentacji dowiesz się, jak wdrożyć w grze bezproblemowe logowanie.
Pakiet SDK Usług gier Play w wersji 2 zawiera wiele ulepszeń, które zwiększają liczbę użytkowników zalogowanych w Twojej grze i ułatwiają jej tworzenie:
- Ulepszenia dla użytkowników:
- Po wybraniu konta domyślnego użytkownicy są zalogowani bez konieczności interakcji z prośbą.
- Użytkownicy nie muszą już pobierać aplikacji Gry Play, aby logować się w usługach gier Play ani tworzyć nowego konta.
- Użytkownicy mogą teraz zarządzać swoimi kontami usług gier Play w wielu grach na jednej stronie.
- Ulepszenia dla deweloperów:
- Kod klienta nie musi już obsługiwać procesu logowania ani wylogowywania, ponieważ logowanie jest uruchamiane automatycznie po uruchomieniu gry, a zarządzanie kontem odbywa się w ustawieniach systemu operacyjnego.
Integracja z nowym klientem
W tej sekcji dowiesz się, jak przeprowadzić nową integrację klienta z usługami gier Play Zaloguj się w wersji 2.
Dodaj zależność
Dodaj zależność z pakietu SDK usług gier Play do pliku build.gradle
na poziomie głównym aplikacji. Jeśli używasz Gradle, możesz dodać lub zaktualizować zależność w ten sposób:
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
Zdefiniuj identyfikator projektu
Aby dodać do aplikacji identyfikator projektu z pakietu SDK usług gier Play, wykonaj te czynności:
W pliku
AndroidManifest.xml
aplikacji dodaj do elementu<application>
ten element<meta-data>
i atrybuty:<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>
Zdefiniuj odwołanie do zasobu ciągu znaków
@string/game_services_project_id
, używając jako wartości identyfikatora projektu w usługach gier gier. Identyfikator projektu w usługach gier znajdziesz pod nazwą gry na stronie Konfiguracja w Konsoli Google Play.W pliku
res/values/strings.xml
dodaj odniesienie do zasobu w postaci ciągu znaków i ustaw identyfikator projektu jako wartość. W Konsoli Google Play identyfikator projektu znajdziesz pod nazwą gry na stronie Konfiguracja. Na przykład:<!-- res/values/strings.xml --> <resources> <!-- Replace 0000000000 with your game’s project id. Example value shown above. --> <string translatable="false" name="game_services_project_id"> 0000000000 </string> </resources>
Zainicjuj pakiet SDK
Zainicjuj pakiet SDK Gier Play w wywołaniu zwrotnym onCreate(..)
klasy Application
.
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
Pobierz wynik logowania
Po uruchomieniu gry będzie ona zawsze próbowała zalogować użytkownika. Aby uwierzytelnić użytkownika, musisz sprawdzić, czy udało mu się zalogować, a potem uzyskać jego identyfikator gracza.
Aby zweryfikować próbę logowania, wywołaj GamesSignInClient.isAuthenticated()
i użyj metody addOnCompleteListener
, aby pobrać wyniki. Na przykład:
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().
}
});
Jeśli użytkownik nie zdecyduje się na logowanie po uruchomieniu gry, możesz opcjonalnie nadal wyświetlać przycisk z ikoną Gier Play. Potem możesz spróbować zalogować użytkownika ponownie, wywołując GamesSignInClient.signIn()
, gdy użytkownik go naciśnie.
Po sprawdzeniu, czy użytkownik jest zalogowany, możesz pobrać identyfikator odtwarzacza, aby go zidentyfikować. Na przykład:
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
// Get PlayerID with mTask.getResult().getPlayerId()
}
);
Przejdź na logowanie w usługach gier Play w wersji 2
W tej sekcji 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 (żądanieGAMES_LITE
zostanie wysł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, migracja danego 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