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:
- Skonfiguruj konfigurację platformy na Androida.
- Użyj klasy
GameServices::Builder
, aby skonfigurować i utworzyć obiektGameServices
. ObiektGameServices
automatycznie próbuje się zalogować i zwraca wynik za pomocą wywołania zwrotnegoOnAuthActionFinished()
. 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ę. Po otrzymaniu wyniku
OnAuthActionFinished()
możesz używać obiektuGameServices
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()
- Logowanie (po nieudanej autoryzacji):
Gdy skończysz korzystać z obiektu
GameServices
, zresetuj go lub go zniszcz.
Bardziej szczegółowo:
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);
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 AndroidActivity
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);
Do zarządzania obiektem
GameServices
używaj klas Manager. Menedżerów można otwierać z poziomu instancjiGameServices
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();
Po zakończeniu korzystania z obiektu
GameServices
należy go wyczyścić, wywołując metodęreset()
obiektuunique_ptr
, który jest jego właścicielem, lub pozwalając obiektowiunique_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.