Das C++ SDK der Google Play-Spieldienste bietet eine C++ API zur Verwendung mit Google Play Game. und richtet sich an Entwickler, die bereits eine C++- für ihr Spiel.
Derzeit implementiert das SDK die folgenden Dienste:
- Autorisierung
- Erfolge
- Bestenlisten
- Ereignisse
- Gespeicherte Spiele
- Nearby Connections (nur Android)
- Spielerstatistik
Konzepte
Auf übergeordneter Ebene können Sie das SDK folgendermaßen verwenden:
- Eine Plattformkonfiguration für Android einrichten
GameServices::Builder
verwenden, umGameServices
zu konfigurieren und zu erstellen -Objekt enthält. DasGameServices
-Objekt versucht automatisch, sich anzumelden, und gibt das Ergebnis über einenOnAuthActionFinished()
-Callback. Notieren Sie sich das Ergebnis. die vom Callback zurückgegeben wurden. 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 denGameServices
-Objekt und dessen untergeordneten Managern, um Play-Spieldienste-Aufrufe zu tätigen, einschließlich:- Anmeldung (nach fehlgeschlagener Autorisierung):
StartAuthorizationUI()
- Erfolge freischalten:
Achievements().Unlock()
- Erfolge mit integrierter Benutzeroberfläche anzeigen:
Achievements().ShowAllUI()
- Highscore senden:
Leaderboards().SubmitScore()
- Abmelden:
SignOut()
- Anmeldung (nach fehlgeschlagener Autorisierung):
Wenn Sie das
GameServices
-Objekt nicht mehr benötigen, setzen Sie es zurück oder löschen Sie es.
Im Detail:
Plattformkonfiguration initialisieren: Dies ist ein Objekt, das plattformspezifischen Initialisierungsinformationen. Unter Android enthält die Plattformkonfiguration die Java-VM und ein Zeiger auf den aktuellen
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 Funktionen der Google Play-Spieldienste.GameServices
Instanzen werden erstellt mitGameServices::Builder
.In den meisten Implementierungen bleibt ein bestimmtes
GameServices
-Objekt so lange bestehen, Ihre C-Umgebung tut. müssen Sie sie nicht neu initialisieren, AndroidActivity
wird pausiert und fortgesetzt.// 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. Der Zugriff auf Manager erfolgt über eineGameServices
-Instanz und gruppenbezogene Funktionen miteinander verbinden. Beispiele: die Achievement- und Leaderboard-Manager. Sie enthalten keine für den Nutzer sichtbaren zu erkennen. Manager werden durch Verweis zurückgegeben, und die enthaltendeGameServices
-Instanz steuert ihren Lebenszyklus. Der Kunde sollte niemals in eine Manager-Referenz. Stattdessen sollten Sie sich an derGameServices
-Instanz.Manager geben Daten über unveränderliche Werttypobjekte zurück. Diese Werte und eine einheitliche Ansicht der zugrunde liegenden Daten zum Zeitpunkt widerspiegeln, an dem die Abfrage gestellt wurde.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
Wenn Sie mit der Verwendung des
GameServices
-Objekts fertig sind, führen Sie die Bereinigung durchreset()
auf derunique_ptr
aufrufen, der es gehört, oder indem derunique_ptr
löscht ihn automatisch, wenn er außerhalb des Geltungsbereichs liegt.
Threading-Modell
Sofern nicht anders angegeben, haben alle GameServices
- und Manager-Methoden
Thread-sicheren, asynchronen Implementierungen. Sie können in jedem Thread aufgerufen werden, ohne
externe Sperre und wird in einer Reihenfolge ausgeführt, die mit ihrem Aufruf übereinstimmt
Reihenfolge.
Die Methoden, die den Status lesen, gibt es in zwei Hauptvarianten. Die erste
Methodentyp (mit Namen wie FetchProperty()
) stellt Ergebnisse asynchron bereit
einem bereitgestellten Callback hinzugefügt. das zweite (mit Namen wie
FetchPropertyBlocking()
) gibt die Ergebnisse synchron an die aufrufende
Diskussions-Thread.
// 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 Nutzerrückrufe werden in einem speziellen Callback-Thread aufgerufen. Dieser Thread ist sich potenziell von dem Plattformkonzept eines „Hauptthreads“ unterscheiden, oder „Benutzeroberfläche“ Thread". Sie sollten auch sicherstellen, dass Nutzer-Callbacks schnell ausgeführt werden. einen verzögerten Callback-Thread können zu sichtbaren Problemen für Nutzer führen, z. B. eine verzögerte Abmeldung. -Anforderung).
Plattformspezifische Informationen
Wenn du das Play Spiele C++ SDK unter Android verwenden möchtest, fahre mit der Kurzanleitung
Weitere Informationen
Lies dir unbedingt die Kursdokumentation im Google Play-Spiel durch. C++ SDK, um weitere Informationen zu erhalten, und werfen Sie einen Blick in die Beispiele für die Verwendung des SDK
Wenn dein Spiel einen Backend-Server verwendet, siehe Serverseitigen Zugriff auf Google Play-Spieldienste aktivieren