Pakiet SDK usług Google Play dla gier w C++ zawiera interfejs API C++ do wykorzystania w usługach gier Google Play. Jest przeznaczony dla deweloperów, którzy mają przygotowaną grę w C++.
Obecnie pakiet SDK stosuje te usługi:
- Upoważnienie
- Osiągnięcia
- Tabele wyników
- Zdarzenia
- Zapisane gry
- Połączenia w pobliżu (tylko Android)
- Statystyki gracza
Pojęcia
Aby korzystać z pakietu SDK, wykonaj te czynności:
- Ustaw platformę dla Androida.
- Użyj
GameServices::Builder
, aby skonfigurować i utworzyć obiektGameServices
. ObiektGameServices
automatycznie próbuje się zalogować i zwraca wynik przez wywołanie zwrotneOnAuthActionFinished()
. Zwróć uwagę na wynik zwrócony przez wywołanie zwrotne. Jeśli próba automatycznego logowania się nie powiedzie, możesz wyświetlić przycisk umożliwiający użytkownikom logowanie się. Po otrzymaniu wyniku
OnAuthActionFinished()
możesz używać obiektuGameServices
i jego menedżerów podrzędnych do wywoływania usług Gier Play, takich jak:- Zaloguj się (po nieudanej autoryzacji):
StartAuthorizationUI()
- Odblokuj osiągnięcia:
Achievements().Unlock()
- Pokazuj osiągnięcia za pomocą wbudowanego interfejsu:
Achievements().ShowAllUI()
- Prześlij wysoki wynik:
Leaderboards().SubmitScore()
- Wyloguj się:
SignOut()
- Zaloguj się (po nieudanej autoryzacji):
Gdy skończysz używać obiektu
GameServices
, zresetuj go lub zniszcz.
Bardziej szczegółowe:
Inicjowanie konfiguracji platformy: ten obiekt zawiera informacje o inicjowaniu specyficznym dla platformy. Na urządzeniu z Androidem konfiguracja platformy obejmuje maszynę wirtualną Java i wskaźnik bieżącego działania
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 funkcji usług gier Google Play.GameServices
instancji jest tworzonych za pomocąGameServices::Builder
.W większości wdrożeń dany obiekt
GameServices
będzie przechowywany tak długo, jak działa środowisko C. Nie musisz tego inicjować ponownie po wstrzymaniu i ponownym uruchomieniu AndroidaActivity
.// 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 jest możliwy z poziomu instancjiGameServices
i funkcji powiązanych z grupą. Do przykładów należą menedżery osiągnięć i tabel wyników. Nie zawierają one stanu widocznego dla użytkownika. Menedżerowie są odsyłani przez odwołanie, a ich cykl życia kontrolujeGameServices
instancja. Klient nie powinien nigdy korzystać z odwołania do menedżera. Zamiast tego klient powinien pozostać w instancjiGameServices
.Menedżerowie zwracają dane za pomocą obiektów o stałej wartości. Wartości te odzwierciedlają spójny widok danych podstawowych w momencie wykonywania zapytania.
// 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, wywołując metodęreset()
na obiekcieunique_ptr
, do którego jest ona przypisana, lub pozwalającunique_ptr
na automatyczne zniszczenie jej poza zakresem.
Model z wątkami
O ile nie wskazano inaczej, wszystkie metody GameServices
i Menedżera mają implementacje asynchroniczne i bezpieczne dla wątków. Mogą być wywoływane w dowolnym wątku bez blokowania zewnętrznych i wykonywane w kolejności zgodnej z kolejnością wywoływania.
Metody dostępu (te, które są odczytywane) występują w 2 głównych wariantach. Pierwszy typ metody (z nazwami takimi jak FetchProperty()
) asynchronicznie przekazuje wyniki do podanego wywołania zwrotnego, a drugi (z nazwami takimi jak FetchPropertyBlocking()
) synchronicznie zwraca wyniki w wątku wywołania.
// 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 potencjalnie różni się od dowolnej koncepcji platformy „głównym wątkiem” lub „wątkiem UI”. Musisz też zadbać o to, aby wywołania zwrotne użytkownika były wykonywane szybko; opóźniony wątek wywołań może powodować problemy widoczne dla użytkowników (np. opóźnione zakończenie żądania wylogowania).
Informacje o konkretnej platformie
Aby zacząć korzystać z pakietu SDK G+ Play do gier na Androida, przeczytaj krótki przewodnik.
Więcej informacji
Więcej informacji znajdziesz w dokumentacji klasy zawartej w pakiecie SDK usług gier Google Play w C++ oraz w przykładach pokazujących, jak używać pakietu SDK.
Jeśli gra korzysta z serwera backendu, zobacz Włączanie dostępu po stronie serwera do usług gier Google Play.