Erste Schritte mit den Play-Spieldiensten für C++

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:

  1. Eine Plattformkonfiguration für Android einrichten
  2. GameServices::Builder verwenden, um GameServices zu konfigurieren und zu erstellen -Objekt enthält. Das GameServices-Objekt versucht automatisch, sich anzumelden, und gibt das Ergebnis über einen OnAuthActionFinished()-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.
  3. Nachdem Sie das OnAuthActionFinished()-Ergebnis erhalten haben, können Sie den GameServices-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()
  4. Wenn Sie das GameServices-Objekt nicht mehr benötigen, setzen Sie es zurück oder löschen Sie es.

Im Detail:

  1. 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);
    
  2. GameServices-Objekt erstellen: Dieses Objekt ist der Haupteinstiegspunkt für Funktionen der Google Play-Spieldienste. GameServices Instanzen werden erstellt mit GameServices::Builder.

    In den meisten Implementierungen bleibt ein bestimmtes GameServices-Objekt so lange bestehen, Ihre C-Umgebung tut. müssen Sie sie nicht neu initialisieren, Android Activity 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);
    
  3. Verwenden Sie die Manager-Klassen, um Ihr GameServices-Objekt zu verwalten. Der Zugriff auf Manager erfolgt über eine GameServices-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 enthaltende GameServices-Instanz steuert ihren Lebenszyklus. Der Kunde sollte niemals in eine Manager-Referenz. Stattdessen sollten Sie sich an der GameServices-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();
    
  4. Wenn Sie mit der Verwendung des GameServices-Objekts fertig sind, führen Sie die Bereinigung durch reset() auf der unique_ptr aufrufen, der es gehört, oder indem der unique_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