Für den Zugriff auf die Funktionen der Google Play-Spieldienste muss dein Spiel das Konto des angemeldeten Spielers bereitstellen. In dieser Dokumentation wird beschrieben, wie du eine nahtlose Anmeldung in deinem Spiel implementierst.
Das Play-Spieldienste-SDK der Version 2 bietet eine Reihe von Verbesserungen, durch die die Anzahl der in deinem Spiel angemeldeten Nutzer erhöht und die Entwicklung vereinfacht wird:
- Verbesserungen für Nutzer:
- Nachdem ein Standardkonto ausgewählt wurde, sind Nutzer angemeldet, ohne auf eine Aufforderung reagieren zu müssen.
- Nutzer müssen nicht mehr die Play Spiele App herunterladen, um sich über die Play-Spieldienste anzumelden oder ein neues Konto zu erstellen.
- Nutzer können ihre Play-Spieldienste-Konten jetzt für mehrere Spiele auf einer einzigen Seite verwalten.
- Verbesserungen für Entwickler:
- Der Clientcode muss den An- oder Abmeldevorgang nicht mehr verarbeiten, da die Anmeldung automatisch ausgelöst wird, wenn das Spiel beginnt, und die Kontoverwaltung in den Einstellungen des Betriebssystems erfolgt.
Integration eines neuen Clients
In diesem Abschnitt wird beschrieben, wie du eine neue Clientintegration in Play-Spieldienste Sign In v2 vornimmst.
Abhängigkeit hinzufügen
Fügen Sie der Datei build.gradle
auf Stammebene Ihrer App die Abhängigkeit vom Play Game Services SDK hinzu. Wenn Sie Gradle verwenden, können Sie die Abhängigkeit so hinzufügen oder aktualisieren:
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
Projekt-ID definieren
Führe die folgenden Schritte aus, um deiner App die Projekt-ID des Play Games Services SDK hinzuzufügen:
Fügen Sie in der Datei
AndroidManifest.xml
Ihrer App dem<application>
-Element das folgende<meta-data>
-Element und die folgenden Attribute hinzu:<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>
Definieren Sie den String-Ressourcenverweis
@string/game_services_project_id
und verwenden Sie dabei die Projekt-ID der Spieldienste Ihres Spiels als Wert. Die Projekt-ID der Spieldienste finden Sie in der Google Play Console auf der Seite Konfiguration unter dem Spielnamen.Fügen Sie in der Datei
res/values/strings.xml
eine String-Ressourcenreferenz hinzu und legen Sie Ihre Projekt-ID als Wert fest. In der Google Play Console finden Sie Ihre Projekt-ID auf der Seite Konfiguration unter dem Namen des Spiels. Beispiele:<!-- 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>
SDK initialisieren
Initialisiere das Play Spiele SDK im onCreate(..)
-Callback deiner Application
-Klasse.
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
Anmeldeergebnis abrufen
Wenn dein Spiel gestartet wird, wird immer versucht, den Nutzer anzumelden. Um den Nutzer zu authentifizieren, musst du prüfen, ob er sich erfolgreich angemeldet hat, und dann seine Spieler-ID abrufen.
Um den Anmeldeversuch zu bestätigen, rufen Sie GamesSignInClient.isAuthenticated()
auf und verwenden Sie addOnCompleteListener
, um die Ergebnisse abzurufen. Beispiele:
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().
}
});
Wenn sich der Nutzer beim Start des Spiels nicht anmelden möchte, kann optional weiterhin eine Schaltfläche mit dem Play Spiele-Symbol angezeigt werden. Wenn der Nutzer auf die Schaltfläche drückt, kann er dann noch einmal versuchen, sich durch Aufrufen von GamesSignInClient.signIn()
anzumelden.
Nachdem du bestätigt hast, dass der Nutzer angemeldet ist, kannst du die Spieler-ID abrufen, um den Nutzer zu identifizieren. Beispiele:
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
// Get PlayerID with mTask.getResult().getPlayerId()
}
);
.
Zu Play-Spieldienste-Anmeldung v2 migrieren
In diesem Abschnitt wird beschrieben, wie du deinen Clientcode von Version 1 zu Version 2 der Play-Spieldienste migrierst.
Das neue SDK enthält vier wichtige Änderungen, die eine erfolgreiche Anmeldung ermöglichen:
- Die Anmeldung wird automatisch ausgelöst, wenn dein Spiel gestartet wird. Anstatt die
GoogleSignInClient
des GoogleSignIn SDK für die Anmeldung zu verwenden, können SieGamesSignInClient.isAuthenticated()
verwenden, um das Ergebnis des automatischen Anmeldeversuchs abzurufen. - Client Factory-Klassen benötigen kein übergebenes
GoogleSignInAccount
-Objekt mehr. Zusätzliche OAuth-Bereiche können nicht angefordert werden (GAMES_LITE
werden automatisch angefordert). - Authentifizierungstoken werden jetzt mit
GamesSignInClient.requestServerSideAccess()
im Play Game Services SDK bereitgestellt. - Die Abmeldemethode wurde entfernt und wir benötigen keine In-Game-Schaltfläche mehr, um sich in den Play-Spieldiensten an- oder abzumelden.
Außerdem müssen Sie sich in Ihrem Spiel anmelden, wenn es gestartet wird. Daher sollten Sie Ihre Kontingentverwaltung prüfen, damit Ihr Spiel das Kontingent für Anmeldeanfragen nicht überschreitet.
Targeting auf das neue SDK-Maven-Repository vornehmen
Wenn Sie das Gradle-Build-System verwenden, können Sie Ihre Abhängigkeit zum Artefakt com.google.android.gms:play-services-games-v2:+
in der build.gradle
-Datei Ihres Moduls ändern. Beispiele:
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
SDK initialisieren
Initialisiere das Play Spiele SDK im onCreate(..)
-Callback deiner Application
-Klasse. Beispiele:
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
An- und Abmeldeanrufe entfernen
Wenn Sie keine zusätzlichen Bereiche angeben, sollte die Migration Ihres Anwendungsfalls einfach sein.
Entfernen Sie Anmeldeaufrufe mithilfe der GoogleSignIn API. Die Anmeldung erfolgt immer beim Start des Spiels. Überwachen Sie stattdessen das Ergebnis des automatischen Anmeldeversuchs mit
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(). } });
Entfernen Sie alle Aufrufe zum Abmelden, da die Kontoverwaltung in den Einstellungen des Betriebssystems und der Play Spiele App enthalten ist.
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 anmelden möchte, können Sie optional weiterhin eine Schaltfläche mit dem Play Spiele-Symbol anzeigen und den Anmeldevorgang mit
GamesSignInClient.signIn()
auslösen.Nachdem du überprüft hast, ob der Nutzer angemeldet ist, kannst du die Spieler-ID abrufen, um den Nutzer zu identifizieren.
.PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> { // Get PlayerID with mTask.getResult().getPlayerId() } );
Entfernen Sie Ihre 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()
statt Games.getFooClient()
.
Serverseitigen Zugriff anfordern
Wenn du den serverseitigen Zugriff anfragen möchtest, verwende GamesSignInClient.requestServerSideAccess()
statt 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.
}
});
Zusätzliche Bereiche entfernen
Mit Play-Spieldienste v2 können Sie keine zusätzlichen Bereiche anfordern. Wenn Sie weitere Bereiche anfordern müssen, empfehlen wir, neben den Play-Spieldiensten das Google Sign In SDK zu verwenden.
Migration von GoogleApiClient
Bei älteren vorhandenen Integrationen hängt dein Spiel möglicherweise von der GoogleApiClient API-Variante des Play Games Services SDK ab. Dies wurde Ende 2017 eingestellt und durch "verbindungslose" Clients ersetzt. Für die Migration können Sie die Klasse GoogleApiClient
durch ein „verbindungsloses“ Äquivalent ersetzen. Dann müssen Sie außerdem der oben stehenden Anleitung folgen, um Ihr Spiel von Version 1 zu Version 2 zu migrieren. Im Folgenden finden Sie eine Zuordnung gängiger 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