Pakiet SDK usług gier Google Play w języku C++ zapewnia interfejs API w języku C++ do użytku z Grą Google Play. usług. Jest przeznaczona dla programistów, którzy mają już implementację w języku C++ w danej grze.
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
Aby korzystać z pakietu SDK:
- Ustaw konfigurację platformy dla Androida.
- Użyj
GameServices::Builder
, aby skonfigurować i utworzyćGameServices
obiektu. ObiektGameServices
automatycznie próbuje się zalogować i wraca za pomocą wywołania zwrotnegoOnAuthActionFinished()
. Zanotuj wynik. zwracane przez wywołanie zwrotne. Jeśli nie udało się zalogować automatycznie, możesz: wyświetla przycisk umożliwiający użytkownikom logowanie. Po otrzymaniu wyniku
OnAuthActionFinished()
możesz użyć obiektGameServices
i jego konta podrzędne do wykonywania wywołań usług gier Play, w tym:- Logowanie (po nieudanej autoryzacji):
StartAuthorizationUI()
- Odblokuj osiągnięcia:
Achievements().Unlock()
- Pokaż osiągnięcia we wbudowanym interfejsie:
Achievements().ShowAllUI()
- Prześlij rekord:
Leaderboards().SubmitScore()
- Wyloguj się:
SignOut()
- Logowanie (po nieudanej autoryzacji):
Gdy skończysz korzystać z obiektu
GameServices
, zresetuj lub zniszcz go.
Na poziomie bardziej szczegółowym:
Zainicjuj konfigurację platformy. To jest obiekt, który zawiera dla danej platformy. W przypadku Androida konfiguracja platformy zawiera komponent Maszyna wirtualna Java i wskaźnik do bieżącej wersji
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
: ten obiekt jest głównym punktem wejścia dla funkcji usług gier Google Play; UtworzonoGameServices
instancji dziękiGameServices::Builder
.W większości implementacji dany obiekt
GameServices
będzie widoczny tak długo, tak jak ma środowisko C, nie musisz go ponownie inicjować, gdy AndroidActivity
wstrzymuje i wznawia działanie.// 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);
Aby zarządzać obiektem
GameServices
, użyj klas menedżera. Dostęp do menedżerów można uzyskać z instancjiGameServices
i funkcji związanych z grupami razem. Przykłady to między innymi menedżerowie ds. osiągnięć i tabel wyników. Nie są widoczne dla użytkowników. i wyrażanie siebie. Menedżerowie są zwracane przez odwołanie, a tag InstancjaGameServices
kontroluje cykl życia. Twój klient nie powinien nigdy do odwołania na poziomie menedżera. Zamiast tego klient powinien po prostuGameServices
instancja.Menedżerowie zwracają dane przez obiekty stałego typu wartości. Wartości te odzwierciedlają spójny obraz danych bazowych w momencie, w którym wykonano zapytanie.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
Gdy skończysz używać obiektu
GameServices
, wyczyść dane według Wywołaj połączeniereset()
na urządzeniuunique_ptr
, do którego należy, lub zezwalającunique_ptr
automatycznie niszczy je po wyjściu poza zakres.
Model do gwintowania
O ile nie zaznaczono inaczej, wszystkie metody GameServices
i menedżera
asynchroniczne, bezpieczne wątki. Można je wywoływać w dowolnym wątku bez
zewnętrznego blokowania i będzie wykonywane w kolejności zgodnej z ich wywołaniem
zamówienie.
Metody metody dostępu (te ze stanem odczytu) występują na 2 główne warianty. Pierwszy
typ metody (o nazwach takich jak FetchProperty()
) asynchronicznie dostarcza wyniki
na otrzymane wywołanie zwrotne; drugi (z nazwami takimi jak
FetchPropertyBlocking()
) synchronicznie zwraca wyniki do wywołania
w 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 dedykowanym wątku wywołania zwrotnego. Ten wątek jest potencjalnie odrębną od koncepcji „wątku głównego” na platformie lub „UI w wątku”. Warto też zadbać o szybkie wykonywanie wywołań zwrotnych użytkownika. niekończący się wątek oddzwaniania może powodować problemy widoczne dla użytkowników (na przykład opóźnione wylogowanie) ).
Informacje dotyczące platformy
Aby zacząć korzystać z pakietu SDK C++ dla Gier Play na Androidzie, otwórz krótkiego przewodnika –
Więcej informacji
Zapoznaj się z dokumentacją zajęć dołączoną do Gry Google Play. pakiet SDK C++ dla usług C++ i zapoznaj się z przykłady, które pokazują, jak korzystać z pakietu SDK.
Jeśli gra korzysta z serwera backendu, zapoznaj się z artykułem Włączanie dostępu po stronie serwera do usług gier Google Play.