Zur Anmeldung mit den Play-Spieldiensten (Version 2) migrieren

In diesem Leitfaden wird beschrieben, wie Sie Ihren Clientcode von Play Spiele-Diensten v1 zu v2 migrieren.

Das neue SDK enthält vier wichtige Änderungen, mit denen die Wahrscheinlichkeit einer erfolgreichen Anmeldung erhöht wird.

  1. Die Anmeldung wird automatisch ausgelöst, wenn Ihr Spiel gestartet wird. Anstatt GoogleSignInClient des GoogleSignIn SDKs für die Anmeldung zu verwenden, kannst du GamesSignInClient.isAuthenticated() verwenden, um das Ergebnis des automatischen Anmeldeversuchs abzurufen.
  2. Für Client-Factory-Klassen muss kein GoogleSignInAccount-Objekt mehr übergeben werden. Zusätzliche OAuth-Bereiche können nicht angefordert werden. GAMES_LITE wird automatisch angefordert.
  3. Authentifizierungstokens werden jetzt mithilfe von GamesSignInClient.requestServerSideAccess() im Play-Spieldienste-SDK bereitgestellt.
  4. Die Abmeldemethode wird entfernt und wir benötigen keine In-Game-Schaltfläche mehr, um sich bei den Play-Spieldiensten an- oder abzumelden.

Außerdem kommt es bei Ihrem Spiel zu zusätzlichen Anmeldungen, da beim Start des Spiels eine automatische Anmeldung erfolgt. Daher sollten Sie Ihre Kontingentverwaltung prüfen, um sicherzustellen, dass Ihr Spiel das Kontingent für Anmeldeanfragen nicht überschreitet.

Ziel auf das neue Maven-Repository des SDK legen

Wenn Sie das Gradle-Buildsystem verwenden, können Sie die Abhängigkeit in der Datei build.gradle Ihres Moduls zum com.google.android.gms:play-services-games-v2:+-Artefakt ändern. Beispiel:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

SDK initialisieren

Initialisiere das Play Spiele SDK im onCreate(..)-Callback deiner Application-Klasse. Beispiel:

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

...

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

Anrufe zum Anmelden und Abmelden entfernen

Wenn Sie keine zusätzlichen Bereiche angeben, sollte die Migration Ihres Anwendungsfalls unkompliziert sein.

  1. Entfernen Sie Aufrufe zur Anmeldung mit der GoogleSignIn API. Die Anmeldung erfolgt immer beim Starten des Spiels. Verwenden Sie stattdessen GamesSignInClient.isAuthenticated(), um das Ergebnis des automatischen Anmeldeversuchs abzuhören.

    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. Alle Aufforderungen zur Abmeldung wurden entfernt, da die Kontoverwaltung jetzt in den Einstellungen des Betriebssystems und der Play Spiele App enthalten ist.

  3. Wenn der Spieler angemeldet ist, entfernen Sie die Anmeldeschaltfläche für Play Spiele aus Ihrem Spiel. Wenn sich der Nutzer beim Start des Spiels nicht anmeldet, können Sie optional weiterhin eine Schaltfläche mit dem Play Spiele-Symbol anzeigen und die Anmeldung mit GamesSignInClient.signIn() auslösen.

  4. Nachdem du überprüft hast, ob der Nutzer angemeldet ist, kannst du die Player-ID abrufen, um den Nutzer zu identifizieren.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Entfernen Sie die Abhängigkeit von der GoogleSignIn API, wenn sie nicht mehr verwendet wird.

Clientklassennamen aktualisieren

Verwenden Sie beim Erstellen von Clients (z.B. LeaderboardsClient oder AchievementsClient) PlayGames.getFooClient() anstelle von Games.getFooClient().

Serverseitigen Zugriff anfordern

Verwende GamesSignInClient.requestServerSideAccess() anstelle von GoogleSignInAccount.getServerAuthCode(), wenn du serverseitigen Zugriff anforderst.

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.
    }
});

Zusätzliche Bereiche entfernen

Mit Version 2 der Play-Spieldienste können Sie keine zusätzlichen Bereiche anfordern. Wenn Sie noch zusätzliche Bereiche anfordern müssen, empfehlen wir Ihnen, das Google Sign In SDK zusammen mit den Play Spiele-Diensten zu verwenden.

Migration von GoogleApiClient

Bei älteren Integrationen hängt Ihr Spiel möglicherweise von der GoogleApiClient API-Variante des Play-Spieldienste-SDK ab. Dieser Dienst wurde Ende 2017 eingestellt und durch „verbindungslose“ Clients ersetzt. Für die Migration können Sie die Klasse GoogleApiClient durch ein Äquivalent ohne Verbindung ersetzen. Folgen Sie dann der Anleitung auf dieser Seite, um Ihr Spiel von Version 1 zu Version 2 zu migrieren. Hier eine Zuordnung häufiger Klassen:

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