Das C++ SDK für Google Play-Spieldienste bietet eine C++ API für die Verwendung mit Google Play-Spieldiensten und richtet sich an Entwickler, die bereits eine C++-Implementierung ihres Spiels haben.
Derzeit werden im SDK die folgenden Dienste implementiert:
- Autorisierung
- Erfolge
- Bestenlisten
- Ereignisse
- Gespeicherte Spiele
- Nearby Connections (nur Android)
- Spielerstatistiken
Konzepte
So verwenden Sie das SDK:
- Richten Sie eine Plattformkonfiguration für Android ein.
- Mit einem
GameServices::Builder
können Sie einGameServices
-Objekt konfigurieren und erstellen. DasGameServices
-Objekt versucht automatisch, sich anzumelden, und gibt das Ergebnis über einenOnAuthActionFinished()
-Callback zurück. Notieren Sie sich das vom Callback zurückgegebene Ergebnis. Wenn der automatische Anmeldeversuch fehlgeschlagen ist, können Sie eine Schaltfläche anzeigen, über die sich Nutzer anmelden können. Nachdem Sie das
OnAuthActionFinished()
-Ergebnis erhalten haben, können Sie dasGameServices
-Objekt und seine untergeordneten Manager verwenden, um Play Spiele-Dienste aufzurufen, darunter:- Anmeldung (nach fehlgeschlagener Autorisierung):
StartAuthorizationUI()
- Erfolge freischalten:
Achievements().Unlock()
- Erfolge über die integrierte Benutzeroberfläche anzeigen:
Achievements().ShowAllUI()
- Highscore einreichen:
Leaderboards().SubmitScore()
- Abmelden:
SignOut()
- Anmeldung (nach fehlgeschlagener Autorisierung):
Wenn Sie das
GameServices
-Objekt nicht mehr verwenden, setzen Sie es zurück oder löschen Sie es.
Im Detail:
Plattformkonfiguration initialisieren: Dies ist ein Objekt, das platformspezifische Informationen zur Initialisierung enthält. Unter Android enthält die Plattformkonfiguration die Java-VM und einen Verweis auf die aktuelle
Activity
:// In android_main(), create a platform configuration // and bind the object activity. // Alternately, attach the activity in JNI_Onload(). gpg::AndroidPlatformConfiguration platform_configuration; platform_configuration.SetActivity(state->activity->clazz);
GameServices
-Objekt erstellen: Dieses Objekt ist der Haupteinstiegspunkt für die Funktionen der Google Play-Spieldienste.GameServices
-Instanzen werden mitGameServices::Builder
erstellt.In den meisten Implementierungen bleibt ein bestimmtes
GameServices
-Objekt so lange erhalten, wie die C-Umgebung aktiv ist. Sie müssen es nicht neu initialisieren, wenn Ihre Android-Activity
-Anwendung angehalten und fortgesetzt wird.// Creates a GameServices object that has lambda callbacks. game_services_ = gpg::GameServices::Builder() .SetDefaultOnLog(gpg::LogLevel::VERBOSE) .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) { is_auth_in_progress_ = true; started_callback(op); }) .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op, gpg::AuthStatus status) { LOGI("Sign in finished with a result of %d", status); is_auth_in_progress_ = false; finished_callback(op, status); }) .Create(pc);
Verwenden Sie die Manager-Klassen, um Ihr
GameServices
-Objekt zu verwalten. Auf Manager wird über eineGameServices
-Instanz und gruppierte Funktionen gemeinsam zugegriffen. Beispiele hierfür sind die Tools für Erfolge und Bestenlisten. Sie enthalten selbst keine für Nutzer sichtbaren Status. Manager werden per Verweis zurückgegeben und deren Lebenszyklus wird von der enthaltendenGameServices
-Instanz gesteuert. Dein Kunde sollte niemals eine Managerreferenz haben. Stattdessen sollte Ihr Kunde dieGameServices
-Instanz beibehalten.Manager geben Daten über Objekte mit unveränderlichen Werten zurück. Diese Werte spiegeln eine konsistente Ansicht der zugrunde liegenden Daten zum Zeitpunkt der Abfrage wider.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
Wenn Sie das
GameServices
-Objekt nicht mehr benötigen, bereinigen Sie die Ressourcen, indem Siereset()
auf dasunique_ptr
-Objekt mit dem Eigentümer des Objekts aufrufen oder dasunique_ptr
-Objekt automatisch löschen lassen, wenn es nicht mehr im Gültigkeitsbereich ist.
Thread-Modell
Sofern nicht anders angegeben, haben alle GameServices
- und Managermethoden threadsichere, asynchrone Implementierungen. Sie können ohne externe Sperrung in jedem Thread aufgerufen werden und werden in der Reihenfolge ihrer Aufrufe ausgeführt.
Es gibt zwei Hauptvarianten von Zugriffsmethoden (Methoden, die den Status lesen). Der erste Methodentyp (mit Namen wie FetchProperty()
) stellt seine Ergebnisse asynchron einem bereitgestellten Callback zur Verfügung. Der zweite (mit Namen wie FetchPropertyBlocking()
) gibt seine Ergebnisse synchron an den aufrufenden Thread zurück.
// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));
// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
[] (gpg::AchievementManager::FetchAllResponse response) {
LogI("Achievement response status: %d", response.status);});
Alle Nutzer-Callbacks werden in einem speziellen Callback-Thread aufgerufen. Dieser Thread unterscheidet sich möglicherweise von jedem Plattformkonzept eines „Hauptthreads“ oder „UI-Threads“. Außerdem sollten Sie darauf achten, dass Nutzer-Callbacks schnell ausgeführt werden. Ein stehengebliebener Callback-Thread kann zu für Nutzer sichtbaren Problemen führen, z. B. zu einer verzögerten Ausführung einer Abmeldeanfrage.
Plattformspezifische Informationen
Wenn Sie mit der Verwendung des Play Games C++ SDK auf Android beginnen möchten, fahren Sie mit der Kurzanleitung fort.
Weitere Informationen
Weitere Informationen finden Sie in der Klassendokumentation im C++ SDK für die Google Play-Spieldienste. Außerdem können Sie sich die Beispiele ansehen, die die Verwendung des SDK veranschaulichen.
Wenn Ihr Spiel einen Back-End-Server verwendet, lesen Sie den Hilfeartikel Serverseitigen Zugriff auf die Google Play-Spieldienste aktivieren.