Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Nach der Einstellung der Google Sign-In API entfernen wir 2026 das Games v1 SDK. Nach Februar 2025 können Sie bei Google Play keine Titel mehr veröffentlichen, die neu mit dem Games v1 SDK eingebunden sind. Wir empfehlen stattdessen die Verwendung des Games V2 SDK.
Vorhandene Titel mit der vorherigen V1-Integration für Spiele funktionieren noch einige Jahre lang. Wir empfehlen dir jedoch, ab Juni 2025 auf V2 umzustellen.
Dieser Leitfaden bezieht sich auf die Verwendung des Play Games Services SDK v1. Das C++ SDK für Play Games Services 2 ist noch nicht verfügbar.
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 ein GameServices-Objekt konfigurieren und erstellen Das GameServices-Objekt versucht automatisch, sich anzumelden, und gibt das Ergebnis über einen OnAuthActionFinished()-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 das GameServices-Objekt und seine untergeordneten Manager verwenden, um Play Spiele-Dienste aufzurufen, darunter:
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::AndroidPlatformConfigurationplatform_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 mit GameServices::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::AuthOperationop){is_auth_in_progress_=true;started_callback(op);}).SetOnAuthActionFinished([finished_callback](gpg::AuthOperationop,gpg::AuthStatusstatus){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 eine GameServices-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 der Lebenszyklus wird von der enthaltenen GameServices-Instanz gesteuert. Dein Kunde sollte niemals eine Managerreferenz haben. Stattdessen sollte Ihr Kunde die GameServices-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 scoregame_services_->Leaderboards().SubmitScore(leaderboard_id,score);// Show the default Achievements UIgame_services_->Achievements().ShowAllUI();
Wenn Sie das GameServices-Objekt nicht mehr benötigen, bereinigen Sie die Ressourcen, indem Sie reset() auf das unique_ptr-Objekt mit dem Eigentümer des Objekts aufrufen oder das unique_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.
Alle Nutzer-Callbacks werden in einem speziellen Callback-Thread aufgerufen. Dieser Thread unterscheidet sich möglicherweise von jedem Plattformkonzept eines „Haupt-“ oder „UI-Threads“. Außerdem sollten Sie darauf achten, dass Nutzer-Callbacks schnell ausgeführt werden. Ein blockierter 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. Sehen Sie sich auch die Beispiele an, die die Verwendung des SDK veranschaulichen.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-26 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-07-26 (UTC)."],[],[],null,["# Play Games Services for C++\n\nFollowing the deprecation of the\n[Google Sign-In](https://android-developers.googleblog.com/2024/09/streamlining-android-authentication-credential-manager-replaces-legacy-apis.html)\nAPI, we are removing the games v1 SDK in 2026. After February 2025, you will be unable to publish\ntitles that are newly integrated with games v1 SDK, on Google Play. We recommend that you use the\ngames v2 SDK instead. \n\nWhile existing titles with the previous games v1 integrations continue to function for a\ncouple of years, you are encouraged to\n[migrate to v2](/games/pgs/android/migrate-to-v2)\nstarting June 2025. \n\nThis guide is for using the Play Games Services v1 SDK. The C++ SDK for\nPlay Games Services v2 is not yet available.\n\nThe Google Play games Services C++ SDK provides a C++ API for use with Google Play Game\nservices, and is meant for developers who have an existing C++ implementation\nof their game.\n\nCurrently, the SDK implements the following services:\n\n- Authorization\n- Achievements\n- Leaderboards\n- Events\n- Saved Games\n- Nearby Connections (Android only)\n- Player Statistics\n\nConcepts\n--------\n\nAt a high level, you use the SDK by following these steps:\n\n1. Set up a platform configuration for Android.\n2. Use a `GameServices::Builder` to configure and construct a `GameServices` object. The `GameServices` object automatically attempts to sign in, and returns the result via an `OnAuthActionFinished()` callback. Take note of the result returned by the callback. If the automatic sign-in attempt failed, you can display a button to let users sign in.\n3. After receiving the `OnAuthActionFinished()` result, you can use the\n `GameServices` object and its child Managers to make Play Games services calls,\n including:\n\n - Sign in (after authorization fails): `StartAuthorizationUI()`\n - Unlock achievements: `Achievements().Unlock()`\n - Show achievements using built-in UI: `Achievements().ShowAllUI()`\n - Submit a high score: `Leaderboards().SubmitScore()`\n - Sign out: `SignOut()`\n4. When you are done using the `GameServices` object, reset or destroy it.\n\nAt a more detailed level:\n\n1. Initialize a platform configuration: This is an object that contains\n platform-specific initialization information. On Android, the platform configuration contains the\n Java VM and a pointer to the current `Activity`:\n\n // In android_main(), create a platform configuration\n // and bind the object activity.\n // Alternately, attach the activity in JNI_Onload().\n gpg::AndroidPlatformConfiguration platform_configuration;\n platform_configuration.SetActivity(state-\u003eactivity-\u003eclazz);\n\n2. Construct a `GameServices` object: This object is the main entry point for\n Google Play games Services functionality. `GameServices` instances are created\n with `GameServices::Builder`.\n\n In most implementations, a given `GameServices` object will persist as long as\n your C environment does; you do not need to reinitialize it when your\n Android `Activity` pauses and resumes. \n\n // Creates a GameServices object that has lambda callbacks.\n game_services_ = gpg::GameServices::Builder()\n .SetDefaultOnLog(gpg::LogLevel::VERBOSE)\n .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) {\n is_auth_in_progress_ = true;\n started_callback(op);\n })\n .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op,\n gpg::AuthStatus status) {\n LOGI(\"Sign in finished with a result of %d\", status);\n is_auth_in_progress_ = false;\n finished_callback(op, status);\n })\n .Create(pc);\n\n3. Use the Manager classes to manage your `GameServices` object. Managers are accessed from a `GameServices` instance and group related functionality\n together. Examples of these\n include the Achievement and Leaderboard Managers. They contain no user-visible\n state themselves. Managers are returned by reference, and the containing\n `GameServices` instance controls their lifecycle. Your client should never hold\n onto a Manager reference. Instead, your client should hold on to the\n `GameServices` instance.\n\n Managers return data via immutable value type objects. These values\n reflect a consistent view of the underlying data at the point in time when\n the query was made. \n\n // Submit a high score\n game_services_-\u003eLeaderboards().SubmitScore(leaderboard_id, score);\n\n // Show the default Achievements UI\n game_services_-\u003eAchievements().ShowAllUI();\n\n4. When you are finished using the `GameServices` object, clean up by\n calling `reset()` on the `unique_ptr` that owns it, or by letting the\n `unique_ptr` automatically destroy it when going out of scope.\n\nThreading model\n---------------\n\nUnless otherwise noted, all `GameServices` and Manager methods have\nthread-safe, asynchronous implementations. They can be called on any thread without\nexternal locking, and will execute in an order consistent with their invocation\norder.\n\nAccessor methods (those that read state) come in two major variants. The first\ntype of method (with names like `FetchProperty()`) asynchronously supplies its results\nto a provided callback; the second (with names like\n`FetchPropertyBlocking()`) synchronously returns its results to the calling\nthread. \n\n // Blocking callback\n gpg::AchievementManager::FetchAllResponse fetchResponse =\n game_services_-\u003eAchievements().FetchAllBlocking(std::chrono::milliseconds(1000));\n\n // Non-blocking callback\n game_services_-\u003eAchievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,\n [] (gpg::AchievementManager::FetchAllResponse response) {\n LogI(\"Achievement response status: %d\", response.status);});\n\nAll user callbacks are invoked on a dedicated callback thread. This thread is\npotentially distinct from any platform concept of a \"main thread\" or \"UI\nthread\". You should also try to ensure that user callbacks execute quickly; a stalled callback thread\nmay cause user-visible issues (for example, delayed completion of a sign-out\nrequest).\n\nPlatform-specific information\n-----------------------------\n\nTo get started using the Play Games C++ SDK on Android, continue to the\n[quickstart guide](/games/pgs/v1/cpp/quickstart).\n\nFurther reading\n---------------\n\nBe sure to read the class documentation that comes in the Google Play Game\nservices C++ SDK for further details, and check out the\n[samples](https://github.com/playgameservices/) that demonstrate how to use the SDK.\n\nIf your game uses a backend server, see\n[Enabling Server-Side Access to Google Play Games Services](/games/pgs/v1/android/server-access)."]]