Usługi gier Play dla C++

Pakiet SDK usług gier Google Play w języku C++ udostępnia interfejs C++ do użycia z usługami gier Google Play. Jest przeznaczony dla deweloperów, którzy mają już w swojej grze implementację w C++.

Obecnie pakiet SDK implementuje te usługi:

  • Autoryzacja
  • Osiągnięcia
  • Tabele wyników
  • Wydarzenia
  • Zapisane gry
  • Połączenia w pobliżu (tylko Android)
  • Statystyki gracza

Pojęcia

Ogólnie rzecz biorąc, korzystanie z pakietu SDK polega na wykonaniu tych czynności:

  1. Skonfiguruj konfigurację platformy na Androida.
  2. Użyj klasy GameServices::Builder, aby skonfigurować i utworzyć obiekt GameServices. Obiekt GameServices automatycznie próbuje się zalogować i zwraca wynik za pomocą wywołania zwrotnego OnAuthActionFinished(). Zanotuj wynik zwrócony przez wywołanie zwrotne. Jeśli automatyczna próba zalogowania się zakończyła się niepowodzeniem, możesz wyświetlić przycisk, aby umożliwić użytkownikom zalogowanie się.
  3. Po otrzymaniu wyniku OnAuthActionFinished() możesz używać obiektu GameServices i jego podrzędnych obiektów Menedżer, aby wykonywać wywołania usług w Gierach Google Play, w tym:

    • Logowanie (po nieudanej autoryzacji): StartAuthorizationUI()
    • Odblokowanie osiągnięć: Achievements().Unlock()
    • Wyświetlanie osiągnięć za pomocą wbudowanego interfejsu: Achievements().ShowAllUI()
    • Prześlij swój rekord: Leaderboards().SubmitScore()
    • Wyloguj się: SignOut()
  4. Gdy skończysz korzystać z obiektu GameServices, zresetuj go lub go zniszcz.

Bardziej szczegółowo:

  1. Inicjalizacja konfiguracji platformy: to obiekt zawierający informacje o inicjalizacji specyficznej dla danej platformy. W przypadku Androida konfiguracja platformy zawiera maszynę wirtualną Java i wskaźnik do bieżącego 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. Utwórz obiekt GameServices: jest to główny punkt wejścia do funkcji Usług gier Google Play. GameServices instancji są tworzone za pomocą GameServices::Builder.

    W większości implementacji dany obiekt GameServices będzie przechowywany tak długo, jak długo będzie istniało środowisko C. Nie musisz go ponownie inicjować, gdy aplikacja Android Activity się zatrzyma i ponownie uruchomi.

    // 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. Do zarządzania obiektem GameServices używaj klas Manager. Menedżerów można otwierać z poziomu instancji GameServices i funkcji powiązanych z grupą. Przykładami takich funkcji są menedżer osiągnięć i tabeli wyników. Nie zawierają one żadnych danych widocznych dla użytkownika. Menedżerowie są zwracani przez odwołanie, a ich cykl życia jest kontrolowany przez instancję GameServices, która je zawiera. Klient nigdy nie powinien przechowywać odwołania do menedżera. Klient powinien zachować instancję GameServices.

    Menedżerowie zwracają dane za pomocą obiektów typu niezmiennej wartości. Te wartości odzwierciedlają spójne dane źródłowe w momencie wysłania zapytania.

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. Po zakończeniu korzystania z obiektu GameServices należy go wyczyścić, wywołując metodę reset() obiektu unique_ptr, który jest jego właścicielem, lub pozwalając obiektowi unique_ptr na automatyczne usunięcie go, gdy opuści on zakres.

Model tworzenia wątków

O ile nie zaznaczono inaczej, wszystkie metody GameServices i Menedżer mają implementacje asynchroniczne, które są bezpieczne w zakresie wątków. Mogą być wywoływane w dowolnym wątku bez blokowania zewnętrznego i będą wykonywane w kolejności zgodnej z kolejnością wywołania.

Metody dostępu (czyli te, które odczytują stan) występują w 2 głównych wariantach. Pierwszy typ metody (z nazwami takimi jak FetchProperty()) asynchronicznie przekazuje wyniki do podanego wywołania zwrotnego; drugi (z nazwami takimi jak FetchPropertyBlocking()) zwraca wyniki synchronicznie do wywołującego wątku.

// 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);});

Wszystkie wywołania zwrotne użytkownika są wywoływane w wydzielonym wątku wywołania zwrotnego. Ten wątek może się różnić od koncepcji „wątku głównego” lub „wątku interfejsu użytkownika” na dowolnej platformie. Musisz też zadbać o to, aby wywołania zwrotne dotyczące użytkownika były wykonywane szybko. Zatrzymanie wątku wywołania zwrotnego może spowodować widoczne dla użytkownika problemy (np. opóźnione wykonanie prośby o wylogowanie).

Informacje o platformie

Aby rozpocząć korzystanie z pakietu SDK C++ do Gier Play na Androidzie, zapoznaj się z krótkim przewodnikiem.

Więcej materiałów

Aby uzyskać więcej informacji, przeczytaj dokumentację klasy dołączoną do pakietu SDK usług gier Google Play w C++, a także zapoznaj się z przykładami, które pokazują, jak korzystać z pakietu SDK.

Jeśli Twoja gra korzysta z serwera backendu, zapoznaj się z artykułem Włączanie dostępu po stronie serwera do usług gier Google Play.